感谢热心网友Delectate整理的部分Q&A。如果还有常见问题但没有在wiki上列出来,请在http://erp.openluat.com上留言。

模块内部的休眠唤醒机制是怎样的?

Air模块(Air200,Air202,Air800)Lua 内部软件休眠处理目前有两种方式:

飞行模式的控制,通过调用misc.setflymode()来实现,

misc.setflymode(true)进入飞行模式,

misc.setflymode(false)退出飞行模式。

非飞行模式下,休眠和唤醒的控制如下:

<1> 休眠后,检测到以下事件会自动唤醒,事件处理结束后,会自动允许休眠

1. 短信收发
2. 电话呼入呼出
3. GPRS数据发送接收
4. 硬件GPIO中断

<2> 可以在脚本中调用pm.wake主动唤醒,调用pm.sleep主动允许休眠

Attention

允许休眠的意思指的是,不一定真正休眠,这个取决于所有唤醒的场景(自动和主动)都否都允许休眠,具体可参考script中pm的demo来理解。




开机/重启原因分析

每次模块开机,会将开机原因reason=rtos.poweron_reason() 就打印出来。这里几个常见的开机原因总结如下:

  • reason=0 (rtos.POWERON_KEY) 即按键开机。可能的原因有:
1 按键开机,硬件重启,以及硬件看门狗重启。
2 按键开机,是平时的开机。
3 硬件重启,可能是reset脚使能导致,也可能是USB供电不足导致。USB供电不足的情况下,请改用电池或稳压电源,接到电池脚供电。
4 硬件开门狗重启,可能是硬件上已经连接上了硬件狗,但是脚本中没有require"wdt" 喂狗导致。
  • reason=3(rtos.POWERON_RESTART)

即:软件重启开机。 可能的原因有:脚本中的语法错误以及脚本中调用sys.restart()重启。

以下的图是一个脚本语法错误导致重启的例子: 有语法错误的时候,会出现:stack traceback 这个关键字。

analize1

  • 以下的图,是我在脚本中调用sys.restart("gw->test")重启模块后的打印。

analize2

  • restart重启的原因,会打印在sys.initerr里
参数 reason=6(rtos.POWERON_EXCEPTION)
脚本程序里出现异常导致重启开机。
例如 脚本中 出现: x = 12/0
参数 reason=8(rtos.POWERON_WATCHDOG)
脚本程序中出现了死循环。
例如 下图是一个脚本中出现死循环导致模块重启后的打印:

analize3

  • 模块脚本软件出现死循环,会在一分钟后重启模块。



Luat Air烧写软件失败原因分析

  • 使用LuaDB工具下载软件时,如果失败,请按照如下步骤检查:

对于Air200开发板:

一、开发板S1

1. 使用的下载线必须是普通的USB线(一头是普通的usb头,一头是micro usb头),
不能用USB转串口线;要连接开发板上的micro usb口下载
2. 如果使用的是USB线供电,VBAT没有直接供电,则用万用表量一下VBAT引脚的实际电压,
正常电压是3.9V左右,如果差别太大,就是USB线供电有问题,
换根线或者换个电脑USB口再测量一下
3. 如果VBAT引脚直接供电,供电范围为3.6V到4.2V
4. 下载时,配置好下载端口后,要先给开发板断电,然后连接下载线,
LuaDB工具点击开始下载后,再给开发板上电
5. 其余问题,尝试换一下电脑USB口,或者换一根USB线,
或者换一台电脑,或者重新下载试试

二、开发板S2,开发板S3

1. 使用的下载线必须是FT232芯片的USB转串口线(一头是普通的usb头,一头是杜邦头),
一定要是官方提供的线,要连接开发板上的下载口下载
2. 如果使用的是USB转串口线接开发板5V引脚供电,VBAT没有直接供电,
则用万用表量一下VBAT引脚的实际电压,正常电压是3.9V左右,如果差别太大,
就是USB转串口线供电有问题,换根线或者换个电脑USB口再测量一下
3. 如果VBAT引脚直接供电,供电范围为3.6V到4.2V
4. 下载时,配置好下载端口后,要先给开发板断电,然后连接下载线,
LuaDB工具点击开始下载后,再给开发板上电
5. USB转串口线的rx和tx交换一下试试
6. 其余问题,尝试换一下电脑USB口,或者换一根USB转串口线,
或者换一台电脑,或者重新下载试试



利用Air202如何设计DTU产品

  • Air202模块支持AT命令开发以及Lua脚本开发两种方式:

支持AT命令开发的软件为Air202T, 支持Lua脚本开发的软件为Air202, Air202T和Air202在淘宝上有不同的链接, 只是默认出厂软件不同,硬件是完全一样的,在 淘宝上有Air202T和Air202的链接,请根据需求购买

  • Air202有两种方式可以实现DTU产品:

Air202T的默认出厂软件,MCU可以通过UART (2017年3月1日前是UART2,3月1日后是UART1) 发送AT命令控制Air202模块,模块支持数据透传的AT指令, 参考文档《Air202模块AT命令手册VX.X.pdf》, 19.28章节中如下截图中的例子

