IOT平台开发指南
编写:祝鸣 | 日期: |
---|---|
发布版次:3.0 | 日期: |
编号: |
变更记录
日期 | 版本 | 变更说明 | 作者 |
---|---|---|---|
2020-4-25 | V1.0 | 初版,md文件 | 初阳 |
2020-4-30 | V2.0 | 修改口语描述,补充开发板介绍,调整所有图片格式,md文件 | 祝鸣 |
2020-5-6 | V3.0 | 重写doc版本,加入系统整体架构图,并说明系统的基本工作原理;加入文档介绍,描述这个文档的作用;说明如何烧写固件到MSP432。 | 祝鸣 |
1. 文档介绍
本文档为嵌入式初学者简明地介绍了在IOT平台上进行开发的方法,通过阅读这份指南,开发者能够快速入门并且开发自己的物联网案例。
2. 系统架构
一个物联网案例的架构如下图,由软件端和设备端组成。设备端包括MSP432P401R和IOT扩展板,软件端包括Web端(IOT平台)和移动客户端(MXLab)。设备端通过IOT扩展板的EMW3080 Wi-Fi模块以发送JSON协议串的方式与阿里云 IoT 智能生活开放平台 iLOP进行通信,移动客户端通过JSON协议串与iLOP进行通信。当设备端上报数据时,移动客户端可以接收数据并做相应处理与展示;当移动客户端下发命令时,设备端可以接收并给出反应。
3. 准备工作
3.1 PC端
下载keil MDK-Arm Version 5.26,格西烽火。keil用于设备端代码的编译和烧录,格西烽火是一款串口工具,便于AT指令的编辑和运行。
3.2 手机端
下载 MXLab
3.3 设备端
MSP432 LaunchPad与MSP423-IOT物联网扩展板,插接方式如下图,通过usb线与PC相连。使用keil可以将自己的硬件端逻辑代码烧录至MSP432中。
3.4 Wi-Fi网络
必须使用输入wifi密码即可连接并上网的wifi,例如ECNU这类需要额外登录的Wi-Fi不能使用
3.5 设备三元组
设备三元组是“设备激活凭证”(Product Key, Product Secret, Device Secret)
,联系具有申请权限的负责人获取三元组。
3.6 设备端模板与移动端页面模板
提供设备端样例代码screen_showOLED.rar
和H5模型样例代码default_H5.zip
4. 注册账号
通过MXLab注册一个账号,该账号在IOT平台Web端和手机端MXLab通用。
5. 设备端-固件烧写&开发
5.1 固件烧写方法
当设备端固件开发完成后,可按照下列步骤烧录至开发板中。设备端开发方法在下一小节5.2中详细介绍。
5.1.1 完善keil环境
安装MCU Device包。
1)在线安装
单击keil5中的Pack Installer,如下图。
按照如下图步骤进行安装。
2)离线安装
访问如下链接http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/msp432cmsis/latest/index_FDS.html,下载如下图标识MSP432Pxx系列离线安装包,双击安装,安装路径选择和Keil5一样的安装路径。安装成功后,就可以在Keil5的Pack Installer中看到我们安装的包。
5.1.2 开发板驱动安装
使用管理员权限运行驱动安装包,驱动安装包链接如下,https://software-dl.ti.com/ccs/esd/documents/xdsdebugprobes/emu_xds_software_package_download.html,如下图,选择合适版本。
驱动成功安装后,如下图可以在设备管理器中看到。
5.1.3 开发板调试器固件升级(可选)
开发板调试器固件出厂默认为V1.0,该固件下载和调试时操作非常不流畅,可以进行固件升级。将3.3节中的设备通过USB线连接至电脑,单击如下图按钮。
选择Ti XDS Debugger,单击Setting,如下图。
在弹出的固件升级对话框中点击“确定”,如下图。
升级过程中开发板的绿色LED会熄灭,升级完成后会绿色LED重新亮起,同时进入Setting界面(升级过程中请勿断开USB线缆)。
5.1.4 使用keil烧录固件
将3.3节中的设备通过USB线连接至电脑,双击打开.uvprojx文件打开工程。点击load按钮即可将硬件端代码烧录至设备板中,如下图。
5.2 设备端开发
以screen_showOLED
内函数为例
main函数流程:①设备初始化 ②配网③绑定APP端H5页面 ④接收发送数据
5.2.1设备初始化代码说明
设备初始化部分代码如下:
MAP_WDT_A_holdTimer(); / 关闭看门狗 /
MAP_FPU_enableModule();
//set clock<br /> /* 设置DCO频率为指定频率,此处DCO=12M*/
MAP_CS_setDCOFrequency(12000000);
MAP_CS_initClockSignal(CS_MCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_1);<br /> MAP_SysTick_enableModule();
MAP_SysTick_setPeriod(12000);
MAP_SysTick_enableInterrupt();
MAP_Interrupt_enableMaster();
......
uart1_init();
InitQueue(&q);<br />`uart1_init()`函数实现uart初始化。其中初始化`EUSCI_A2_BASE`为uart模块,配置P3.2,P3.3为输入输出引脚,使能uart中断。即为`EUSCI_A2_BASE`模块实现MSP432LaunchPad和IOT-MSP432间的通信。<br />`InitQueue(&q)`函数实现循环队列`q`的初始化。当IOT-MSP432接收到云端下发数据时,会产生uart中断,将下发的数据存储到队列`q`中。
5.2.2配网部分代码说明
MSP432 LaunchPad通过uart串口向IOT-MSP432发送AT指令,实现连接ilop平台,主要步骤如下:
(1)进入AT指令模式
(2)关闭UART回显
(3)设置ilop平台产品参数信息
(4)启动ilop服务
(5)启动awss路由配网模式
(6)配网成功后,收发数据
具体可参考直连云AT指令,AT直连ilop阿里飞燕云平台步骤和基础AT指令。
配网部分代码如下:
char str_AT[][100]=
{
"AT\r",
"AT+UARTE=OFF\r",
"AT+ILOPSET=a11407CgHIo,zHgpYHHnS4aWgdWu,4n5TLRxgmkmYXtnx1pmqMt68LJrTh6X7,***\r",
"AT+ILOPDOMAIN=0\r",
"AT+ILOPSTART\r",
"AT+ILOPAWSSTART\r",
"AT+ILOPSTATUS",
"AT+FWVER?"<br />};
……
Send_Response(“AT+ILOPRESET\r”,strlen(“AT+ILOPRESET\r”));
delay_ms(1000);
while(!judgeReceiveEnd());
Send_Response(“AT+FACTORY\r”,strlen(“AT+FACTORY\r”));
delay_ms(1000);
while(!judgeReceiveEnd());
Send_Response(str_AT[0],strlen(str_AT[0]));
for(int i = 1;i<sizeof(str_AT)/sizeof(str_AT[0]);i++)
{
delay_ms(1000);
while(!judgeReceiveEnd());
Send_Response(str_AT[i],strlen(str_AT[i]));
}
注:准备的设备三元组,用于指令AT+ILOPSET
中Send_Response()
函数实现MSP432 LaunchPad通过uart串口向IOT-MSP432发送AT指令。judgeReceiveEnd()
函数主要实现对队列q
中收到的云端下发的数据进行解析,可得到云端对上报指令的反馈等。
5.2.3绑定APP端H5页面部分代码说明
每一台设备会与MXLab上的一个H5页面相绑定,此绑定操作只需进行一次,无需重复执行,主要为向平台上传我们H5模型的id ,具体代码如下。
Send_Response(“AT+ILOPSENDJSON=property,44\r{\”model\”:\”ff8080816e85d7a9016e92a9cd800002\”}”,strlen(“AT+ILOPSENDJSON=property,44\r{\”model\”:\”ff8080816e85d7a9016e92a9cd800002\”}”));
delay_ms(1000);
while(!judgeReceiveEnd());
model
后的字符串,即为我们在物联网实验平台后端管理-模型管理-模型列表
中的模型id。
5.2.4接收发送数据部分代码说明
完成上述操作后,可以向平台发送数据,同时也可接收平台下发的数据,实现设备与平台间的通讯。
向平台发送数据:使用Send_Response()
函数,MSP432 LaunchPad向IOT-MSP432发送“上报JSON协议数据”AT指令。AT指令格式如下:
发送数据部分代码样例如下:
tempHum_value[0] = temperature;
tempHum_value[1] = humidity;
for(int i=0;i<2;i++){
length = 0;
initKeyValueList(keyValueList);
initKeyValueList(keyValueList_1);
memset(str,0,sizeof(str));
setDouble(keyValueList_1,tempHum_key[i],tempHum_value[i]);
length = 0;
setJSON(keyValueList,"protocol",keyValueList_1);
char* str2 = toString(keyValueList);
sprintf(tmp_str,"%d",strlen(str));
strcat((char*)str_ILOPSENDJSON,tmp_str);
strcat((char*)str_ILOPSENDJSON,"\r");
strcat((char*)str_ILOPSENDJSON,str);
Send_Response((char*)str_ILOPSENDJSON,strlen(str_ILOPSENDJSON));
sprintf(str_ILOPSENDJSON,"%s","AT+ILOPSENDJSON=property,");
memset(tmp_str,0,sizeof(tmp_str));
memset(str,0,sizeof(str));
}
接收平台下发数据:平台会向设备端下发JSON格式的字符串,在设备端需要对该字符串进行解析,进而获得相应数据。主要解析操作发生在judgeReceiveEnd()
函数中,部分解析代码样例如下:
if((address != NULL && q.data[offset_1]==’\n’) || (address != NULL && q.data[offset_1]==’\r’ && q.data[offset_2]==’\n’)){
printf("q.front======%d\n",q.front);
printf("q.rear======%d\n",q.rear);
jsonLength = address - &q.data[q.front];
printf("jsonLength========%d\n",jsonLength);
......<br /> //Start parsing the first complete JSON message received<br /> if(strstr(buffer_JSON,"protocol")){
if(strstr((char *)buffer_JSON,"PowerSwitch")){
......<br />
6. H5端-开发&模型上传
6.1 H5开发
以default_H5.zip
内函数为例
页面加载后,MXLab APP 会自动向页面内注入 SDK ,注入完成后,会触发页面的 applicationReady 事件,此事件触发后,可使用 SDK 的各种方法。所以H5页面需包含以下部分代码,来实现与设备端的通信。
document.addEventListener(“applicationReady”, function (e) {
// 页面环境初始化完成,可开始调用 SDK 方法<br /> }
});
SDK的各种方法可参照物联网实验平台后端管理-开发指南-开发教程,例如mx.watchDeviceStatus()
函数,可监听设备端实时上报的数据;mx.setDeviceStatus()
函数,可向设备端下发数据。
下面样例为使用mx.watchDeviceStatus()
,获得设备端上传的json数据并显示。
document.addEventListener(“applicationReady”, function (e) {
//监听设备数据<br /> mx.watchDeviceStatus(function (res) {
show(res,false);
});<br />});
6.2 H5模型上传
(1) 完成H5页面开发后,将开发文件压缩打包为zip(需包含index.html)。
(2)打开物联网实验平台后端管理,在模型管理-模型列表
中点击新增模型
,并输入模型名称。
(3)上传H5模型压缩包。
(4)记录下H5模型的id,以供设备端与H5进行绑定。
7. 完成设备端和H5端开发后,IoT接入平台步骤
(1) 组合MSP432开发板和MSP432-IOT物联网扩展板。并将MSP432开发板与PC相连。PC端打开设备管理器确认是否连接成功,显示如下。
(2)PC端打开格西烽火,并设置参数如下。设置完成后点击绿色打开
按钮。
(3) PC端使用keil打开screen.uvprojx,编译并烧录。
(4) 手机端打开MXLab,一系列操作如下。
1)当设备是第一次连网时,需要先点击MSP432 Launchpad上的USER
按钮,使开发板进入允许配网状态。配网成功后,后续只需要上电并使开发板处于同一网络环境下,开发板即可自动连网。开发者如果想确认是否成功进入允许配网状态,可以在串口工具(格西烽火)中观察日志信息,观察相应响应输出(6个OK响应)。
2)点击添加设备
![](https://cdn.nlark.com/yuque/0/2020/png/2894660/1605432650838-f1421282-569d-45ec-8bc1-bc33623cd68d.png#height=175&width=99)
3)点击手动选择型号
![](https://cdn.nlark.com/yuque/0/2020/png/2894660/1605432650986-1fa2e9a4-536c-4e46-8ce4-0ff6c60d3bf9.png#height=177&width=106)
4)点击MXLab``开发板
![](https://cdn.nlark.com/yuque/0/2020/png/2894660/1605432651234-c898479c-d4cb-4291-8d08-0b09145861a0.png#height=185&width=105)
5)勾选确认灯闪烁后亮起
,并点击下一步
![](https://cdn.nlark.com/yuque/0/2020/png/2894660/1605432651364-1d7fb4ce-c9e0-4251-a9ce-7d0997496e6d.png#height=185&width=105)
6)输入Wi-Fi密码,点击开始连接
![](https://cdn.nlark.com/yuque/0/2020/png/2894660/1605432651483-886c505f-95a6-4ef8-88db-dbb15c189a7e.png#height=205&width=116)
7)当手机端显示如下页面时,表示配网成功。
同时PC端的格西烽火页面会显示以下消息,表示配网成功。