AIR系列|板载LED|gpio引脚选择|GPIO|流水灯|LuatOS-SOC接口|官方demo|学习(20-1):GPIO库基础

news2024/11/24 7:00:41

AIR系列各型号开发板板载LED对应管脚及GPIO控制代码

AIR103:

rtos_bsp == "AIR103" then -- Air103开发板LED引脚编号
        --return pin.PB26, pin.PB25, pin.PB24
        return 42,41,40

AIR105:

rtos_bsp == "AIR105" then -- Air105开发板LED引脚编号
        --return pin.PC3,pin.PD14, pin.PD15
        return 35,62,63

ESP32C3:

rtos_bsp == "ESP32C3" then -- ESP32C3开发板的引脚
        return 12, 13, 255 -- 开发板上就2个灯

AIR780E:

rtos_bsp == "EC618" then -- Air780E开发板引脚
        return 27, 255, 255 -- AIR780E开发板上就一个灯

ESP32S3:

rtos_bsp == "ESP32S3" then -- ESP32S3开发板引脚
        return 10, 11, 255 -- ESP32S3开发板LED引脚编号


pinx() 函数

--根据不同开发板,给LED赋值不同的gpio引脚编号:

--【HaoSir2022】于2022年4月21日增加
local rtos_bsp = rtos.bsp()
function pinx() -- 根据不同开发板,给LED赋值不同的gpio引脚编号
    if rtos_bsp == "AIR101" then -- Air101开发板LED引脚编号
        return pin.PB08, pin.PB09, pin.PB10
    elseif rtos_bsp == "AIR103" then -- Air103开发板LED引脚编号
        --return pin.PB26, pin.PB25, pin.PB24
        return 42,41,40
    elseif rtos_bsp == "AIR105" then -- Air105开发板LED引脚编号
        --return pin.PC3,pin.PD14, pin.PD15
        return 35,62,63
    elseif rtos_bsp == "ESP32C3" then -- ESP32C3开发板的引脚
        return 12, 13, 255 -- 开发板上就2个灯
    elseif rtos_bsp == "EC618" then -- Air780E开发板引脚
        return 27, 255, 255 -- AIR780E开发板上就一个灯
    elseif rtos_bsp == "ESP32S3" then -- ESP32S3开发板引脚
        return 10, 11, 255 -- ESP32S3开发板LED引脚编号
    else
        log.info("main", "define led pin in main.lua")
        return 0, 0, 0
    end
end

LED引脚初始化

--LED引脚判断赋值结束

local P1,P2,P3=pinx()--赋值开发板LED引脚编号
local LEDA= gpio.setup(P1, 0, gpio.PULLUP)
local LEDB= gpio.setup(P2, 0, gpio.PULLUP)
local LEDC= gpio.setup(P3, 0, gpio.PULLUP)

流水灯代码:

--开始流水灯
    local count = 0
    while 1 do
    --流水灯程序
        sys.wait(500) --点亮时间
        -- 轮流点灯
        LEDA(count % 3 == 0 and 1 or 0)
        if P2 and P2 ~=255 then
            LEDB(count % 3 == 1 and 1 or 0)
        end
        if P3 and P3 ~= 255 then
            LEDC(count % 3 == 2 and 1 or 0)
        end
        log.info("GPIO", "Go Go Go", count, rtos.bsp())
        --log.info("LuatOS:", "https://wiki.luatos.com")
        count = count + 1
    end

gpio - GPIO操作函数

已适配 Air101/Air103 Air105 ESP32C3 Air780

备注

本页文档由这个文件自动生成。如有错误,请提交issue或帮忙修改后pr,谢谢!

小技巧

本库有专属demo点此链接查看gpio的demo例子

小技巧

本库还有视频教程,点此链接查看

常量

常量

类型

解释

gpio.LOW

number

低电平

gpio.HIGH

number

高电平

gpio.OUTPUT

number

输出模式

gpio.INPUT

number

输入模式

gpio.IRQ

