当前位置: 首页 > news >正文

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

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

AIR103:

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

AIR105:

rtos_bsp == "AIR105" then -- Air105开发板LED引脚编号--return pin.PC3,pin.PD14, pin.PD15return 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.PB10elseif rtos_bsp == "AIR103" then -- Air103开发板LED引脚编号--return pin.PB26, pin.PB25, pin.PB24return 42,41,40elseif rtos_bsp == "AIR105" then -- Air105开发板LED引脚编号--return pin.PC3,pin.PD14, pin.PD15return 35,62,63elseif 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引脚编号elselog.info("main", "define led pin in main.lua")return 0, 0, 0end
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 = 0while 1 do--流水灯程序sys.wait(500) --点亮时间-- 轮流点灯LEDA(count % 3 == 0 and 1 or 0)if P2 and P2 ~=255 thenLEDB(count % 3 == 1 and 1 or 0)endif P3 and P3 ~= 255 thenLEDC(count % 3 == 2 and 1 or 0)endlog.info("GPIO", "Go Go Go", count, rtos.bsp())--log.info("LuatOS:", "https://wiki.luatos.com")count = count + 1end

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)

相关文章:

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

AIR系列各型号开发板板载LED对应管脚及GPIO控制代码 AIR103: rtos_bsp "AIR103" then -- Air103开发板LED引脚编号--return pin.PB26, pin.PB25, pin.PB24return 42,41,40 AIR105: rtos_bsp "AIR105" then -- Air105开发板LED引…...

MySQL数据库中的函数怎样使用?

函数 是指一段可以直接被另一段程序调用的程序或代码。 也就意味着,这一段程序或代码在MySQL中已经给我们提供了,我们要做的就是在合适的业务场景调用对应的函数完成对应的业务需求即可。 那么,函数到底在哪儿使用呢?我们先来看两个场景&…...

命名空间的使用大全

概述 在C中,我们会使用变量、常量、函数、类、对象、结构体等各种元素。随着工程越来越庞大,代表这些元素的标识符冲突的概率也越来越大。为了解决标识符命名冲突的问题,C标准在1995年引入了关键字namespace,也叫做命名空间。使用…...

Redisson分布式锁和同步器详解-官方原版

一、锁定基于Redis的Java分布式可重入锁对象,并实现了锁接口。如果获取锁的Redisson实例崩溃,则此类锁可能会在获取状态下永久挂起。为了避免这种Redisson维护锁看门狗,当锁持有者Redisson实例处于活动状态时,它会延长锁的到期时间…...

【C语言进阶】指针与数组、转移表详解

前言 大家好我是程序猿爱打拳,我们在学习完指针的基本概念后知道了指针就是地址,我们可以通过这个地址并对它进行解引用从而改变一些数据。但只学习指针的基础是完全不够的,因此学习完指针的基础后我们可以学习关于指针的进阶,其中…...

SDN是什么,和SD-WAN有什么关系

SDN全称为“软件定义网络”(Software-Defined Networking),是一种新型的网络架构,通过将网络的控制面和数据面分离,将网络控制集中到控制器中进行统一管理和配置,以提高网络的灵活性和可管理性。传统网络的…...

百度前端高频react面试题(持续更新中)

说说你用react有什么坑点&#xff1f; 1. JSX做表达式判断时候&#xff0c;需要强转为boolean类型 如果不使用 !!b 进行强转数据类型&#xff0c;会在页面里面输出 0。 render() {const b 0;return <div>{!!b && <div>这是一段文本</div>}</div…...

中级嵌入式系统设计师2016下半年下午应用设计试题

中级嵌入式系统设计师2016下半年下午试题 试题一 阅读以下说明,回答问题1至问题3。 【说明】 某综合化智能空气净化器设计以微处理器为核心,包含各种传感器和控制器,具有检测环境空气参数(包含温湿度、可燃气体、细颗粒物等),空气净化、加湿、除湿、加热和杀菌等功能…...

【雅思备考】九分学长写作课笔记

原视频&#xff1a;https://www.bilibili.com/video/BV1FG4y1J7br?p13&vd_source552ac2291179cf9d44088ea168db5531 一、综述 共计1小时 小作文&#xff1a; 描述 图表图&#xff08;数据图&#xff09;、流程图&#xff08;示意图&#xff09;、地图&#xff08;示意…...

【源码解析】SpringBoot自动装配的实现原理

