当前位置: 首页 > news >正文

第二章 基于新版Onenet搭建云服务(stm32物联网)

        本文将展开叙述如何在新版Onenet平台创建产品和添加设备,为后续通过esp8266发送信息给云端进行通信做好准备

        相关资料下载大家可以到【Freertos实战】零基础制作基于stm32的物联网温湿度检测(教程非常简易)中进行下载

1.云平台的搭建

        添加产品

        首先进入网站并登录:OneNET - 中国移动物联网开放平台


        填写完各内容后,选择确定

        添加设备

        记录设备参数


        记录下所需的参数,这是连接Onenet云平台服务的身份证

产品ID:  PtAFXPCG49
设备ID:  DB01
设备密匙:SnVod1ZQWmZwejNxxxxxxxxxxxx

        添加数据流模板

        创建湿度模板

        创建LED模板

        创建温度模板

        记录下这三个物理模型的标识符,这个很重要

                    湿度    Humi灯光    LED温度    Temp

        添加完毕

不了解MQTT协议的可以看看我这篇文章:MQTT协议

2.Token三元组生成

        在创建通信报文前,我们需要通过Token工具将产品ID、设备ID、设备密钥三参数加入时间戳后生成三元组,这是我们能否建立通信的关键。

        et时间戳获取        

        我们在计算Token之前需要获取时间戳,et时间戳计算网址:https://tool.lu/timestamp/

        Token三元组计算

               打开在专栏序章下载的资料,并打开Token生成工具

产品ID:PtAFXPCG49
设备ID:DB01
设备密钥:SnVod1ZQWmZwejNRSUR2ekJkSUgzSnJTSnJwd1ZHTVE=
Token:version=2018-10-31&res=products%2FPtAFXPCG49%2Fdevices
%2FDB01&et=1756260513&method=sha1&sign=TcuMb4Vdl%2FQiGc6AkEceJHmt2pI%3D

3.esp8266通信报文数据流

1.AT
2.AT+RST
3.AT+CWMODE=1
4.AT+CWDHCP=1,1
5.AT+CWJAP="CMCC-yr24","4fy@brba"6.AT+MQTTUSERCFG=0,1,"DB01","PtAFXPCG49","version=2018-10-31&res=products%2FPtAFXPCG49%2Fdevices%2FDB01&et=1756260513&method=sha1&sign=TcuMb4Vdl%2FQiGc6AkEceJHmt2pI%3D",0,0,""7.AT+MQTTCONN=0,"mqtts.heclouds.com",1883,1
AT+MQTTSUB=0,"$sys/PtAFXPCG49/DB01/thing/property/post/reply",0
AT+MQTTSUB=0,"$sys/PtAFXPCG49/DB01/thing/property/set",0
AT+MQTTPUB=0,"$sys/PtAFXPCG49/DB01/thing/property/post","{\"id\":\"123\"\,\"params\":{\"Temp\":{\"value\":16\}\,\"Humi\":{\"value\":66\}}}",0,0
或
AT+MQTTPUBRAW=0,"$sys/PtAFXPCG49/DB01/thing/property/post",65,0,0
{"id":"123","params":{"Temp":{"value":33},"Humi":{"value":58}}}返回信息
AT+MQTTPUB=0,"$sys/PtAFXPCG49/DB01/thing/property/set_reply","{\"id\":\"28\"\,\"code\": 200\,\"msg\":\"success\"}",0,08.AT+MQTTCONN?//确认MQTT的连接状态9.AT+MQTTCLEAN=0//断开MQTT连接10.AT+MQTTPUB=0,"$sys/PtAFXPCG49/DB01/thing/property/post","{\"id\":\"123\"\,\"params\":{\"LED\":{\"value\":true\}}}",0,0
AT+MQTTPUB=0,"$sys/PtAFXPCG49/DB01/thing/property/post","{\"id\":\"123\"\,\"params\":{\"LED\":{\"value\":false\}}}",0,0

通信测试

AT

  • 作用:测试 ESP8266 模块是否正常响应(AT 指令交互的 “心跳测试”)。
  • 预期返回OK(表示模块工作正常,可接收后续指令)。

AT+RST

  • 作用:复位 ESP8266 模块,恢复初始状态(清除临时配置,重启模块)。
  • 预期返回:模块重启信息(如ready),表示复位完成。

WiFi 网络配置

