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 …...
Mermaid CLI深度技术解析:如何构建企业级图表自动化流水线
Mermaid CLI深度技术解析:如何构建企业级图表自动化流水线 【免费下载链接】mermaid-cli Command line tool for the Mermaid library 项目地址: https://gitcode.com/gh_mirrors/me/mermaid-cli Mermaid CLI作为文本图表转换的命令行工具,正在成…...
Audacity音频编辑终极指南:从零开始掌握免费专业工具
Audacity音频编辑终极指南:从零开始掌握免费专业工具 【免费下载链接】audacity Audio Editor 项目地址: https://gitcode.com/GitHub_Trending/au/audacity Audacity是一款功能强大的开源音频编辑软件,支持多轨录音、音频剪辑和效果处理&#x…...
手把手教你用Matlab/Simulink搭建VSG虚拟阻抗模型,搞定新能源并网振荡难题
新能源并网VSG虚拟阻抗控制实战:从Simulink建模到振荡抑制 电力电子工程师们正面临一个棘手难题——新能源并网系统中的宽频振荡。当构网型变流器(GFM)在强电网环境下运行时,次同步和超同步频段的负阻尼特性可能导致系统失稳。虚拟…...
Xilinx UltraScale的CLB黑科技:1个LUT当2个用的5种实战技巧(Vivado2023验证)
Xilinx UltraScale架构的CLB深度优化实战:5种高阶LUT拆分技巧 在FPGA设计领域,资源利用率与性能优化始终是工程师面临的核心挑战。Xilinx UltraScale架构通过创新的SliceM/SliceL结构设计,为硬件优化提供了前所未有的灵活性。本文将聚焦CLB中…...
VINS_Fusion轨迹评估实战:如何用evo工具搞定MH_01_easy数据集测试(附完整代码修改指南)
VINS_Fusion轨迹精度评估全流程:从数据准备到evo工具深度解析 1. 环境配置与工具准备 在开始评估VINS_Fusion的轨迹精度之前,我们需要确保开发环境已经正确配置。以下是必要的准备工作: 基础环境要求: Ubuntu 18.04/20.04 LTS&…...
动态生成展示:LiuJuan20260223Zimage模型根据实时天气创作“风晴雨雪”主题画
动态生成展示:LiuJuan20260223Zimage模型根据实时天气创作“风晴雨雪”主题画 你有没有想过,家里的数字画框或者手机壁纸,能像有生命一样,随着窗外的天气实时变化?今天,我就带你体验一个特别有意思的玩法&…...
Go网络编程nethttp包解析
Go语言凭借其简洁高效的特性,已成为现代网络编程的热门选择。其中,标准库中的net/http包为开发者提供了强大的HTTP服务端和客户端功能,极大简化了Web开发流程。本文将深入解析net/http包的核心特性,帮助开发者掌握构建高性能Web服…...
跨平台实战:Windows与macOS下OpenClaw对接nanobot的差异详解
跨平台实战:Windows与macOS下OpenClaw对接nanobot的差异详解 1. 为什么需要关注跨平台差异 上周我在团队内部推广OpenClaw时,遇到了一个典型问题:同样的nanobot对接流程,在Windows和macOS上执行时出现了完全不同的行为。这让我意…...
阿里蚂蚁Kimi连夜换引擎!混合注意力炸场,456B模型200万token秒吞,API直接打2折
混合注意力,一夜之间从“可选项”变成“必答题”。 阿里、蚂蚁、Kimi、小米,万亿参数集体换引擎,只为回答同一道考题:算力贵到肉疼,模型怎么活下去?三年前,GPT-3用1750亿参数教会世界“大力出奇…...
Matlab图表标注全攻略:希腊字母、线型与标记符号的灵活运用
Matlab图表标注全攻略:希腊字母、线型与标记符号的灵活运用 科研图表是数据可视化的核心载体,而Matlab作为工程与科学计算领域的标杆工具,其绘图系统的精细控制能力往往被低估。许多研究者止步于默认图表样式,却不知只需掌握几个关…...
