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

Air系列模块以AT的完美兼容性和Luat开发的强大功能享誉物联网圈,不过很多开发者对于它的基础功能还是不很熟悉,所以本文就深入的说一下怎么开机、关机和重启模块。 开机 模块以超低功耗和超...

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,使之可以把重启的缘由记录下来,并在下次启动时打印输出。

  • 发表于 2018-09-07 10:02
  • 阅读 ( 6179 )
  • 分类:默认分类

0 条评论

请先 登录 后评论
不写代码的码农
技术销售Delectate

43 篇文章

作家榜 »

  1. 技术销售Delectate 43 文章
  2. 陈夏 26 文章
  3. 国梁 24 文章
  4. miuser 21 文章
  5. 晨旭 20 文章
  6. 朱天华 19 文章
  7. 金艺 19 文章
  8. 杨奉武 18 文章