赞
踩
笔者在这先简单介绍一下自己的整个系统,以好让各位朋友能够快速了解这篇文章对自己是否有帮助。
通过MQTT协议(笔者是直接给ESP01S刷了MQTT的AT固件,这种方法简单方便)将采集到的光照、设备电量和开锁信息上传到OneNET平台(这个过程就是向云平台你所创建设备发布主题),并且也要订阅云平台你所创建设备的主题,这样你的STM32才能收到云平台下发的指令。
视频教程可参考:新版onenet利用stm32+esp8266接入指南 笔者这部分也是参考这位老师的,她这个接入的视频教程没有问题,她这个系列还有其它的视频,有部分采用的是http协议的并且是老版OneNET,但其思想是相通的可借鉴。
注意: 她的微信小程序连接云平台的教程和云平台下发指令的教程,实践有问题,我会在后续部分详细说明。云平台创建设备,和数据上云参考此up,微信小程序连接云平台和指令下发建议参考下面博主的教程。
文本教程 可参考下面这位博主的文章,
1.使用新版OneNET创建MQTT设备远程控制单片机,OneNET创建设备,我是跟着上面up做的,但这个文章看后感觉没有问题。
2.ESP8266-01s入门:AT指令讲解、上云与MQTT通信教程,AT指令部分很详细。
3.使用微信小程序和OneNET平台MQTT实现51/STM32单片机远程智能控制和数据通信教程 ,他这个教程里ESP8266指令接收与处理ESP8266_ReceiveCmd() 函数我在实践时有问题,后续在相应部分会详细说明。
4.通过微信小程序获取oneNET设备数据教程,这部分我也是参考了上面up和这位博主的教程,实践发现up的教程有点小问题主要是获取和推送所用的API方面在新版不适用,,这里用到的API都可以OneNET的官方文档和API调试页面找到。小程序效果如下图。
/** * @brief 初始化ESP8266 * @param 无 * @retval 无 */ void ESP8266_Init(void) { ESP8266_Clear(); delay_xms(100); /* 确认AT命令可以正确发送并得到响应 */ printf("0. AT\r\n"); while (ESP8266_SendCmd("AT\r\n", "OK")) delay_xms(100); /* 重启ESP8266 */ printf("1. AT+RST\r\n"); while (ESP8266_SendCmd("AT+RST\r\n", "")) delay_xms(100); /* 设置Wi-Fi模式 */ printf("2. CWMODE 设置Wi-Fi模式\r\n"); while (ESP8266_SendCmd("AT+CWMODE=1\r\n", "OK")) delay_xms(100); /* 打开DHCP */ printf("3. AT+CWDHCP 打开DHCP\r\n"); while (ESP8266_SendCmd("AT+CWDHCP=1,1\r\n", "OK")) delay_xms(100); /* 配置Wi-Fi连接 */ printf("4. CWJAP 配置Wi-Fi连接\r\n"); while (ESP8266_SendCmd(ESP8266_WIFI_INFO, "GOT IP")) delay_xms(100); /* 设置MQTT登录用户信息 */ printf("5. MQTTUSERCFG 设置MQTT登录用户信息\r\n"); while (ESP8266_SendCmd(ESP8266_USERCFG_INFO, "OK")) delay_xms(100); /* 发起向指定MQTT服务器的连接 */ printf("6. MQTTCONN 发起向指定MQTT服务器的连接\r\n"); while (ESP8266_SendCmd(ESP8266_ONENET_INFO, "OK")) delay_xms(100); /* 订阅指定的MQTT主题 */ printf("7. MQTTSUB 订阅指定Topic\r\n"); while (ESP8266_SendCmd("AT+MQTTSUB=0,\"$sys/78peC*h6uT/l*ck/thing/property/set\",0\r\n", "OK")) delay_xms(100); printf("7. ESP8266 Init OK\r\n"); }
/** * @brief 从JSON字符串中提取出指定键的值 * @param *buffer 包含JSON的字符串 * @param *key 指定查找的键值 * @param *value 储存查找的键值 * @param valueMaxLen 变量缓冲区的最大长度 * @retval 无 */ void extractJsonValue(const char *buffer, const char *key, char *value, size_t valueMaxLen) { const char *jsonStart, *jsonEnd, *keyStart, *keyValueEnd; size_t keyValueLength; size_t keyLength = strlen(key); char keyPattern[20]; /* 预留足够的空间存储 key 和查找格式串 */ sprintf(keyPattern, "\"%s\"", key); /* 构建查找模式串,即 "key": */ /* 查找JSON字符串的开头 */ jsonStart = strchr(buffer, '{'); if (jsonStart == NULL) return; /* 查找JSON字符串的结尾 */ jsonEnd = strrchr(jsonStart, '}'); if (jsonEnd == NULL) return; /* 查找键 */ keyStart = strstr(jsonStart, keyPattern); if (keyStart == NULL) return; /* 查找键值的结束 括号 ,确定键值的结束位置 */ keyValueEnd = strchr(keyStart, '}'); if (keyValueEnd == NULL || keyValueEnd > jsonEnd) return; /* 根据键值的起始和结束位置,计算键值的长度 */ keyValueLength = keyValueEnd - keyStart; /* 拷贝键值到value缓冲区中 */ if (keyValueLength < valueMaxLen) { strncpy(value, keyStart, keyValueLength); value[keyValueLength] = '\0'; /* 添加字符串终止字符\0 */ } else { /* 如果提供的缓冲区不够大,那么可以根据实际情况处理,这里简单地截断字符串 */ strncpy(value, keyStart, valueMaxLen - 1); value[valueMaxLen - 1] = '\0'; /* 添加字符串终止字符\0 */ } }
/* 获取OneNET云平台设备数据 */ get_info() { /* 发起 HTTPS 网络请求 获取设备参数 */ wx.request({ /* 网址、产品ID、设备名 */ url: "https://iot-api.heclouds.com/thingmodel/query-device-property?product_id=78pevkh6uT&device_name=lck", header: { /* 用户鉴权信息 */ "authorization": "你的鉴权信息" }, method: "GET", /* HTTP 请求方法:获取 */ success: res => { // console.log("获取成功", res) this.setData({ LockState: res.data.data[0].value, battery_state: res.data.data[1].value, sunlight: res.data.data[3].value, }) // console.log("LockState:", this.data.LockState) // console.log("battery_state:", this.data.battery_state) // console.log("sunlight:", this.data.sunlight) } });
// 以下数据和URL应根据实际情况进行修改 wx.request({ url: 'https://iot-api.heclouds.com/thingmodel/set-device-desired-property', method: 'POST', header: { /* 用户鉴权信息 */ "authorization": "鉴权信息" }, data: { "product_id": "产品ID", "device_name": "设备名称", "params": { "属性标识符": 1 /* 使用传入的ledValue设置LED的状态 */ } }, success: res =>{ console.log("成功",res) } });
如果有问题可以在评论区进行交流、讨论。
OneNET物联网开放平台是中国移动打造的面向产业互联和智慧生活应用的物联网PaaS平台,OneNET支持适配各种网络环境和协议类型,可实现各种传感器和智能硬件的快速接入,提供丰富的API和应用模板以支撑各类行业应用和智能硬件的开发,有效降低物联网应用开发和部署成本,满足物联网领域设备连接、智能化改造、协议适配、数据存储、数据安全以及大数据分析等等平台级服务需求。
MQTT(Message Queuing Telemetry Transport) 是一个轻量级的、基于客户端/服务器的消息发布/订阅的传输协议,专为低带宽和不稳定网络环境设计,广泛用于物联网设备之间的通信。
在MQTT中,设备可以作为发布者发送消息,或者作为订阅者接收特定主题(Topic)的消息。这个模型允许多个设备共享特定的数据点并响应相应的变化。
MQTT设备使用这一协议,通过轻量级的消息交换,实现设备间的有效通讯和数据传输。
MQTT设备与HTTP设备在连接OneNET云平台时使用的协议不同,各自有着不同的特点和适用场景。以下是两者的主要区别:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。