概述
概述:
前两篇章已经把esp8266通信部分调试完成,此篇章着力于通过MQTT协议连接阿里云物联网平台。
开篇:STM32F767igt6 + RT-Thread + ESP8266
第二篇:STM32F767igt6 + RT-Thread + ESP8266
本篇张代码:代码地址
1.阿里云平台:
1.1 初识阿里云物联网平台:
阿里云物联网平台提供了一站式的设备接入、设备管理、监控运维、数据流转、数据存储等服务。常见的物联网平台有腾讯云、中国移动的OneNET、原子云等。
初次使用阿里云平台时,首先需要注册一个自己的账号,可以直接使用某宝账号登录;
1.2 创建产品实例:
登录后,进入到物联网控制台创建实例产品和设备,具体操作步骤请移步到产品文档中,里面有详细的介绍;
创建好产品设备之后,MQTT连接参数是我们后面软件开发需要用到的信息;
自定义topic主题,权限为订阅、发布,软件测试需用到。
以上的步骤处理完后,由于还没有写测试软件,可以先使用MQTT.fx测试接入,按操作文档指引操作,说的很详细。按照自己创建的产品设备信息填好即可连接上,连接上后,设备状态会跳变成在线状态。
1.3 定义物模型:
产品创建完成后,可以自定义一个物模型,用于建立设备与物模型的通信连接,物模型创建步骤;这里我创建了一个数据上报的物模型,其中温度的属性,标识符后面需要用到。
1.4 设备模拟器调试:
使用设备模拟器进行上、下行数据的调试,使用模拟器的前提是 产品创建时设置的数据格式是ICA 标准数据格式(Alink JSON),透传格式不可以使用模拟器调试。
模块选择自定义创建的“数据上报”,然后设置发布卧室温度的值,发布成功后跳转查看云端日志,查看发布的具体内容,后面编写软件使用AT+MQTTPUB发布数据时就按照该内容的格式发送即可。
2.esp8266模块:
2.1 烧录MQTT固件:
这里使用的是ESP8266系列,到安信可固件下载对应的AT固件即可,我们需要的是带MQTT协议的固件,相应的固件版本有使用说明,方便查看AT指令,一定要看说明,不同版本有些指令参数是不同的。
详细烧录步骤不做说明,烧录完成之后,可以先使用串口调试助手测试AT指令是否正常,以确保固件烧录成功。
特别说明下,开发中完成的每一个步骤都去测试一下正确性、可行性,别全部问题堆到一起最后再测试,到时一头雾水,很难找到问题点。
2.2 MQTT协议初识:
目前,MQTT协议最新版本为5.0版,MQTT协议广泛应用于物联网、移动互联网、智能硬件、车联网、电力能源等领域;由于esp模块烧录了MQTT协议固件,所以对MQTT协议细节部分可以不用特别去了解,会使用AT指令就行;作为常用通信协议多去熟悉也是不亏的,这里附上MQTT协议中文链接。
2.3 编写软件连接阿里云:
由于之前调通了esp8266通信部分,现在直接使用AT指令配置即可。
①AT+CWMODE 配置模块的工作模式,不要配置成AP模式即可,需要能连接WiFi上网;
②AT+RST 配置模式后一般需要重启模块;
③AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com" 开启SNTP服务器,8时域,SNTP服务器为阿里云域名;
④AT+CWJAP 连接WiFi;
⑤AT+MQTTUSERCFG 配置用户参数,指令参数如下
⑥AT+MQTTCONNCFG 配置连接参数,参数如下
⑧连接上后即可进行发布、订阅了。
/************************************************
* Fuction:MQTT取消订阅topic
* *********************************************/
void mqtt_unsub_topic(char * Topic)
{
char *pt = (char *)rt_malloc(100);
sprintf(pt, "AT+MQTTUNSUB=0,"%s"",Topic);
esp8266_at_cmd_send(pt, "OK" , 100);
if(pt != RT_NULL){
rt_free((void *)pt);
}
}
/************************************************
* Fuction:MQTT发布topic
* *********************************************/
void mqtt_publish_topic(char * Topic ,char * Data)
{
char *pt = (char *)rt_malloc(164);
sprintf(pt,"AT+MQTTPUB=0,"%s","{\"id\":135789\,\"params\":{\"aliyun_qmttdata:RoomTemp\":%s}\,%s\,%s}",1,0",Topic,Data,VERSION,METHOD);
esp8266_at_cmd_send(pt, "OK" , 300);
if(pt != RT_NULL){
rt_free((void *)pt);
}
}
3. 编译测试:
3.1 测试概述:
f7水星版中有三个按键,这里创建一个按键线程,控制KEY_UP进行MQTT的连接与断开,KEY_0进行发布Topic数据,KEY_1进行订阅Topic。
如下代码为按键处理函数逻辑:
#ifdef MQTT_THREAD
if(key_pin == KEY_UP){
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0) == GPIO_PIN_SET){
mqtt_connect_aliyun(HOST_URL,PORT,CLIENT_ID,USER_NAME,PASSWORD);
LED_0(0);
}
else{
mqtt_close_connect();
LED_0(1);
}
}
else if(key_pin == KEY_0){
mqtt_publish_topic(PUB_TOPIC,"21.7");
}
else if(key_pin == KEY_1){
mqtt_sub_topic(SUB_TOPIC);
}
key_pin = 0 ;
#endif
3.2 测试结果:
阿里云中开启在线调试,设备端按KEY_UP按键连接上阿里云后,按KEY_0键发布数据,然后使用在线调试功能获取相应模块的数据,验证成功。
结束语:
本系列篇章,重在记录从0到1实现设备与云端的通信的过程,其中还有很多细节的问题不够完善,希望这些能给新手读者带来帮助。
最后
以上就是悦耳盼望为你收集整理的完结篇:STM32与阿里云平台梦幻联动概述:1.阿里云平台:2.esp8266模块:3. 编译测试:结束语:的全部内容,希望文章能够帮你解决完结篇:STM32与阿里云平台梦幻联动概述:1.阿里云平台:2.esp8266模块:3. 编译测试:结束语:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复