Air2xx/Air8xx 系列模块的开机、关机和重启

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")

    --跟网络服务器同步时间成功,直接参考当前时间设置闹钟即可

    --设置闹钟时间为201831418180秒,用户测试时,根据当前时间修改此值

    --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)

我们来测试一下效果如何:

attachments-2018-09-KawUGYT25b91db0c14d67.png

trace中可以看到,准确识别了短按和长按,且实现了长按关机。

软件关机

AT版底层的模块,执行如下指令即可:

attachments-2018-09-7EjxX3rU5b91db21891ac.png

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版底层的模块,需要执行如下指令:

attachments-2018-09-xHo6iFYt5b91db7196260.png

attachments-2018-09-9jH3olsr5b91db7821b23.png

Luat版底层的模块,可以执行如下代码实现重启:

sys.restart(“restart_reason”)

rtos.restart()

这两个代码都能实现重启,区别在于sys.restart包装了一下rtos.restart,使之可以把重启的缘由记录下来,并在下次启动时打印输出。

上次更新 2021-01-28