概述
衔接上一篇文章(一)2024阿里云生活物联网平台的设备搭建,本文使用stm32f103c8t6单片机连接esp8266-01s wifi模块连接阿里云生活物联网/物联网平台并通过指令控制舵机转动。
二、单片机与物联网平台实现通信
1.esp8266模块AT固件烧录
固件烧写步骤可参考ESP开发(一)ESP8266-01烧录AT固件
烧录软件和烧录文件可在gitee上下载:esp8266_01s固件烧写,其中还包括野火官方的ESP8266模块资料可供参考。
2.通过AT指令连接生活物联网/物联网平台
2.1常用AT指令集
2.2 通过AT指令将wifi与生活物联网平台连接
接下来按照以下步骤,依次在串口助手发送代码,成功即返回ok
第一步:重置
AT+RST
第二步:测试
AT
第三步:设置模块为STA模式
AT+CWMODE = mode
- mode=1:Station模式(接收模式,做客户端 连接别人的wifi(热点))
- mode=2:AP模式(发送模式,做服务器 自己作为wifi 给别人连)
- mode=3:AP+Station模式 (混合模式)
AT+CWMODE=1
第四步:连接wifi
AT+CWJAP="WIFI账号","WIFI密码"
第五步:配置参数(连接阿里云)
AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"
第六步:设置MQTT的产品账号与密码(替换里面的"Username"和"Password"其它的不变)
AT+MQTTUSERCFG=0,1,"NULL","Username","Password",0,0,""
进入物联网平台可查询产品的MQTT连接参数(注:注册了生活物联网平台之后可以在物联网平台查询设备的参数,两个平台有别)
第七步:设置MQTT产品的ClientID
注:连接域名的每个逗号前面要加斜杠 \
AT+MQTTCLIENTID=0,"ClientID"
例如:ClientID为"a1wASDb2ikS.test|securemode=2,signmethod=hmacsha256,timestamp=1717922344138|"时
AT+MQTTCLIENTID=0,"a1wASDb2ikS.test|securemode=2\,signmethod=hmacsha256\,timestamp=1717922344138|"
第八步:设置MQTT接入地址
AT+MQTTCONN=0,"连接域名",port,1
例如:AT+MQTTCONN=0,"a1wASDb2ikS.iot-as-mqtt.cn-shanghai.aliyuncs.com",1883,1
到这一步便能看到设备已经被激活
第九步:订阅设备
订阅设备之后可以接收到阿里云物联网平台发送给单片机的信息。
注:生活物联网和物联网平台的订阅命令有所不同
生活物联网:
AT+MQTTSUB=0,"topic",1
例如: AT+MQTTSUB=0,"/sys/a1IJcdV6AvN/test/thing/service/property/set",1
物联网:
AT+MQTTSUB=0,"topic",1
例如: AT+MQTTSUB=0,"/sys/a1IJcdV6AvN/test/thing/service/property/get",1
首先我在平台上选择调试设备,并设置开关功能,发送指令之后,单片机便会接收到来自平台的信息。
也可以通过手机app进行设置。
第十步:设备发布信息
注:生活物联网和物联网平台的发布命令有所不同
生活物联网:
AT+MQTTPUB=0,"topic","上报的json数据",1,0
例如:AT+MQTTPUB=0,"/sys/a1IJcdV6AvN/test/thing/event/property/post","上报的json数据",1,0
物联网:
AT+MQTTPUB=0,"topic","上报的json数据",1,0
例如:AT+MQTTPUB=0,"/sys/a1IJcdV6AvN/test/thing/event/property/update","上报的json数据",1,0
我在单片机中设置当单片机收到信息之后会回传相同消息从而让平台接收到,其中{"method":"thing.service.property,.post","id":"99119635","params":{"DoorSwitch":0,"temp":23.5,"mess":"false"},"version": 1.0.0"}为json数据,"DoorSwitch","temp","mess"为单片机发布的参数。
2.3wifi模块通过单片机与生活物联网平台连接
将esp8266-01s的RXD、TXD、3.3V、GND分别与单片机的TXD、RXD、3.3V、GND相连,通过串口通信实现wifi模块与阿里云生活物联网\物联网平台的通信并实现对单片机引脚功能的控制。本项目通过控制舵机的转变来模拟开门的动作。
首先是对ESP8266进行配置
void ESP8266_StaTcpClient_Unvarnish_ConfigTest(void)
{
printf("初始化esp8266....\r\n");
ESP8266_Cmd ( "AT+RESTORE", "OK", "NULL", 10000 );
printf("复位esp8266....\r\n");
ESP8266_Cmd ( "AT+RST", "OK", "NULL", 10000 );
printf( "\r\n正在配置 ESP8266 ......\r\n" );
printf( "\r\n使能 ESP8266 ......\r\n" );
macESP8266_CH_ENABLE();
while( ! ESP8266_AT_Test() );
printf( "\r\n正在配置工作模式 STA ......\r\n" );
while( ! ESP8266_Net_Mode_Choose ( STA ) );
printf( "\r\n正在连接 WiFi ......\r\n" );
while( ! ESP8266_JoinAP ( macUser_ESP8266_ApSsid, macUser_ESP8266_ApPwd ) )
{
connect_flag=0;
}
}
其中的macUser_ESP8266_ApSsid和macUser_ESP8266_ApPwd在头文件中更改
其次对MQTT进行配置
void MQTT_Connect(void){
printf("初始化MQTT....\r\n");
printf("正在配置SNTP服务器...\r\n");
while(!MQTT_SNTP(aliyun_SNTP));
printf("正在配对产品账号与密码.....\r\n");
while(!MQTT_USER(aliyun_username,aliyun_passwd));
printf("正在配对产品CLIENTID....\r\n");
while(!MQTT_CLIENTID(aliyun_clientId));
printf("正在连接MQTT Broker.....\r\n");
while(!MQTT_CONN(aliyun_mqttHostUrl,aliyun_port));
printf("正在订阅设备topic....\r\n");
while(!MQTT_SUB(aliyun_device_topic_get)){
connect_flag=0;}
connect_flag=1;
}
3. 配套代码
其中包括生活物联网,物联网平台和一部分野火官方的代码例程。
gitee:https://gitee.com/jianghaoliang/alibaba-cloud-life-iot