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进行通信。当设备端上报数据时,移动客户端可以接收数据并做相应处理与展示;当移动客户端下发命令时,设备端可以接收并给出反应。
AIOT平台开发指南3.0 - 图1

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中。
AIOT平台开发指南3.0 - 图2

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,如下图。
AIOT平台开发指南3.0 - 图3
按照如下图步骤进行安装。
AIOT平台开发指南3.0 - 图4
2)离线安装
访问如下链接http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/msp432cmsis/latest/index_FDS.html,下载如下图标识MSP432Pxx系列离线安装包,双击安装,安装路径选择和Keil5一样的安装路径。安装成功后,就可以在Keil5的Pack Installer中看到我们安装的包。
AIOT平台开发指南3.0 - 图5

5.1.2 开发板驱动安装

使用管理员权限运行驱动安装包,驱动安装包链接如下,https://software-dl.ti.com/ccs/esd/documents/xdsdebugprobes/emu_xds_software_package_download.html,如下图,选择合适版本。
AIOT平台开发指南3.0 - 图6
驱动成功安装后,如下图可以在设备管理器中看到。
AIOT平台开发指南3.0 - 图7

5.1.3 开发板调试器固件升级(可选)

开发板调试器固件出厂默认为V1.0,该固件下载和调试时操作非常不流畅,可以进行固件升级。将3.3节中的设备通过USB线连接至电脑,单击如下图按钮。
AIOT平台开发指南3.0 - 图8
选择Ti XDS Debugger,单击Setting,如下图。
AIOT平台开发指南3.0 - 图9
在弹出的固件升级对话框中点击“确定”,如下图。
AIOT平台开发指南3.0 - 图10
升级过程中开发板的绿色LED会熄灭,升级完成后会绿色LED重新亮起,同时进入Setting界面(升级过程中请勿断开USB线缆)。

5.1.4 使用keil烧录固件

将3.3节中的设备通过USB线连接至电脑,双击打开.uvprojx文件打开工程。点击load按钮即可将硬件端代码烧录至设备板中,如下图。
AIOT平台开发指南3.0 - 图11

5.2 设备端开发

screen_showOLED内函数为例
main函数流程:①设备初始化 ②配网③绑定APP端H5页面 ④接收发送数据

5.2.1设备初始化代码说明

设备初始化部分代码如下:
MAP_WDT_A_holdTimer(); / 关闭看门狗 /
MAP_FPU_enableModule();

  1. //set clock<br /> /* 设置DCO频率为指定频率,此处DCO=12M*/
  2. MAP_CS_setDCOFrequency(12000000);
  3. MAP_CS_initClockSignal(CS_MCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_1);<br /> MAP_SysTick_enableModule();
  4. MAP_SysTick_setPeriod(12000);
  5. MAP_SysTick_enableInterrupt();
  6. MAP_Interrupt_enableMaster();
  7. ......
  8. uart1_init();
  9. InitQueue(&q);<br />`uart1_init()`函数实现uart初始化。其中初始化`EUSCI_A2_BASE`uart模块,配置P3.2,P3.3为输入输出引脚,使能uart中断。即为`EUSCI_A2_BASE`模块实现MSP432LaunchPadIOT-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]=
{

  1. "AT\r",
  2. "AT+UARTE=OFF\r",
  3. "AT+ILOPSET=a11407CgHIo,zHgpYHHnS4aWgdWu,4n5TLRxgmkmYXtnx1pmqMt68LJrTh6X7,***\r",
  4. "AT+ILOPDOMAIN=0\r",
  5. "AT+ILOPSTART\r",
  6. "AT+ILOPAWSSTART\r",
  7. "AT+ILOPSTATUS",
  8. "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+ILOPSETSend_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。
AIOT平台开发指南3.0 - 图12

5.2.4接收发送数据部分代码说明

完成上述操作后,可以向平台发送数据,同时也可接收平台下发的数据,实现设备与平台间的通讯。
向平台发送数据:使用Send_Response()函数,MSP432 LaunchPad向IOT-MSP432发送“上报JSON协议数据”AT指令。AT指令格式如下:
AIOT平台开发指南3.0 - 图13
发送数据部分代码样例如下:
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)打开物联网实验平台后端管理,在模型管理-模型列表中点击新增模型,并输入模型名称。AIOT平台开发指南3.0 - 图14
(3)上传H5模型压缩包。AIOT平台开发指南3.0 - 图15
(4)记录下H5模型的id,以供设备端与H5进行绑定。AIOT平台开发指南3.0 - 图16

7. 完成设备端和H5端开发后,IoT接入平台步骤

(1) 组合MSP432开发板和MSP432-IOT物联网扩展板。并将MSP432开发板与PC相连。PC端打开设备管理器确认是否连接成功,显示如下。
AIOT平台开发指南3.0 - 图17
(2)PC端打开格西烽火,并设置参数如下。设置完成后点击绿色打开按钮。
AIOT平台开发指南3.0 - 图18
(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)当手机端显示如下页面时,表示配网成功。
AIOT平台开发指南3.0 - 图19
同时PC端的格西烽火页面会显示以下消息,表示配网成功。
AIOT平台开发指南3.0 - 图20