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

第二章 基于新版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.xdnf.cn/news/15390.html

相关文章:

  • elementPlus中的el-table实现合并单元格
  • MMKV 存储json list数据(kotlin)
  • 《Linux篇》自动化构建-make/Makefile
  • 自动润滑系统:从 “盲目养护“ 到智能精注的工业运维革命
  • MMaDA:多模态大型扩散语言模型
  • 动态规划题解_将一个数字表示成幂的和的方案数【LeetCode】
  • 互斥锁详解(操作系统os)
  • BERT系列模型
  • 前端工程化-构建打包
  • Flink数据流高效写入MySQL实战
  • Actor-Critic重要性采样原理
  • 九、官方人格提示词汇总(上)
  • 构造函数延伸应用
  • 数据结构 Map和Set
  • 一些git命令
  • SQL预编译:安全高效数据库操作的关键
  • Linux操作系统之信号概念启程
  • 【读书笔记】《C++ Software Design》第七章:Bridge、Prototype 与 External Polymorphism
  • IPC框架
  • [2025CVPR]GNN-ViTCap:用于病理图像分类与描述模型
  • 晋升指南-笔记
  • 【Docker基础】Dockerfile指令速览:环境与元数据指令详解
  • React强大且灵活hooks库——ahooks入门实践之状态管理类hook(state)详解
  • 【C++】多线程同步三剑客介绍
  • AutoLabor-ROS-Python 学习记录——第一章 ROS概述与环境搭建
  • leetGPU解题笔记(1)
  • STM32-第六节-TIM定时器-2(输出比较)
  • 【芯片笔记】ADF4159
  • 【论文阅读】AdaptThink: Reasoning Models Can Learn When to Think
  • 【Java Stream】基本用法学习