AT+CWMODE=1

  • 作用:设置 ESP8266 的 WiFi 模式为 “Station 模式”(即 “客户端模式”)。
    • 1:Station 模式(模块作为客户端,连接外部路由器 / AP);
    • 其他模式:2(AP 模式,模块自身作为热点)、3(AP+Station 混合模式)。

AT+CWDHCP=1,1

  • 作用:开启 Station 模式下的 DHCP 功能(自动获取 IP 地址)。
    • 第一个1:指定对 “Station 模式” 配置 DHCP;
    • 第二个1:开启 DHCP(0为关闭)。
  • 目的:模块连接 WiFi 后无需手动配置 IP,自动从路由器获取。

AT+CWJAP="CMCC-yr24","4fy@brba"

  • 作用:连接指定 WiFi 网络。
    • 参数 1:"CMCC-yr24"(WiFi 的 SSID,即网络名称);
    • 参数 2:"4fy@brba"(WiFi 的密码)。
  • 预期返回WIFI CONNECTED(连接成功)→ WIFI GOT IP(获取 IP 成功)→ OK

MQTT 连接配置(对接中移物联网平台)

AT+MQTTUSERCFG=0,1,"DB01","PtAFXPCG49","version=2018-10-31&res=products%2FPtAFXPCG49%2Fdevices%2FDB01&et=1756260513&method=sha1&sign=TcuMb4Vdl%2FQiGc6AkEceJHmt2pI%3D",0,0,""

  • 作用:配置 MQTT 连接的用户认证信息(适配中移物联网平台的设备认证机制)。
    • 参数解析:
      • 0:MQTT 连接索引(ESP8266 支持多连接,这里用索引0表示第一个连接);
      • 1:认证方式(1为用户名 + 密码认证);
      • "DB01":客户端 ID(MQTT 连接的设备唯一标识,需与平台注册一致);
      • "PtAFXPCG49":用户名(平台设备的产品 ID);
      • 长字符串:密码(平台生成的签名,包含过期时间et、加密方法method等,用于身份验证);
      • 后续0,0,"":禁用遗嘱消息(Will Message)配置(物联网场景中通常不需要)。

AT+MQTTCONN=0,"mqtts.heclouds.com",1883,1

  • 作用:建立与 MQTT 服务器的连接。
    • 参数解析:
      • 0:连接索引(与步骤 6 的0对应);
      • "mqtts.heclouds.com":中移物联网平台的 MQTT 服务器域名;
      • 1883:MQTT 协议默认端口(非加密端口,加密端口为 8883);
      • 1:Clean Session 标志(1表示服务器不保存客户端离线消息,0则保存)。
  • 预期返回MQTTCONN:0,00,0表示连接成功,第一个0为索引,第二个0为错误码)。

MQTT 主题订阅(接收平台指令)

AT+MQTTSUB=0,"$sys/PtAFXPCG49/DB01/thing/property/post/reply",0

  • 作用:订阅 “属性上报回复” 主题(接收平台对设备上报数据的响应)。
    • 参数解析:
      • 0:连接索引;
      • 主题:"$sys/PtAFXPCG49/DB01/thing/property/post/reply"(中移平台的系统主题格式):
        • $sys:平台系统主题前缀;
        • PtAFXPCG49:产品 ID;
        • DB01:设备 ID;
        • thing/property/post/reply:属性上报的回复类型;
      • 0:订阅的 QoS 等级(0表示 “最多一次”,消息不保证到达)。

AT+MQTTSUB=0,"$sys/PtAFXPCG49/DB01/thing/property/set",0

  • 作用:订阅 “属性设置” 主题(接收平台下发的控制指令,如远程控制 LED 开关)。
    • 主题含义:$sys/产品ID/设备ID/thing/property/set是平台向设备下发属性控制指令的标准主题(例如:控制设备的 LED、电机等);
    • 0:QoS 等级(同上)。

