【新增esp8266设备订阅命令主题、响应平台命令、命令处理】esp8266接入华为云物联网平台(IOTDA)2.0
esp8266接入华为云物联网平台(IOTDA)2.0
【最新版本的PubSubClient库无法正常连接,请使用PubSubClient2.7.0,或安装资源文件夹内的库文件】
第0章 简介
之前带大家实现了利用Arduino和esp8266系列完成设备接入华为云物联网平台(IOTDA)并完成设备属性上报。最近收到很多小伙伴的私信,咨询平台下发命令的接收与处理,本期就带大家实现一下,具体的产品和设备的创建就不在这里重复讲了,大家参考之前的文章。
【教你如何使用esp8266接入华为云物联网平台】教你如何使用esp8266接入华为云物联网平台(IOTDA)(Arduino IDE开发)_IoT物联网_华为云论坛
【华为云IOT的Android应用开发【详细教程】】华为云IOT的Android应用开发【详细教程】_IoT物联网_华为云论坛
本期最终效果:
第1章 整体流程概述
1. 平台命令下发
2. 设备接收命令
3. 设备返回平台命令响应
4. 设备命令处理
第2章 具体详细步骤
一、 MQTT测试
老样子,这里我们还是先用MQTT.fx进行测试,然后再写Arduino程序
1. 平台命令下发
(1) 查看相关文档:平台命令下发_设备接入 IoTDA_API参考_设备侧MQTT/MQTTS接口参考_设备命令_华为云
官方提供的文章中,我们首先需要清楚的是,平台下发命令后,需要设备及时将命令的执行结果返回给平台,如果设备没回响应,平台会认为命令执行超时,
(2) 相关topic
下行(平台到设备的命令下发): $oc/devices/{device_id}/sys/commands/request_id={request_id}
上行(设备到平台的命令响应):$oc/devices/{device_id}/sys/commands/response/request_id={request_id}
(3) 命令下发测试
首先我们先在MQTT.fx中订阅命令主题:$oc/devices/{device_id}/sys/commands/request_id={request_id}
产品服务及命令参数设置
然后再华为云IOTDA的监控运维平台进行调试
然后我们进入MQTT.fx查看
命令接收到之后,我们需要进行设备响应平台的命令,不然平台会认为命令并没有有效下发
2. 设备的响应
(1) Topic: $oc/devices/{device_id}/sys/commands/response/request_id={request_id}
需要注意的是其中的{request_id}用于唯一标识这次请求,设备侧收到下行请求的topic带该参数时,上行响应的topic需要将该参数值返回给平台,我们在接收命令时,收到了{request_id},那么上报时是需要修改topic,带上对应的{request_id}。
由上图可知,这次命令的request_id=07fc7c27-7812-446c-8e67-6e4bb1ed9fd9
那么我们现在topic:$oc/devices/{device_id}/sys/commands/response/request_id=07fc7c27-7812-446c-8e67-6e4bb1ed9fd9
(2) 响应参数
由于都是可选,我们直接用一个空的json数据,大家根据自己需求调整
(3) MQTT.fx完成响应
由于平台等待的时间比较短,大家要及时的完成响应
2、 Anrdoid编程
(1)、 硬件准备:任意esp8266的模块,我用的是esp01s
(2)、 程序编写
MQTT连接和属性上报的程序大家参考之前的帖子,这里直接讲命令的接收处理与响应
首先我们需要在初始化时设置回调函数,用于及时接收命令
client.setCallback(callback);
回调函数;void callback(char* topic, byte* payload, unsigned int length){}
简单的回调函数可以这么写:
void callback(char* topic, byte* payload, unsigned int length)
{String recdata="";Serial.printf("接收到订阅的消息:主题为:");Serial.println(topic);Serial.printf("数据内容:");for(int i=0;i<length;i++){recdata+=(char)payload;}Serial.println(recdata);
}
运行后我们可以得到带request id的topic,和收到的命令json数据串,然后我们解析出我们需要的信息我们在回调函数中补充:
//解析JSON数据DynamicJsonDocument jsonBuffer(1024);deserializeJson(jsonBuffer,recdata);JsonObject obj = jsonBuffer.as<JsonObject>();String com = obj["paras"];Serial.printf("解析命令:");Serial.println(com);deserializeJson(jsonBuffer,com);obj = jsonBuffer.as<JsonObject>();String ledcom = obj["led"];Serial.printf("解析LED命令:");Serial.println(ledcom);
命令解析后,我们还要对平台进行命令响应,以便平台知道我们的设备收到了数据,由于我们的命令下发是包含request id,我们先提取request id然后加到我们的上行topic中,然后我们再在回调函数中补充:
//解析request id,设备响应时的topic需要包含命令的request id,且会动态变化char *p=topic;String request_id="";int i=0;while((*p++)!='\0')//获取topic长度{i++;}topic+=(i-36); //移动指针位置for(int j=i-36;j<i;j++)//末36位为request idrequest_id+=*topic++;Serial.println("request_id:"+request_id);Serial.println("同步命令设备响应。。。);String param="{}";//设备命令响应client.publish((Iot_link_MQTT_Topic_CommandsRes+request_id).c_str(),param.c_str());
接下来我们就可以对命令进行处理了,在回调函数中最后补充一下
//处理指令if(ledcom=="0"){digitalWrite(LEDPIN,HIGH); //LED低电平触发,高电平熄灭Serial.println("关灯");}else if(ledcom=="1"){digitalWrite(LEDPIN,LOW); //LED低电平触发,高电平熄灭Serial.println("开灯");}
运行一下,我们查看串口数据:
由于之前已经带着大家完成了软件设计,这里我们也可以通过APP控制,如下图:
上述操作已经可以帮助大家完成本期的任务了,大家需要上述程序的项目全部源码,可以关注公众号“IOT趣制作”,回复关键字“华为云物联网”即可
【新增esp8266设备订阅命令主题、响应平台命令、命令处理】esp8266接入华为云物联网平台(IOTDA)2.0相关推荐
- stm32+AT指令+ESP8266接入华为云物联网平台并完成属性上报与命令响应
(示例:stm32f103c8t6+esp01s串口AT指令模式) 流程简介: 一. MQTT透传AT固件烧录 本期教程使用的是stm32+AT指令控制esp01s接入华为云联网平台完成数据上报与命令 ...
- 合宙Air780e+luatos接入华为云物联网平台完成设备通信与控制
一.简介 1.项目介绍 之前发布的文章有esp8266的wifi模块和BC20的NB模块与华为云物联网通信为主,本期文章采用了合宙的4G LTE Cat.1模块,编程语言用的是lua,整体来说代码比较 ...
- 教你如何使用esp8266接入华为云物联网平台(IOTDA)(Arduino IDE开发)
教你如何使用esp8266接入华为云物联网平台(IOTDA)(Arduino IDE开发) 一.简介 esp8266系列作为低功耗高性价比的嵌入式无线网络控制模块,深受对嵌入式感兴趣的 ...
- ESP8266通过AT指令接入华为云物联网平台
1. esp8266 MQTT固件烧录 在先前如果使用Arduino开发过后的esp8266可能已经无法使用AT指令,或者出厂固件不支持全部的MQTT功能,这里我们首先对esp8266进行MQTT固件 ...
- HI3861学习笔记(25)——接入华为云物联网平台IoT
一.平台简介 设备接入服务(IoTDA) 是华为云的物联网平台,提供海量设备连接上云.设备和云端双向消息通信.批量设备管理.远程控制和监控.OTA升级.设备联动规则等能力,并可将设备数据灵活流转到华为 ...
- STM32 标准库+ESP8266+华为云物联网平台
文章内容: STM32标准库通过串口发送AT指令完成与ESP8266的控制实现接入华为云物联网平台,并完成基本通信与控制,包括设备属性上报和命令下发解析与响应,并将相关代码打包成HuaweiIOT_a ...
- STM32 HAL库+ESP8266+华为云物联网平台
文章内容: STM32 HAL库通过串口发送AT指令完成与ESP8266的控制实现接入华为云物联网平台,并完成基本通信与控制,包括设备属性上报和命令下发解析与响应. 文末获取"STM32 H ...
- 华为云物联网平台创建产品与设备(含MQTT.fx测试)
一. 创建产品.注册设备.添加属性 1. 创建产品 点击进入:华为云物联网平台控制台 2.注册设备 此时可获取设备ID和密钥: device id:"61fb2d7fde9933029be5 ...
- 【物联网】华为云物联网平台-基于C示例代码的快速体验
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 创建产品 04. 注册设备 05. C语言工程下载 06. 编译OpenSSL库 07. 编译paho库 08. 编译C参 ...
- 华为云物联网平台微信小程序开发教程2.0【完整详细教程】
一.简介 在之前曾发布过一篇文章"华为云物联网平台的微信小程序开发",在最近接到部分用户私信在使用开发过程中出现的问题,例如API访问的"401"现象等问题 ...
最新文章
- 开源模式反击之后,白嫖服务商竟然大叫“你不讲武德!”
- jmeter测试soap协议时候 路径不需要添加
- Linux下对SVN的相关操作命令
- 新一代人工智能发展规划_助力人工智能创新发展,新华三任合肥市新一代人工智能产业发展联盟理事单位...
- innerHTML、innerText和outerHTML、outerText的区别
- 最近弄了个新的技术公众号,欢迎大家关注
- CentOS卸载自带的JDK
- PAT乙级题解目录——更新ing
- python——import日常学习记录
- java 根据身份证计算年龄(周岁)
- VMware张海宁: 如何实现高效安全的镜像运维?
- Mysql 按当天、当月、上月及按日期范围查询 DATE_FORMAT( date, ‘%Y%m‘ )
- android 随机昵称,按键安卓版随机起名代码
- 埃默里大学有计算机专业吗,埃默里大学计算机专业怎么样?
- Python实现行业轮动量化选股【附完整源码】
- 练习记录-用FSL工具对DTI数据进行FDT预处理
- LayUI时间线优化
- 无法启动此程序,因为计算机中丢失MSVCRTD.dll(MFC42D.dll, MFCO42D.dll)
- 2018全国普通高校学科竞赛排行榜发布
- 加密网站地址——从根本解决盗连