第一章 Lua - AIR202 控制LED小灯

我使用的是air202 s6模块,其他模块根据自己的需求做出修改,首先至少熟悉一款单片机接触过编程,最好是c,lua的同学。大家都知道拿到一个单片机首先就是点灯大战,各种点灯操作,学会了控制LED灯,就相当于学会了最基础的GPIO操作。

进入------------------------------------------------------------------>

准备一各代码编辑器,编辑器有很多,推荐使用notepad++、Sublime、text 、VSCode(我是用的就是这款),

VS Code下载链接https://code.visualstudio.com/ 安装教程很简单请移步下文。

1、双击打开安装,下图页面勾选这几个选项,点击下一步到结束    --------- 其他页面根据需求进行设置。

2、在合适的位置新建一个文件夹,命名可以随意,推荐命名 LUAT_LED,使用VS Code打开文件夹,如下图所示:

打开后,在编辑器左侧文件夹中,右击,新建文件,输入 main.lua ,回车保存

然后在新建的main.lua内添加下面代码,完成最重要的main.lua文件编写。注意注意 在代码最后一行,另外加入几行换行。

--必须在这个位置定义PROJECT和VERSION变量
--PROJECT:ascii string类型,可以随便定义,只要不使用,就行
--VERSION:ascii string类型,如果使用Luat物联云平台固件升级的功能,必须按照"X.X.X"定义,X表示1位数字;否则可随便定义
PROJECT = "LED-TEST"
VERSION = "0.0.1"
--根据固件判断模块类型
moduleType = string.find(rtos.get_version(),"8955") and 2 or 4
--加载日志功能模块,并且设置日志输出等级
--如果关闭调用log模块接口输出的日志,等级设置为log.LOG_SILENT即可
require "log"
LOG_LEVEL = log.LOGLEVEL_TRACE
require "sys"
require "net"
--每1分钟查询一次GSM信号强度
--每1分钟查询一次基站信息
net.startQueryAll(60000, 60000)
--加载硬件看门狗功能模块
--根据自己的硬件配置决定:1、是否加载此功能模块;2、配置Luat模块复位单片机引脚和互相喂狗引脚
--合宙官方出售的Air201开发板上有硬件看门狗,所以使用官方Air201开发板时,必须加载此功能模块
--如果用的是720 4g模块,请注释掉这两行
require "wdt"
wdt.setup(pio.P0_30, pio.P0_31)
--加载网络指示灯功能模块
--根据自己的项目需求和硬件配置决定:1、是否加载此功能模块;2、配置指示灯引脚
--合宙官方出售的Air800和Air801开发板上的指示灯引脚为pio.P0_28,其他开发板上的指示灯引脚为pio.P1_1
require "netLed"
netLed.setup(true,moduleType == 2 and pio.P1_1 or pio.P2_0,moduleType == 2 and nil or pio.P2_1)--自动判断2/4g默认网络灯引脚配置
--网络指示灯功能模块中,默认配置了各种工作状态下指示灯的闪烁规律,参考netLed.lua中ledBlinkTime配置的默认值
--如果默认值满足不了需求,此处调用netLed.updateBlinkTime去配置闪烁时长
--加载错误日志管理功能模块【强烈建议打开此功能】
--如下2行代码,只是简单的演示如何使用errDump功能,详情参考errDump的api
require "errDump"
errDump.request("udp://ota.airm2m.com:9072")
--加载远程升级功能模块【强烈建议打开此功能】
--如下3行代码,只是简单的演示如何使用update功能,详情参考update的api以及demo/update
-- PRODUCT_KEY = "xxxxxx"
-- require "update"
-- update.request()

require "ledtest"    --新加上的代码

--启动系统框架
sys.init(0, 0)
sys.run()

 


然后进入下一步模块化编程,lua编程中我们最好把相似功能的代码放到同一个文件中,写完后只需要在main.lua中添加

require

 语句即可,所以我们将在main.lua结尾添加新的代码(其他的不变 只需要加入一行代码既可),如下:

--加载远程升级功能模块【强烈建议打开此功能】
--如下3行代码,只是简单的演示如何使用update功能,详情参考update的api以及demo/update
-- PRODUCT_KEY = "xxxxxx"
-- require "update"
-- update.request()
require "ledtest"    --新加上的代码
--启动系统框架
sys.init(0, 0)
sys.run()

添加完后 ,按照刚才新建main.lua的方式,再新建一个新的文件  ledtest.lua,我们在ledtest.lua的第一行可以先加上如下一句话:

module(..., package.seeall)  --使得文件中的函数在何处都可调用

然后就可以看一下管脚的复用功能了,不过现在我们将作为普通GPIO口使用:

这时候我们就明白这个应该如何点亮了,我们将在 ledtest.lua中 添加如下代码:

module(..., package.seeall)    --注意此处 刚才添加过了,这里不要在重复添加



require"pins"  --用到了pin库,该库为luatask专用库,需要进行引用
-- GPIO 0到GPIO 31表示为pio.P0_0到pio.P0_31 。 
-- GPIO 32到GPIO XX表示为pio.P1_0到pio.P1_(XX-32),例如GPIO33 表示为pio.P1_1
if moduleType == 2 then
    pmd.ldoset(5,pmd.LDO_VMMC)  --使用某些GPIO时,必须在脚本中写代码打开GPIO所属的电压域,配置电压输出输入等级,这些GPIO才能正常工作
end
--注意!!!4G模块无需设置电压域!
--设置led的GPIO口
local led1 = pins.setup(pio.P0_8,0)--如果你用的是4G模块,请更改这个gpio编号
local led2 = pins.setup(pio.P0_11,0)--如果你用的是4G模块,请更改这个gpio编号
local led3 = pins.setup(pio.P0_12,0)--如果你用的是4G模块,请更改这个gpio编号
local led4 = pins.setup(pio.P0_3,0)--如果你用的是4G模块,请更改这个gpio编号
local led5 = pins.setup(pio.P0_2,0)--如果你用的是4G模块,请更改这个gpio编号
--将gpio口都置为高电平
led1(1)
led2(1)
led3(1)
led4(1)
led5(1)

然后保存好,我们将文件全部烧到模块中没查看效果,此时就能看到五个灯都会被点亮,如果将led(1)改成led(0)即可熄灭第一个灯,其他类似。

让LED灯闪烁起来

开启一个定时器函数为sys.timerStart(fnc, ms, ...),那么我们可以将代码改成如下样式:

module(..., package.seeall)
require"pins"  --用到了pin库,该库为luatask专用库,需要进行引用
-- GPIO 0到GPIO 31表示为pio.P0_0到pio.P0_31 。 
-- GPIO 32到GPIO XX表示为pio.P1_0到pio.P1_(XX-32),例如GPIO33 表示为pio.P1_1
if moduleType == 2 then
    pmd.ldoset(5,pmd.LDO_VMMC)  --使用某些GPIO时,必须在脚本中写代码打开GPIO所属的电压域,配置电压输出输入等级,这些GPIO才能正常工作
end
--注意!!!4G模块无需设置电压域!
--设置led的GPIO口
local led1 = pins.setup(pio.P0_8,0)--如果你用的是4G模块,请更改这个gpio编号
local led2 = pins.setup(pio.P0_11,0)--如果你用的是4G模块,请更改这个gpio编号
local led3 = pins.setup(pio.P0_12,0)--如果你用的是4G模块,请更改这个gpio编号
local led4 = pins.setup(pio.P0_3,0)--如果你用的是4G模块,请更改这个gpio编号
local led5 = pins.setup(pio.P0_2,0)--如果你用的是4G模块,请更改这个gpio编号
local ledon = false --led是否开启
function changeLED()
    if ledon then
        led1(1)
        led2(1)
        led3(1)
        led4(1)
        led5(1)
    else
        led1(0)
        led2(0)
        led3(0)
        led4(0)
        led5(0)
    end
    ledon = not ledon
    sys.timerStart(changeLED,1000)--一秒后执行指定函数
end
changeLED() --开机后立刻运行该函数

保存后烧入程序即可,五个LED灯就应该一秒亮一秒灭了,关注持续输入教程

下载调试工具  使用LuaTools

源代码 https://download.csdn.net/download/weixin_37180087/11255550

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章