MQTT 消息发布(设备上报数据 / 响应指令)

        上报温湿度数据(AT+MQTTPUB

AT+MQTTPUB=0,"$sys/PtAFXPCG49/DB01/thing/property/post","{\"id\":\"123\"\,\"params\":{\"Temp\":{\"value\":16\}\,\"Humi\":{\"value\":66\}}}",0,0

  • 作用:向平台上报温湿度属性数据。
    • 参数解析:
      • 0:连接索引;
      • 主题:"$sys/PtAFXPCG49/DB01/thing/property/post"(设备属性上报的标准主题);
      • 消息内容:{"id":"123","params":{"Temp":{"value":16},"Humi":{"value":66}}}(JSON 格式,符合平台属性上报协议):
        • "id":"123":消息 ID(用于匹配回复,需唯一);
        • "params":属性参数集合;
        • "Temp":{"value":16}:温度属性,值为 16℃;
        • "Humi":{"value":66}:湿度属性,值为 66%;
      • 指令中的\是转义符(ESP8266 AT 指令中,双引号"和逗号需用\转义,否则会被解析为指令分隔符);
      • 0:QoS 等级(最多一次,不保证到达);
      • 0:Retained 标志(0表示服务器不保留该消息)。

        原始数据发布(AT+MQTTPUBRAW

AT+MQTTPUBRAW=0,"$sys/PtAFXPCG49/DB01/thing/property/post",65,0,0
{"id":"123","params":{"Temp":{"value":33},"Humi":{"value":58}}}

  • 作用:与AT+MQTTPUB功能相同,但发布 “原始数据”(无需转义符,更高效)。
    • 参数解析:
      • 65:消息长度(字节数,需与后续 JSON 字符串的实际长度一致);
      • 后续行:原始 JSON 数据(无需转义,直接发送)。

平台回复与设备响应

        平台回复示例

AT+MQTTPUB=0,"$sys/PtAFXPCG49/DB01/thing/property/set_reply","{\"id\":\"28\"\,\"code\": 200\,\"msg\":\"success\"}",0,0

  • 含义:设备向平台回复 “属性设置指令” 的处理结果(例如,平台下发控制 LED 的指令,设备执行后回复成功)。
    • 消息内容:{"id":"28","code":200,"msg":"success"}
      • "id":"28":匹配平台下发指令的 ID;
      • "code":200:状态码(200 表示处理成功);
      • "msg":"success":描述信息。

MQTT 连接管理

        查询连接状态

AT+MQTTCONN?

  • 作用:查询当前 MQTT 连接状态。
  • 预期返回:如MQTTCONN:0,10为连接索引,1表示已连接;0表示未连接)。

        断开连接

AT+MQTTCLEAN=0

  • 作用:断开索引为0的 MQTT 连接,并清理会话(服务器删除该设备的临时数据)。

扩展:控制类属性上报

AT+MQTTPUB=0,"$sys/PtAFXPCG49/DB01/thing/property/post","{\"id\":\"123\"\,\"params\":{\"LED\":{\"value\":true\}}}",0,0

  • 作用:向平台上报 LED 的状态(true表示打开,false表示关闭),或接收平台控制指令后反馈执行结果。

http://www.dtcms.com/a/279946.html

相关文章:

  • PyTorch中torch.topk()详解:快速获取最大值索引
  • @Resource 注解的空值处理(默认行为与容器实现)
  • 冲刺阶段项目进度压力大,如何组织高效冲刺
  • 大屏搭建多个图表不自适应问题
  • H264编码结构和解析
  • 第四章 uniapp实现兼容多端的树状族谱关系图,剩余组件
  • ESP32 OTA升级详解:使用Arduino OTA库实现无线固件更新
  • HTML 文本格式化标签
  • java--ThreadLocal创建以及get源码解析
  • http常见状态码
  • 苦练Python第18天:Python异常处理锦囊
  • 【论文阅读】Masked Autoencoders Are Effective Tokenizers for Diffusion Models
  • rsyslog简单应用
  • STM32F769I-DISCO 串口调试
  • Linux上基于C/C++头文件查找对应的依赖开发库
  • SAP B1认证资料-题目
  • 分布式系统中实现临时节点授权的高可用性与一致性
  • 哈希扩展 --- 海量数据处理
  • CISSP知识点汇总- 通信与网络安全
  • 15.Python 列表元素的偏移
  • Java学习————————ThreadLocal
  • python Gui界面小白入门学习二
  • python高阶调试技巧,替代print
  • 14.推荐使用 dict.get(key) 而不是 dict[key]
  • redis配置(Xshell连接centos7的基础上)
  • Modbus 开发工具实战:ModScan32 与 Wireshark 抓包分析(一
  • Python `WeakValueDictionary` 用法详解
  • 调用 System.runFinalizersOnExit() 的风险与解决方法
  • C语言基础5——控制语句2(循环)
  • TypeScript枚举类型应用:前后端状态码映射的最简方案