当前位置: 首页 > 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 …...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...