number

中断模式

gpio.PULLUP

number

上拉

gpio.PULLDOWN

number

下拉

gpio.RISING

number

上升沿触发

gpio.FALLING

number

下降沿触发

gpio.BOTH

number

双向触发,部分设备支持

gpio.HIGH_IRQ

number

高电平触发,部分设备支持

gpio.LOW_IRQ

number

低电平触发,部分设备支持

gpio.setup(pin, mode, pull, irq)

设置管脚功能

参数

传入值类型

解释

int

pin gpio编号,必须是数值

any

mode 输入输出模式:
数字0/1代表输出模式
nil代表输入模式
function代表中断模式

int

pull 上拉下列模式, 可以是gpio.PULLUP 或 gpio.PULLDOWN, 需要根据实际硬件选用

int

irq 默认gpio.BOTH。中断触发模式
上升沿gpio.RISING
下降沿gpio.FALLING
上升和下降都要gpio.BOTH

返回值

返回值类型

解释

any

输出模式返回设置电平的闭包, 输入模式和中断模式返回获取电平的闭包

例子

-- 设置gpio17为输入

gpio.setup(17, nil)

-- 设置gpio17为输出

gpio.setup(17, 0)

-- 设置gpio27为中断

gpio.setup(27, function(val) print("IRQ_27",val) end, gpio.PULLUP)


gpio.set(pin, value)

设置管脚电平

参数

传入值类型

解释

int

pin GPIO编号,必须是数值

int

value 电平, 可以是 高电平gpio.HIGH, 低电平gpio.LOW, 或者直接写数值1或0

返回值

返回值类型

解释

nil

无返回值

例子

-- 设置gpio17为低电平

gpio.set(17, 0)


gpio.get(pin)

获取管脚电平

参数

传入值类型

解释

int

pin GPIO编号,必须是数值

返回值

返回值类型

解释

value

电平, 高电平gpio.HIGH, 低电平gpio.LOW, 对应数值1和0

例子

-- 获取gpio17的当前电平

gpio.get(17)


gpio.close(pin)

关闭管脚功能(高阻输入态),关掉中断

参数

传入值类型

解释

int

pin GPIO编号,必须是数值

返回值

返回值类型

解释

nil

无返回值,总是执行成功

例子

-- 关闭gpio17

gpio.close(17)


gpio.setDefaultPull(val)

设置GPIO脚的默认上拉/下拉设置, 默认是平台自定义(一般为开漏).

参数

传入值类型

解释

int

val 0平台自定义,1上拉, 2下拉

返回值

返回值类型

解释

boolean

传值正确返回true,否则返回false

例子

-- 设置gpio.setuppull默认值为上拉

gpio.setDefaultPull(1)


gpio.toggle(pin)

变换GPIO脚输出电平,仅输出模式可用

参数

传入值类型

解释

int

管脚的GPIO号

返回值

返回值类型

解释

nil

无返回值

例子

-- API 2022.05.17 添加

-- 假设GPIO16上有LED, 500ms切换一次开关

gpio.setup(16, 0)

sys.timerLoopStart(function()

    gpio.toggle(16)

end, 500)


gpio.pulse(pin,level,len,delay)

在同一个GPIO输出一组脉冲, 注意, len的单位是bit, 高位在前.

参数

传入值类型

解释

int

gpio号

int/string

数值或者字符串.

int

len 长度 单位是bit, 高位在前.

int

delay 延迟,当前无固定时间单位

返回值

返回值类型

解释

nil

无返回值

例子

-- 通过PB06脚输出输出8个电平变化.

gpio.pulse(pin.PB06,0xA9, 8, 0)


gpio.debounce(pin, ms, mode)

防抖设置, 根据硬件ticks进行防抖

参数

传入值类型

解释

int

gpio号, 0~127, 与硬件相关

int

防抖时长,单位毫秒, 最大 65555 ms, 设置为0则关闭

int

模式, 0冷却模式, 1延时模式. 默认是0