dtu

  • 此种方式,不需要修改Air202模块软件,但是需要用户在MCU端编程做以下几项工作
1. 控制“命令模式和透传模式的切换 ”
2. 各种异常的处理,(例如:和服务器断开连接后,重连的处理;和服务器通信异常时 ,透传数据缓存的控制)

二、

Air202的默认软件,用户可用Lua脚本进行二次开发, 实现一个完整的DTU产品,官方已经写了一个简单的DTU例子: script\demo\socket\long_connection_transparent, 烧写此程序后, 使用方法为:通过uart1和MCU连接,MCU直接和指定的服务器 (用户要修改sck.lua中的服务器地址变量PROT,ADDR,PORT)透传数据, 此例子实现了下面的几个功能

1. sck.lua:开机后自动连接固定的服务器(用户可修改), 连接异常断开后有自动重连机制,
如果一直连接失败,有重启机制;发送MCU需要透传给服务器的数据,
接收服务器需要透传给MCU的数据
2. mcuart.lua:通过UART1和MCU透传数据;
收到MCU的1024字节数据或者收到MCU的数据1秒钟后再没有收到新数据,
则会立即发送数据给服务器
  • 此种方式,需要用户在这个简单的例子基础上,做以下工作:
1. 如果有支持命令的需求
(例如MCU通过命令修改服务器的地址 ),
修改mcuart.lua支持“自定义命令 ”以及“命令模式和透传模式的切换 ”,
MCU端编程使用命令即可
2. 各种异常的处理
(例如 :和服务器通信异常时 ,透传数据缓存的控制 )



AT命令发送短信和用luat脚本发送短信有何不同?

用GPRS无线模块通过AT命令方式收发短信的一般应用场景,是MCU通过物理串口与GPRS模块连接,然后MCU发送AT命令来控制模块发送短信。

  • 本文以PDU格式为例描述短信业务的收发过程。

一、AT命令发送短信

1.1 MO SMS(模块发起的短信)的PDU格式

  • 如下图:

AT1

  • 参数定义:

AT2

1.2 发送中文短信的AT命令实现步骤

  • 短信发送设置为PDU格式:

AT3

  • PDU组包并发送:

AT4

出现“>”,代表已经准备好发送,此时输入PDU包,
然后输入ctrl+z(即0x1A),就发送出去了。
所以发送一个短信,需要两次输入,再加一次判断,才能完成。
  • 处理返回:

AT5

上面的返回,表示发送成功,发送短信过程结束;
当返回 +CMS ERROR: err ,表明没有发送成功,
需要用户再次处理。

二、Luat发送短信的实现方法

事实上,AT命令发送短信,需要开发者对短信协议非常熟悉,
尤其是PDU的拆包组包,每个字节的定义,还需要对发送内容
进行UCS2编码。这对开发者的要求相对来说还是有点高的。

用合宙推出的Luat开源软件架构来进行上述短信发送工作就方
便很多了。 二次开发用户不需要MCU,也不需要串口线,这些
都可以省掉,直接在嵌入模块中的Lua脚本中即可实现。

而且二次开发客户不需要自己实现PDU组包,也不需要UCS2的转码,
我们已经在Luat中做好了转码库和转码函数,直接调用即可。

2.1 建立一个main.lua文件

  • Luat架构下二次开发用户Lua脚本发送短信的main.lua详述如下:
require"sys"
require"common" --发送短信时转码需要用common模块的接口
require"sms" --发送短信时组PDU包需要用sms模块的接口
sms.send("10086",common.binstohexs(common.gb2312toucs2be("111111")))

--发送英文

--common.lua库文件中已经做好了转码函数

--sms.lua库文件中已经做好了短信发送函数,
将AT命令发送短信的两步输入和一步判断在一个函数中一次完成

--另外,开发者可以直接发送长短信,不需要自己分包,
我们已经在发送函数中做了处理

sms.send("10086",common.binstohexs(common.gb2312toucs2be("第2条短信")))   

--发送中文和数字

sys.init(0,0)

sys.run()




Luat功耗数据有没有?待机的时候,飞行模式,发送数据的时候,功耗大概有多少?

  • Air200模块在各个工作状态的电流数据 如下:

Q17

  • Air202模块的功耗数据如下:

Air202功耗

---


Air800开发板为什么不能定位?

请烧入demo例程,并使用app“时间线”查看模块定位,时间线教程

如果模块显示为“基站定位”,那么请把模块拿到屋顶、窗外等gps信号较好的地方,等待片刻再试;如果app中仍然无法显示“gps定位”,那么请使用usb2ttl线接gnd和gpx_tx,使用串口调试助手查看gps数据是否正常。 请注意:如果要在室内进行模块调试、开发,建议选购gps信号转发器




模块支持什么运营商的卡?是否支持境外的运营商?

目前开发板支持 中国移动、中国联通 的 4G/3G/2G 流量卡。

理论上模块是支持所有运营商的卡,但是由于各国网络存在细微差异,所以很难做到无差别覆盖。所以如果您遇到境外的卡无法使用,请提供相关trace,合宙将提供额外技术支持。