Toggle navigation
首页
(current)
问答
文章
话题
商城
登录
注册
4、合宙Air模块Luat开发:用GPIO输出功能实现一个简单的LED灯闪烁
LUAT
物联网
Air720SL
二次开发
教程
# 目录 [点击这里查看所有博文](https://blog.csdn.net/weixin_44570083/article/details/104285283) # 一、前言 > 本系列教程选择使用Luat在模块上进行二次开发,那么就要把Air720SL...
# 目录 [点击这里查看所有博文](https://blog.csdn.net/weixin_44570083/article/details/104285283) > 本系列博客,理论上适用于合宙的Air202、Air268、Air720x、Air720S以及最近发布的Air720U(我还没拿到样机,应该也能支持)。 > 先不管支不支持,如果你用的是合宙的模块,那都不妨一试,也许会有意外收获 我使用的是Air720SL模块,如果在其他模块上不能用,那就是底层core固件暂时还没有支持,这里的代码是没有问题的。例程仅供参考! # 一、前言 > 本系列教程选择使用Luat在模块上进行二次开发,那么就要把Air720SL模块当作一个普通的单片机来学。 > 既然我们谈到了单片机那么驱动外设是必不可少的,单片机的外设有很多中,常见的有GPIO,UART,IIC,ADC,DAC,SPI等等。 > 就拿我们的Air720SL来讲,其拥有的外设也不少,可玩性还是很高的。 > ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200214121656756.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70) > 如果仅仅把它当作一个通讯模块来用,显得有点浪费。 > 既然厂商开发了这么多外设功能,那我们要想办法把他用起来,而不是放在那里吃灰,要想方设法榨干它的身体 > 俗话说得好,不学爬怎么学跑呢,对吧。 > 学习也是一样,我们要从简单的学起不是上来就干最难的。 > 在上面这么多种外设中,GPIO无疑是最简单的,最容易的,也是最基本的,而GPIO又有输入和输出的功能。 > 想要点亮一个灯,那就需要用到GPIO的输出功能。那我们现在闲话少说,开始学习新的内容 # 二、磨刀不误砍柴工 ## 1、怎么才能点亮一个灯 >我们这里就长话短说,想要灯亮首先得满足led灯的电压要求,其次还要形成足够的电流,led才能点亮。 >在我们的开发板这里我们就不需要考虑这些,官方的就是计算好的,我们只需要让它形成电流即可,形成电流的条件是在led两端要有压差 > 现在我们打开开发板原理图,找到指示灯模块,如下图所示 > ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200214123820350.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70) > 从原理图得知,LED实际上是由三极管控制的 > 如果想要LED1和LED2两端形成压差,那就要使三极管导通 > 在本图中三极管导通的条件是Vb>Ve,Ve=0,那么就需要Vb>0 > ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200214143011480.png) > 而Vb的电压是由GPIO输出经过电阻分压,而形成的,也就是说,要想LED点亮,那么GPIO需要输出高电平,我们分别控制GPIO64和GPIO65就能控制LED ## 2、尝试点亮一个灯 > 既然知道了应该怎样才能点亮一个灯,那我们现在就来试一下,验证刚才的分析对不对 > 首先我们需要包含一个库`pin`库,`require "pins"`才能使用GPIO驱动相关的库函数 > 然后在main程序里写入如下代码 ```c local function user_main() --初始化GPIO 比如GPIO_64 local LED1 = pins.setup(64, 0) local LED2 = pins.setup(65, 0) LED1(1)--让指示灯亮 LED2(1)--让指示灯亮 end ``` >下载测试程序,等待片刻LED1(第二个灯)和LED2(第三个灯)成功点亮,`第一个灯是电源灯,不控制的话开机就会亮` >![在这里插入图片描述](https://img-blog.csdnimg.cn/20200214131242363.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70) >接下来我们测量一下GPIO64的引脚电平,果然是高电平点亮LED,说明我们刚才的分析没有问题 >![在这里插入图片描述](https://img-blog.csdnimg.cn/20200214132321971.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU3MDA4Mw==,size_16,color_FFFFFF,t_70) # 三、下载完整的代码到Air720Sl开发板 > 这里我们直接贴出全部代码 ```c --必须在这个位置定义PROJECT和VERSION变量 --PROJECT:ascii string类型,可以随便定义,只要不使用,就行 --VERSION:ascii string类型,如果使用Luat物联云平台固件升级的功能,必须按照"X.X.X"定义,X表示1位数字;否则可随便定义 PROJECT = "LED" VERSION = "0.0.1" require "sys" --加载日志功能模块,并且设置日志输出等级 --如果关闭调用log模块接口输出的日志,等级设置为log.LOG_SILENT即可 require "log" LOG_LEVEL = log.LOGLEVEL_TRACE require "pins" local function LED0() --初始化GPIO 比如GPIO_64 local ledpin = pins.setup(64, 0) while true do ledpin(1)--让指示灯亮500ms sys.wait(500) ledpin(0); --让指示灯灭500ms sys.wait(500) end end local function LED1() --初始化GPIO 比如GPIO_65 local ledpin = pins.setup(65, 0) for i=1,5 do ledpin(1)--让指示灯亮500ms sys.wait(500) ledpin(0); --让指示灯灭500ms sys.wait(500) end end local function user_main() sys.wait(10000) sys.taskInit(LED0) sys.taskInit(LED1) end --启动系统框架 sys.taskInit(user_main) sys.init(0, 0) sys.run() ``` > 下载程序后运行结果如下,LED1和LED2以1HZ频率闪烁,LED2闪烁5次后停止 > ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200214140728460.gif) # 四、总结 ## 1、官方的pins库函数 * pins.setup(pin, val, pull):配置GPIO模式 * pins.close(pin):关闭GPIO模式 * GPIO的操作直接使用setup函数的返回值即可 ## 2、学会驱动GPIO输出有什么作用 * 直接驱动LED灯 * 直接驱动继电器,间接控制插座或者其他强电开关,实现自动控制 * 在没有硬件IIC的芯片上,可以使用GPIO输入和输出功能,模拟软件IIC * 这里只列出了三种比较常用的用法,其他用法还有很多,需要自己摸索 > 不会下载的[点击这里](https://blog.csdn.net/weixin_44570083/article/details/104285283),进去查看我的第二篇博文`2、Air720SL模块Luat开发:第一个Luat的Hello World`里面讲了怎么下载 > 这里只是我的学习笔记,拿出来给大家分享,欢迎大家批评指正,本篇教程到此结束
发表于 2020-02-14 14:43
阅读 ( 2544 )
5 推荐
收藏
你可能感兴趣的文章
13、RDA8910CSDK二次开发:将你的代码藏起来----编译静态库
5386 浏览
3、RDA8910CSDK二次开发:GPIO输入详解
2043 浏览
11、合宙Air模块Luat开发:通过http协议获取天气信息
2434 浏览
10、合宙Air模块Luat开发:JSON字符串的生成与解析
2299 浏览
9、合宙Air模块Luat开发:认识NVS数据管理模块
1997 浏览
8、合宙Air模块Luat开发:基于官方库的二次封装,使串口更加易用
2556 浏览
相关问题
Air720SL的I2C及I2C2对应设备ID是?如何使用api读写16位地址寄存器
0 回答
关于二次开发功能上的咨询
1 回答
Air208编程
1 回答
Air202设置闹钟“AT+CALA=?”
2 回答
Air202 MQTT如何发送USERNAME PASSWORD ID ?
1 回答
Air200关于SW_DEFAULT_1.0.2_Luat_V0013_Air200_SSL.lod的问题
1 回答
0 条评论
请先
登录
后评论
陈夏
26 篇文章
作家榜
»
技术销售Delectate
43 文章
陈夏
26 文章
国梁
24 文章
miuser
21 文章
晨旭
20 文章
朱天华
19 文章
金艺
19 文章
杨奉武
18 文章
×
发送私信
发给:
内容:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!