返回值

返回值类型

解释

nil

无返回值

例子

-- 消抖模式, 当前支持2, 2022.12.16开始支持mode=1

-- 0 触发中断后,马上上报一次, 然后冷却N个毫秒后,重新接受中断

-- 1 触发中断后,延迟N个毫秒,期间没有新中断且电平没有变化,上报一次

-- 开启防抖, 模式0-冷却, 中断后马上上报, 100ms内只上报一次

gpio.debounce(7, 100) -- 若芯片支持pin, 可用pin.PA7代替数字7

-- 开启防抖, 模式1-延时, 中断后等待100ms,期间若保持该电平了,时间到之后上报一次

-- 对应的,如果输入的是一个 50hz的方波,那么不会触发任何上报

gpio.debounce(7, 100, 1)

-- 关闭防抖,时间设置为0就关闭

gpio.debounce(7, 0)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/374035.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DFT基本入门介绍

1.什么是DFT?2.为什么要做DFT?3.“测试”与“验证”的区别4.DFT的核心技术1)扫描路径设计(Scan Design)2)内建自测试(Bist)3)JTAG4)ATPG5.DFT工程师的岗位职责随着芯片的制程越来小(5nm), 芯片的…

xxjob分布式任务调度

前言 在工作中使用到了定时任务,通过查找资料选择了xxjob,以下是xxjob的介绍以及基本的使用. xxjob介绍 XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。 将调度行为抽象形成“调度中心”公共平台,而平台自身…

vue3+rust个人博客建站日记3-编写主页

内容 绘制了主页的基本布局设置了封装了header栏组件并设置了全局黑夜模式. 选择一个组件库-Naive UI 如果没有设计能力,又想开发出风格统一的前端页面。就一定要选择一个漂亮的组件库。 本次项目选择使用Naive UI,NaivUI库曾被Vue框架作者尤雨溪推荐…

【云原生】k8s核心技术—集群安全机制 Ingress Helm 持久化存储-20230222

文章目录一、k8s集群安全机制1. 概述2. RBAC——基于角色的访问控制二、Ingress三、Helm1. 引入2. 使用功能Helm可以解决哪些问题3. 介绍4. 3个重要概念5. helm 版本变化6. helm安装及配置仓库7. 使用helm快速部署应用8. 自己创建chart9. 实现yaml高效复用四、持久化存储1.nfs—…

ArXiv简介以及论文提交

arXiv网站简介 arXiv是一个收集物理学、数学、计算机科学、生物学与数理经济学的论文预印本的网站。其中arXiv发音同“archive”,因为“X”代表希腊字母 ,国际音标为[kai]。它于1991年8月14日成立,现由美国康奈尔大学维护。 ——维基百科 对…

在Angular项目中引入NG-ZORRO

在Angular项目中引入NG-ZORRO1.前置2.安装NG-ZORRO并进行初始化配置3.引入样式4.引入组件1.前置 首先创建一个angular项目:angular创建一个新项目的步骤 这是我项目的结构: 2.安装NG-ZORRO并进行初始化配置 安装NG-ZORRO:cd 到当前项目位…

微信小程序、小游戏的流量主一般可以赚多少钱?

本篇文章主要科普小程序、小游戏流量主一般赚钱的实际情况,通过在下长期运营的经验汇总而成。 日期:2023年2月26日 作者:任聪聪 小程序、小程序满1000用户后即可开通流量主,但实际上很多人并没有传说中的那种日赚几千的流量收入的…

学习笔记之Vuex(五)

Vuex(五)Vuex一、什么是Vuex二、Vuex工作原理三、搭建Vuex环境四、求和案例分析4.1 求和案例——vue实现4.2 求和案例——vuex实现(五)Vuex 一、什么是Vuex 1.概念 在Vue中实现集中式状态(数据)管理的一…

第二节类型转换、运算符

