干货分享 |  基于ME3616的创易栈NB-IoT开发板上手玩教程

Simon 2018-11-01 09:37:41






——据某谣言说:要想项目过得去,板子总得带点绿。

So,这篇教程的目标就是:点灯。


本篇教程的主要目的,是代码级实现ME3616模块向电信IoT平台上报数据,并且实现在电信IoT平台发送指令,点亮插在模块上的STM32 Nucleo板子上的一个LED。


高手现在可以抛下一个鄙视的眼神

并关闭这篇文章的分界线







一、完成上面这个目标,你需要先准备的一点操作和了解一点内容


关注创易栈公众号:emakerzone

关注STM32单片机公众号:STM32_STM8_MCU

 

完整的模块参考资料,请到网盘下载:

百度网盘链接:

https://pan.baidu.com/s/1AEB-O01_wHUoAr77ebV6bw  

密码:gqtn



微云网盘链接:

https://share.weiyun.com/5rygWq



1. 模块的硬件

如下图所示,ME3616模块的串口,通过一个选路开关:一边通向板载的CH340串口,用作外部或手工调试;另一边通向MCU的PA9、PA10(即D0、D1,常用于USART1串口)。

串口的电路特性决定了,串口是不可以多路收发并联在一起使用的,所以使用的时候,根据需要把选路开关拨在对应的位置上。

模块上电后,并不是立即就自动上报通信的,需要先手动拉低电源/复位引脚(按一下按钮)。

插入SIM卡,请注意观卡槽内触点的位置,SIM卡缺口朝外,向内推到底。


2.通信逻辑简图

· MCU始终使用AT指令,通过串口与模块通信。

· MCU需要实现电信终端接口协议,其内容作为

  payload,通过AT发送到模块。

· 模块与电信平台间,默认使用NB-IoT Band 5,以

  CoAP作为其协议。

· 在CoAP以上,使用LWM2M TLV作为其协议。

· 电信终端接口协议的消息格式说明,请查阅

  https://www.easy-iot.cn/document


3.模块的准备和测试

1. 插上SIM卡,调整好选路开关


2. 插上MicroUSB线连上电脑,打开串口工具(建议

使用sscom),波特率115200/8/1,无校验。

电脑上如果没有安装过CH340的串口驱动,这个时候需要安装一下,直到串口工具显示CH340串口。


3. 按一下电源/复位按钮,几秒钟之后串口打印出如下内容,说明SIM卡与模块工作正常

如果出现----assert----、auto reboot之类的内容,一般是因为电源按钮按的时间太短,等待一下或者重新按一下按钮就应该正常。

如果没有出现任何内容,请检查驱动是否安装正常,串口工具是否正确显示CH340串口,以及USB线与模块的开关及连接等等。


4.请输入并发送以下指令,检查模块的信息,其中IMEI和IMSI请保存下来,后面会用到:

发送指令前,请勾选串口工具中的:

具体指令结果及其含义,请查阅AT命令手册。

若指令回复均满足手册要求,则模块的状态是OK的。否则请按照手册说明检查。


4.下载准备好的演示代码

https://github.com/ssSimonn/ME3616-NB-IOT

如果你使用STM32L432KC Nucleo或STM32L031K6 Nucleo这两块板子,恭喜你,演示工程已经做好了,只需要更改代码中的imei、imsi号后,编译下载,就完成了。

二,电信平台上的操作

1、注册并开通电信Easy IoT平台账号

请到https://www.easy-iot.cn,根据提示,完成注册账号的步骤。


2、在电信平台中,创建并设置产品的信息。

请按照以下信息设置(因为演示代码就是按照这个写的)

n完成以上设置后,点击右上方的保存

并选择 管理->导出设备头文件

保存改文件到电脑。

n至此,平台侧的设置完成。

三、代码写入并观察结果

如果你正在使用L432kc Nucleo或L031 Nucleo,直接打开对应的项目文件(IAR 或 Keil)

