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 输入输出模式: |
| int | pull 上拉下列模式, 可以是gpio.PULLUP 或 gpio.PULLDOWN, 需要根据实际硬件选用 |
| int | irq 默认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.setup的pull默认值为上拉
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有什么坑点? 1. JSX做表达式判断时候,需要强转为boolean类型 如果不使用 !!b 进行强转数据类型,会在页面里面输出 0。 render() {const b 0;return <div>{!!b && <div>这是一段文本</div>}</div…...
中级嵌入式系统设计师2016下半年下午应用设计试题
中级嵌入式系统设计师2016下半年下午试题 试题一 阅读以下说明,回答问题1至问题3。 【说明】 某综合化智能空气净化器设计以微处理器为核心,包含各种传感器和控制器,具有检测环境空气参数(包含温湿度、可燃气体、细颗粒物等),空气净化、加湿、除湿、加热和杀菌等功能…...
【雅思备考】九分学长写作课笔记
原视频:https://www.bilibili.com/video/BV1FG4y1J7br?p13&vd_source552ac2291179cf9d44088ea168db5531 一、综述 共计1小时 小作文: 描述 图表图(数据图)、流程图(示意图)、地图(示意…...
【源码解析】SpringBoot自动装配的实现原理
什么是SpringBoot的自动装配 SpringBoot在启动的时候会扫描外部jar包中的META-INF/spring.factories文件,将文件中配置的类信息按照条件装配到Spring容器中。 实现原理 核心注解SpringBootApplication Target({ElementType.TYPE}) Retention(RetentionPolicy.R…...
详解ROS时间戳
ROS(Robot Operating System)是一个用于机器人开发的开源软件框架,其中涉及到了一些与时间相关的概念和工具,如时间戳、计时器等。本文将主要介绍ROS中时间戳的概念和应用,并提供一个Python代码案例演示如何处理ROS时间…...
Android Window、WindowManager
1.窗口Window 在Android中显示一个界面,首先想到的是Activity、Dialog或Toast。但是在有些情况下,比如悬浮球,用Activity会显然多余,这个时候可以直接使用窗口来实现。 Android中所有的视图都是通过Window来呈现的,不管是Activity、Dialog还是Toast,它们的视图实际上都…...
【一天一门编程语言】怎样设计一门编程语言?
怎样设计一门编程语言? 确定目标 确定语言的用途: 是一门通用编程语言,还是一门专门面向某个特定目标的语言?是一门面向对象的语言,还是一门过程化的语言?将语言的最终用户定义为谁? 确定语言…...
微服务保护 -- 初识 Sentinel(雪崩问题,快速入门Sentinel)
大家好,今天我们要来学习阿里巴巴开源的流量控制和熔断降级框架 – Sentinel 。 1、雪崩问题及解决方案 首选我们来了解一下雪崩问题及其解决方案,我们学习这个微服务保护,其实就是为了去应对类似于雪崩问题这样的服务故障。 1.1 什么是雪…...
软件测试面试问答
笔试 笔试的话我们需要揣测具体会考什么内容,我们可以通过招聘信息去了解该公司需要什么样的技能,以此来准备笔试。一般必考的内容会有编程,测试用例设计,工作流程,逻辑思维等内容,除此之外每个公司可能还会…...
【架构】架构师的核心能力-抽象能力
文章目录一、通过归纳法找共性二、通过演绎法找关系三、通过归纳法找特性四、最后架构的核心是管理复杂度,架构师的核心能力是抽象能力,什么是抽象能力?抽象能力就是一种化繁为简的能力。何为化繁为简?就是把一种复杂的事情变得简…...
前端一面常见react面试题(持续更新中)
React 组件中怎么做事件代理?它的原理是什么? React基于Virtual DOM实现了一个SyntheticEvent层(合成事件层),定义的事件处理器会接收到一个合成事件对象的实例,它符合W3C标准,且与原生的浏览器…...
亥姆霍兹线圈测量系统
亥姆霍兹线圈[Helmholtz线圈]是指由具有相同线圈匝数、相同线圈绕制方式且线圈半径等于线圈间距的一对或者多对线圈构成的线圈组合。 根据线圈的形状,亥姆霍兹线圈可分为圆形亥姆霍兹线圈和方形亥姆霍兹线圈;根据磁场方向,亥姆霍兹线圈可分为…...
JavaScript 类型转换
Number() 转换为数字, String() 转换为字符串, Boolean() 转化为布尔值。JavaScript 数据类型在 JavaScript 中有 5 种不同的数据类型:stringnumberbooleanobjectfunction3 种对象类型:ObjectDateArray2 个不包含任何值的数据类型…...
Spring Batch 综合案例实战-项目准备
目录 案例需求 分析 项目准备 步骤1:新开spring-batch-example 步骤2:导入依赖 步骤3:配置文件 步骤4:建立employee表与employe_temp表 步骤5:建立基本代码体系-domain-mapper-service-controller-mapper.xml …...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...
