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相关推荐

  1. stm32+AT指令+ESP8266接入华为云物联网平台并完成属性上报与命令响应

    (示例:stm32f103c8t6+esp01s串口AT指令模式) 流程简介: 一. MQTT透传AT固件烧录 本期教程使用的是stm32+AT指令控制esp01s接入华为云联网平台完成数据上报与命令 ...

  2. 合宙Air780e+luatos接入华为云物联网平台完成设备通信与控制

    一.简介 1.项目介绍 之前发布的文章有esp8266的wifi模块和BC20的NB模块与华为云物联网通信为主,本期文章采用了合宙的4G LTE Cat.1模块,编程语言用的是lua,整体来说代码比较 ...

  3. 教你如何使用esp8266接入华为云物联网平台(IOTDA)(Arduino IDE开发)

    教你如何使用esp8266接入华为云物联网平台(IOTDA)(Arduino IDE开发) 一.简介         esp8266系列作为低功耗高性价比的嵌入式无线网络控制模块,深受对嵌入式感兴趣的 ...

  4. ESP8266通过AT指令接入华为云物联网平台

    1. esp8266 MQTT固件烧录 在先前如果使用Arduino开发过后的esp8266可能已经无法使用AT指令,或者出厂固件不支持全部的MQTT功能,这里我们首先对esp8266进行MQTT固件 ...

  5. HI3861学习笔记(25)——接入华为云物联网平台IoT

    一.平台简介 设备接入服务(IoTDA) 是华为云的物联网平台,提供海量设备连接上云.设备和云端双向消息通信.批量设备管理.远程控制和监控.OTA升级.设备联动规则等能力,并可将设备数据灵活流转到华为 ...

  6. STM32 标准库+ESP8266+华为云物联网平台

    文章内容: STM32标准库通过串口发送AT指令完成与ESP8266的控制实现接入华为云物联网平台,并完成基本通信与控制,包括设备属性上报和命令下发解析与响应,并将相关代码打包成HuaweiIOT_a ...

  7. STM32 HAL库+ESP8266+华为云物联网平台

    文章内容: STM32 HAL库通过串口发送AT指令完成与ESP8266的控制实现接入华为云物联网平台,并完成基本通信与控制,包括设备属性上报和命令下发解析与响应. 文末获取"STM32 H ...

  8. 华为云物联网平台创建产品与设备(含MQTT.fx测试)

    一. 创建产品.注册设备.添加属性 1. 创建产品 点击进入:华为云物联网平台控制台 2.注册设备 此时可获取设备ID和密钥: device id:"61fb2d7fde9933029be5 ...

  9. 【物联网】华为云物联网平台-基于C示例代码的快速体验

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 创建产品 04. 注册设备 05. C语言工程下载 06. 编译OpenSSL库 07. 编译paho库 08. 编译C参 ...

  10. 华为云物联网平台微信小程序开发教程2.0【完整详细教程】

    一.简介   在之前曾发布过一篇文章"华为云物联网平台的微信小程序开发",在最近接到部分用户私信在使用开发过程中出现的问题,例如API访问的"401"现象等问题 ...

最新文章

  1. 开源模式反击之后,白嫖服务商竟然大叫“你不讲武德!”
  2. jmeter测试soap协议时候 路径不需要添加
  3. Linux下对SVN的相关操作命令
  4. 新一代人工智能发展规划_助力人工智能创新发展,新华三任合肥市新一代人工智能产业发展联盟理事单位...
  5. innerHTML、innerText和outerHTML、outerText的区别
  6. 最近弄了个新的技术公众号,欢迎大家关注
  7. CentOS卸载自带的JDK
  8. PAT乙级题解目录——更新ing
  9. python——import日常学习记录
  10. java 根据身份证计算年龄(周岁)
  11. VMware张海宁: 如何实现高效安全的镜像运维?
  12. Mysql 按当天、当月、上月及按日期范围查询 DATE_FORMAT( date, ‘%Y%m‘ )
  13. android 随机昵称,按键安卓版随机起名代码
  14. 埃默里大学有计算机专业吗,埃默里大学计算机专业怎么样?
  15. Python实现行业轮动量化选股【附完整源码】
  16. 练习记录-用FSL工具对DTI数据进行FDT预处理
  17. LayUI时间线优化
  18. 无法启动此程序,因为计算机中丢失MSVCRTD.dll(MFC42D.dll, MFCO42D.dll)
  19. 2018全国普通高校学科竞赛排行榜发布
  20. 加密网站地址——从根本解决盗连

热门文章

  1. Java+MySQL 基于ssm的宠物商店领养管理系统#毕业设计
  2. Latex绘制三线表
  3. 小白如何自学成为产品经理?
  4. 和秋叶一起学PPT之绘制表格(课时七)
  5. 盘片式过滤器是盘式过滤器吗?
  6. SMA2.92高频连接器的主要特点​
  7. YYKit源码学习——YYMemoryCache
  8. DM7 达梦 数据库 数据守护(Data Watch) -- 实时主备环境搭建
  9. Windows上使用 OpenOCD 给 STM32 下载程序
  10. SQL Server迁移数据库文件(ldfmdf文件)到其他盘