如果你使用其他的MCU,请跳到下一节,代码移植的部分。


1. 更改代码中的imei及imsi号码,改为你的模块实际的数值(位于me3616_app.c中)

2. 把刚才从电信平台保存的“设备头文件”,复制到<项目文件夹>\Drivers\EASYIOT\inc中

 

3. 电脑连接好ST-Link的串口,打开串口工具(连接ST-Link虚拟串口,115200/8/1 无校验)。

 

4. 编译,调试运行,或代码写入MCU后,按Nucleo的复位键,可以看到串口打印的log:

看到以上内容,说明代码已经正常运行


5. 当出现M2MSEND发送后,回到电信平台的网页,查看设备信息,传感器的数值应该变为如下状态:

 其中,信号强度从通过AT从模块读取。电量数字取自me3616模块的ADC值。

上传的传感器的值,位于me3616_app.c中:


6. 点击电信平台->设备管理中的 指令图标,向模块发送指令,如下图:


7. 最长等待90秒后(可修改代码),指令被模块接收,可以观察到Nucleo板的绿色LED点亮。

具体为什么要等,而不是立即接收,请查看模块文档关于PSM、eDRX等模式。


8. 至此,点灯动作完成,演示结束。

四、主要代码及移植注意事项

代码除了STM32 CubeMX生成的部分,需要自行加入另外两部分,均为开源:

1、包含ME3616指令集、AT发送/接收、MCU串口驱动以及应用代码的:

me3616.c、me3616-if.c、me3616-app.c

2、电信开源SDK,完成电信平台侧的协议:

easyiot.c


AT指令发送由ME3616_Send_AT_Command ()完成,参数主要有:

目标Me3616实例

目标AT指令

可用指令位于me3616.h的enum AT_CMD_t中。


扩展指令格式

可选择不扩展(AT_Action_Base)

Set(AT_Action_Set)

Read(AT_Action_Read)

Test(AT_Action_Test)

四种。


override

是否强制发送。若该值为true,将忽略上一次指令的状态(包括上一条指令是否有回复),直接发送。有可能会造成模块响应错误等问题,用户需要自行处理错误。

若该值为false,发送动作会等待在上一条指令状态为ATOK或AT_None的状态下才会发送,否则取消AT指令发送,设置AT状态为超时timeout,并返回false。用户需要使用Get_AT_State() / Set_AT_State() 来检查和修改上一条指令的状态。


指令内容

若扩展指令格式为AT_Action_Set,此处为参数的内容。


返回值

若模块回复OK / ERROR,则返回true。否则返回false,并设置AT状态为超时timeout。

详细的AT指令内容,请参考《模组AT指令手册》


在AT指令发送后,收到回复OK/Error前,模块向MCU发回的内容都交Command_Response()处理。

 

收到OK/Error后,模块再向MCU发回的内容称为“主动上报”,交由对应的Callback函数执行。


移植方面,主要关注的地方有:

请根据目标MCU的资源,配置me3616.h

两个串口:MCU与me3616的通信串口,以及MCU通过ST-Link的打log串口。

调整发送/接收等各种Buffer的大小。

 

根据串口通信的方式,配置me3616_if.c

本DEMO使用DMA+CM方式接收和发送。

接收内容为以字符开头(需要去掉字符串前面的CR LF),‘\n\0’结尾的字符串,每接收一个字符串执行一次RxHandler()。

 

根据目标MCU的资源,配置easyiot.h

修改#define MESSAGE_MAX_TLV,默认为32,根据实际的传感器数量调整。

 

根据目标MCU的资源,配置me3616_app.c

修改EasyIoT SDK所需要的buff大小

(me3616_app.c)。

 

请按照以下内容修改easyiot.c 的CoapOutput()函数

热门文章

copyright@2014-2016 emakerzone.com 粤ICP备16121718号-2 公安局备案 粤公网