什么是SpringBoot的自动装配 SpringBoot在启动的时候会扫描外部jar包中的META-INF/spring.factories文件&#xff0c;将文件中配置的类信息按照条件装配到Spring容器中。 实现原理 核心注解SpringBootApplication Target({ElementType.TYPE}) Retention(RetentionPolicy.R…...

详解ROS时间戳

ROS&#xff08;Robot Operating System&#xff09;是一个用于机器人开发的开源软件框架&#xff0c;其中涉及到了一些与时间相关的概念和工具&#xff0c;如时间戳、计时器等。本文将主要介绍ROS中时间戳的概念和应用&#xff0c;并提供一个Python代码案例演示如何处理ROS时间…...

Android Window、WindowManager

1.窗口Window 在Android中显示一个界面,首先想到的是Activity、Dialog或Toast。但是在有些情况下,比如悬浮球,用Activity会显然多余,这个时候可以直接使用窗口来实现。 Android中所有的视图都是通过Window来呈现的,不管是Activity、Dialog还是Toast,它们的视图实际上都…...

【一天一门编程语言】怎样设计一门编程语言?

怎样设计一门编程语言&#xff1f; 确定目标 确定语言的用途&#xff1a; 是一门通用编程语言&#xff0c;还是一门专门面向某个特定目标的语言&#xff1f;是一门面向对象的语言&#xff0c;还是一门过程化的语言&#xff1f;将语言的最终用户定义为谁&#xff1f; 确定语言…...

微服务保护 -- 初识 Sentinel(雪崩问题,快速入门Sentinel)

大家好&#xff0c;今天我们要来学习阿里巴巴开源的流量控制和熔断降级框架 – Sentinel 。 1、雪崩问题及解决方案 首选我们来了解一下雪崩问题及其解决方案&#xff0c;我们学习这个微服务保护&#xff0c;其实就是为了去应对类似于雪崩问题这样的服务故障。 1.1 什么是雪…...

软件测试面试问答

笔试 笔试的话我们需要揣测具体会考什么内容&#xff0c;我们可以通过招聘信息去了解该公司需要什么样的技能&#xff0c;以此来准备笔试。一般必考的内容会有编程&#xff0c;测试用例设计&#xff0c;工作流程&#xff0c;逻辑思维等内容&#xff0c;除此之外每个公司可能还会…...

【架构】架构师的核心能力-抽象能力

文章目录一、通过归纳法找共性二、通过演绎法找关系三、通过归纳法找特性四、最后架构的核心是管理复杂度&#xff0c;架构师的核心能力是抽象能力&#xff0c;什么是抽象能力&#xff1f;抽象能力就是一种化繁为简的能力。何为化繁为简&#xff1f;就是把一种复杂的事情变得简…...

前端一面常见react面试题(持续更新中)

React 组件中怎么做事件代理&#xff1f;它的原理是什么&#xff1f; React基于Virtual DOM实现了一个SyntheticEvent层&#xff08;合成事件层&#xff09;&#xff0c;定义的事件处理器会接收到一个合成事件对象的实例&#xff0c;它符合W3C标准&#xff0c;且与原生的浏览器…...

亥姆霍兹线圈测量系统

亥姆霍兹线圈[Helmholtz线圈]是指由具有相同线圈匝数、相同线圈绕制方式且线圈半径等于线圈间距的一对或者多对线圈构成的线圈组合。 根据线圈的形状&#xff0c;亥姆霍兹线圈可分为圆形亥姆霍兹线圈和方形亥姆霍兹线圈&#xff1b;根据磁场方向&#xff0c;亥姆霍兹线圈可分为…...

JavaScript 类型转换

Number() 转换为数字&#xff0c; String() 转换为字符串&#xff0c; Boolean() 转化为布尔值。JavaScript 数据类型在 JavaScript 中有 5 种不同的数据类型&#xff1a;stringnumberbooleanobjectfunction3 种对象类型&#xff1a;ObjectDateArray2 个不包含任何值的数据类型…...

Spring Batch 综合案例实战-项目准备

目录 案例需求 分析 项目准备 步骤1&#xff1a;新开spring-batch-example 步骤2&#xff1a;导入依赖 步骤3&#xff1a;配置文件 步骤4&#xff1a;建立employee表与employe_temp表 步骤5&#xff1a;建立基本代码体系-domain-mapper-service-controller-mapper.xml …...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...