类型转换 自动类型转换: 类型小的变量可以赋值给大的类型变量。 表达式的自动类型转换: byte short char在表达式中是当做 int计算的。 强制类型转换: 大类型的变量转化为小类型的变量。 注:浮点型转换为整数是直接丢掉小数部…

nacos config

https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config 必须在 bootstrap.properties 配置 nacos server 的地址 data id : 对应一个微服务 namespace : 对应环境 dev prod 默认 public group : 对应一个项目,,默认 DEFUALT_GROUP 当你…

神经网络 线性回归从0开始实现的代码分析 --跟李沐学AI

3.2. 线性回归的从零开始实现 — 动手学深度学习 2.0.0 documentation 分析了好几天才懂,个人水平有限 如果有错请指出 1.导包 %matplotlib inline import random import torch from d2l import torch as d2ldef synthetic_data(w, b, num_examples): #save""&quo…

spring integration使用:消息转换器

系列文章目录 …TODO spring integration开篇:说明 …TODO spring integration使用:消息路由 spring integration使用:消息转换器 spring integration使用:消息转换器系列文章目录前言消息转换器(或者叫翻译器&#x…

SQLserver 语句查询当前数据库版本型号

SQL执行语句select serverproperty(productversion) as 产品版本号,serverproperty(productlevel) as 产品层次,serverproperty(edition) as 版本SQL执行历史记录:select version as 版本号select serverproperty(productversion) as 产品版本号,serverproperty(pro…

【Redis】一文搞懂 Redis 中的缓存穿透、缓存击穿、缓存雪崩及其解决方案

一文搞懂 Redis 中的缓存穿透、缓存击穿、缓存雪崩及其解决方案1. 缓存穿透1.1 什么是缓存穿透1.2 缓存穿透的解决方案1.2.1 缓存空对象1.2.2 布隆过滤器布隆过滤器工作原理Redis 使用布隆过滤器2. 缓存击穿1.1 什么是缓存击穿1.2 缓存击穿的解决方案1.2.1 设置热点数据永不过期…

【无限思维画布】制作思维导图第三步,节点移动与编辑

正在为无限词典制作单词思维导图功能,实现无限单词导图,无限思维画布。目前制作到第三步,实现节点移动与编辑: 节点移动与编辑Details 第一步,搜索 github。 一个是比较完善的,基于普通dom,用…

Random(二)什么是伪共享?@sun.misc.Contended注解

目录1.背景简介2.伪共享问题3.问题解决4.JDK使用示例1.背景简介 我们知道,CPU 是不能直接访问内存的,数据都是从高速缓存中加载到寄存器的,高速缓存又有 L1,L2,L3 等层级。在这里,我们先简化这些复杂的层级…

对象创建的过程

对象创建的过程 在语言层面上,创建对象通常仅仅是一个new关键字而已(例外:复制、反序列化); 而在虚拟机中,对象的创建又是怎样一个过程呢?(文中讨论的对象限于普通Java对象&#xff…

Jetpack Compose 深入探索系列一:Composable 函数

Composable 函数的含义 如果我们只专注于简单的语法,任何标准的Kotlin函数都可以成为一个可组合函数,只需将其注解为Composable: 通过这样做,我们实际上是在告诉编译器,该函数打算将一些数据转换为一个Node节点,以便注…

Simulink建模:如何学习Simulink建模

本文介绍博主自己学习Simulink建模的方法。后续博客都会按照本文中的思路来记录博主学习的过程。 文章目录1 Simulink建模的分类1.1 连续模型建模1.2 物理模型建模1.3 控制算法建模2 控制算法建模的基本知识2.1 控制算法与电控软件架构2.2 控制算法与周期调度2.3 控制算法与其他…

分布式-分布式缓存笔记

分布式系统缓存 缓存分类 前端缓存 前端缓存包括页面和浏览器缓存,如果是 App,那么在 App 端也会有缓存。当你打开商品详情页,除了首次打开以外,后面重复刷新时,页面上加载的信息来自多种缓存。 页面缓存属于客户端…