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 …...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
GraphQL 实战篇:Apollo Client 配置与缓存
GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...
Redis上篇--知识点总结
Redis上篇–解析 本文大部分知识整理自网上,在正文结束后都会附上参考地址。如果想要深入或者详细学习可以通过文末链接跳转学习。 1. 基本介绍 Redis 是一个开源的、高性能的 内存键值数据库,Redis 的键值对中的 key 就是字符串对象,而 val…...
