Air系列模块以AT的完美兼容性和Luat开发的强大功能享誉物联网圈,不过很多开发者对于它的基础功能还是不很熟悉,所以本文就深入的说一下怎么开机、关机和重启模块。
开机
模块以超低功耗和超强性能可实现软件开机(闹钟开机)或硬件开机。
硬件开机
不论是AT还是Luat底层,只要模块上电后拉低 PWRKEY 大于2000ms就可以开机啦。
那么如何实现上电自动开机呢?PWRKEY接地就可以了。
不过开发者要注意的是,AT版底层的模块,开机后拉低PWRKEY 2000ms就会关机。所以AT版底层的模块PWRKEY不要直接接地(Luat 底层不受影响)。
软件开机(闹钟开机)
通过Air系列模块的闹钟功能,实现软件开机,可以在不需要额外的单片机情况下,帮助开发者更灵活的实现通信、降低功耗、延长续航时间等需求,满足多种应用场景。
使用闹钟开机,开发者首先应正确开机,同步时钟,设定闹钟后关机。此后,模块才能在正确的时间实现开机。
示例代码(alarm/testAlarm.lua):
require“ntp”
module(…,package.seeall)
–[[
函数名:ntpSucceed
功能 :网络服务器同步时间成功消息的处理函数
参数 :无
返回值:无
]]
local function ntpSucceed()
log.info(“testAlarm.ntpSucceed”)
—跟网络服务器同步时间成功,直接参考当前时间设置闹钟即可
—设置闹钟时间为2018年3月14日18点18分0秒,用户测试时,根据当前时间修改此值
–set_alarm接口参数说明:第一个参数1表示开启闹钟,0表示关闭闹钟;接下来的6个参数表示年月日时分秒,关闭闹钟时,这6个参数传入0,0,0,0,0,0
rtos.set_alarm(1,2018,9,10,18,18,0)
—如果要测试关机闹钟,打开下面这行代码
rtos.poweroff()
end
–[[
函数名:alarMsg
功能 :开机闹钟事件的处理函数
参数 :无
返回值:无
]]
local function alarMsg()
print(“alarMsg”)
end
—如果是关机闹钟开机,则需要软件主动重启一次,才能启动GSM协议栈
if rtos.poweron_reason()==rtos.POWERON_ALARM then
sys.restart(“ALARM”)
end
—启动网络服务器同步时间功能,同步成功后执行ntpSucceed函数
ntp.timeSync(nil,ntpSucceed)
—注册闹钟模块
rtos.init_module(rtos.MOD_ALARM)
—注册闹钟消息的处理函数(如果是开机闹钟,闹钟事件到来时会调用alarmsg)
rtos.on(rtos.MSG_ALARM,alarMsg)
如果设定了闹钟开机,但是需要临时开机,那么拉低PWRKEY 大于2000ms即可。不过此时应该重新设置闹钟。
关机
硬件关机
不论是AT还是Luat,均支持硬件关机。如果是AT版底层的模块,拉低PWRKEY 大于
2000ms,或者拉低RESET 200ms就可以实现关机;同样的,对于Luat版底层的模块,拉低RESET 200ms也可以实现关机。
有的开发者想问,Luat版底层的模块,能不能长按PWRKEY实现关机呢?答案是可以的,如下代码:
module(…,package.seeall)
require“powerKey”
function longCb()
print(“PWRKEY long pressed”)
rtos.poweroff()
end
function shortCb()
print(“PWRKEY short pressed”)
end
powerKey.setup(2000, longCb, shortCb)
我们来测试一下效果如何:
从trace中可以看到,准确识别了短按和长按,且实现了长按关机。
软件关机
AT版底层的模块,执行如下指令即可:
而Luat版底层的模块,需要执行如下代码:
rtos.poweroff()
当然,开发者也可以是使用闹钟关机的方式。方法和“开机”章节近似,不再赘述。
重启
有的时候,由于某些特殊情况(如OTA、底层跑飞等),需要重启。
硬件重启
AT版底层的模块,开发者可以关机后开机实现重启:
· 拉低RESET 200ms关机,再拉低PWRKEY 2000ms开机;
· 拉低PWRKEY 2000ms关机,再拉低PWRKEY 2000ms开机。
Luat版底层的模块:
· PWRKEY已接地:那么只要拉低RESET 200ms即可(拉低RESET实现关机,因正常上电且PWRKEY接地,即上电自动开机,实现重启);
· PWRKEY未接地:需要拉低RESET 200ms关机,再拉低PWRKEY 2000ms开机。
软件重启
AT版底层的模块,需要执行如下指令:
Luat版底层的模块,可以执行如下代码实现重启:
sys.restart(“restart_reason”)
rtos.restart()
这两个代码都能实现重启,区别在于sys.restart包装了一下rtos.restart,使之可以把重启的缘由记录下来,并在下次启动时打印输出。