目录
本系列博客,理论上适用于合宙的Air202、Air268、Air720x、Air720S以及最近发布的Air720U(我还没拿到样机,应该也能支持)。
先不管支不支持,如果你用的是合宙的模块,那都不妨一试,也许会有意外收获
我使用的是Air720SL模块,如果在其他模块上不能用,那就是底层core固件暂时还没有支持,这里的代码是没有问题的。例程仅供参考!
一、前言
本系列教程选择使用Luat在模块上进行二次开发,那么就要把Air720SL模块当作一个普通的单片机来学。
既然我们谈到了单片机那么驱动外设是必不可少的,单片机的外设有很多中,常见的有GPIO,UART,IIC,ADC,DAC,SPI等等。
就拿我们的Air720SL来讲,其拥有的外设也不少,可玩性还是很高的。
如果仅仅把它当作一个通讯模块来用,显得有点浪费。
既然厂商开发了这么多外设功能,那我们要想办法把他用起来,而不是放在那里吃灰,要想方设法榨干它的身体
俗话说得好,不学爬怎么学跑呢,对吧。
学习也是一样,我们要从简单的学起不是上来就干最难的。
在上面这么多种外设中,GPIO无疑是最简单的,最容易的,也是最基本的,而GPIO又有输入和输出的功能。
想要点亮一个灯,那就需要用到GPIO的输出功能。那我们现在闲话少说,开始学习新的内容
二、磨刀不误砍柴工
1、怎么才能点亮一个灯
我们这里就长话短说,想要灯亮首先得满足led灯的电压要求,其次还要形成足够的电流,led才能点亮。
在我们的开发板这里我们就不需要考虑这些,官方的就是计算好的,我们只需要让它形成电流即可,形成电流的条件是在led两端要有压差
现在我们打开开发板原理图,找到指示灯模块,如下图所示
从原理图得知,LED实际上是由三极管控制的
如果想要LED1和LED2两端形成压差,那就要使三极管导通
在本图中三极管导通的条件是Vb>Ve,Ve=0,那么就需要Vb>0
而Vb的电压是由GPIO输出经过电阻分压,而形成的,也就是说,要想LED点亮,那么GPIO需要输出高电平,我们分别控制GPIO64和GPIO65就能控制LED
2、尝试点亮一个灯
既然知道了应该怎样才能点亮一个灯,那我们现在就来试一下,验证刚才的分析对不对
首先我们需要包含一个库pin
库,require "pins"
才能使用GPIO驱动相关的库函数
然后在main程序里写入如下代码
1 | local function user_main() |
下载测试程序,等待片刻LED1(第二个灯)和LED2(第三个灯)成功点亮,
第一个灯是电源灯,不控制的话开机就会亮
接下来我们测量一下GPIO64的引脚电平,果然是高电平点亮LED,说明我们刚才的分析没有问题
三、下载完整的代码到Air720Sl开发板
这里我们直接贴出全部代码
1 | --必须在这个位置定义PROJECT和VERSION变量 |
下载程序后运行结果如下,LED1和LED2以1HZ频率闪烁,LED2闪烁5次后停止
四、总结
1、官方的pins库函数
- pins.setup(pin, val, pull):配置GPIO模式
- pins.close(pin):关闭GPIO模式
- GPIO的操作直接使用setup函数的返回值即可
2、学会驱动GPIO输出有什么作用
- 直接驱动LED灯
- 直接驱动继电器,间接控制插座或者其他强电开关,实现自动控制
- 在没有硬件IIC的芯片上,可以使用GPIO输入和输出功能,模拟软件IIC
- 这里只列出了三种比较常用的用法,其他用法还有很多,需要自己摸索
不会下载的点击这里,进去查看我的第二篇博文
2、Air720SL模块Luat开发:第一个Luat的Hello World
里面讲了怎么下载
这里只是我的学习笔记,拿出来给大家分享,欢迎大家批评指正,本篇教程到此结束