开启辅助访问 切换到窄版

登录  | 立即注册

游客您好!登录后享受更多精彩

查看: 24|回复: 1

利用esp8266发送数据到onenet云平台教程

[复制链接]

1

主题

3

回帖

50

积分

[Lv.3]强能力者

积分
50
发表于 2025-10-19 15:34:24 | 显示全部楼层 |阅读模式
大家在用单片机做一些项目的时候,各类传感器肯定是常用的模块。那么如何处理传感器获得的数据呢?把他们上传到云平台是不错的选择。在这篇帖子我将分享一下利用stm32驱动esp8266wifi模块把传感器数据发送到onenet云平台的教程

一、onenet云平台的准备工作
打开https://iot.10086.cn/,注册一个账号




在首页右上角,进入控制台




选择控制台左侧的产品开发一栏,再点击右侧的创建产品



按图示方式设置(产品品类、名称、地点无所谓)



在右侧操作一栏选择产品开发



选择设置物模型



添加自定义功能点



如此设置(标识符是关键信息,之后会用到)



回到这里,选择设备管理



点击添加设备



输入设备名称(也是会用到的关键信息)



选择右侧操作一栏的详情



这里的产品id和设备密钥是关键信息,可以复制到文档中,便于使用
二、token的获取
想连上onenet,还需要生成一个“token”,相当于密码
在文末的压缩包中,有一个名为pass的文件,用python打开


在末尾把username和accesskey分别替换为之前获得的产品id和设备密钥,运行后获得token
注:产品id、设备名称、token是连接的三要素
三、简单了解一下背景知识
1、AT指令集介绍


AT指令是一种文本序列,用于控制调制解调器、手机等通讯设备。“AT"代表"Attention”,其后跟随的文字指定要执行的命令。
在ESP8266等模块中,AT指令用于设定模块参数、控制网络连接和其他功能。
以下是一些常用的AT指令示例:

AT:检测通信模块与控制端之间的连接。

AT+RST:重置模块。
AT+CWMODE:设置Wi-Fi工作模式(例如Station模式、AP模式)。
AT+CWJAP:连接Wi-Fi网络。
AT指令集的优势在于其简单性,使得开发者能够不必深入微控制器的复杂编程,就能够快速实现无线通信的基本功能。
2、MQTT协议介绍


在本项目中,esp8266通过mqtt协议与云平台建立连接
MQTT(Message Queuing Telemetry Transport) 是一个轻量级的、基于发布/订阅模型的消息协议,专为低带宽和不稳定网络环境设计,广泛用于物联网设备之间的通信。在MQTT中,设备可以作为 发布者 发送消息,或者作为 订阅者 接收特定主题(Topic)的消息。这个模型允许多个设备共享特定的数据点并响应相应的变化。MQTT设备使用这一协议,通过轻量级的消息交换,实现设备间的有效通讯和数据传输。
3、固件烧录

简单来说,esp8266需要固件才能读懂AT指令。在文末的压缩包也中有烧录工具和两个固件,分别为wifi和mqtt的。烧录方法就先不介绍了。
四、连接
建议在把esp8266连到stm32之前,先用串口调试助手测试一下,以便于知道问题出在哪
打开串口调试助手,发送以下指令

1、AT
这个指令是用来测试串口通信是否畅通的最基本指令。发送AT应该返回OK,代表通信没有问题。
2、AT+CWMODE=1
该指令用于设置ESP8266的Wi-Fi工作模式。CWMODE=1将模块设置为Station模式(STA模式),这意味着模块可以连到一个已存在的Wi-Fi网络。

3、AT+CWJAP="<SSID>","<PASS>"

该指令用于连接wifi,SSID是wifi名称,PASS是密码,自行替换(和电脑连同一个)
4、AT+MQTTUSERCFG=0,1,"<设备名称>","<产品id>","<token>",0,0,""
这个指令用于配置MQTT客户端的用户参数。参数0指的是客户端ID,1为MQTT版本,中间三个参数分别是设备名称、产品ID、Token,改为自己的,最后的两个0表示是否清理会话和是否启用遗嘱消息。

5、AT+MQTTCONN=0,"mqtts.heclouds.com",1883,1
此指令用于发起到MQTT服务器的连接。参数0是客户端ID,"mqtts.heclouds.com"是MQTT服务器地址,1883是服务器端口号,最后的1表示启用清理会话。

6、AT+MQTTSUB=0,"$sys/<产品id>/<设备名称>/thing/property/post/reply",0
指令用于订阅MQTT主题,向MQTT服务器表明客户端想要接收与该主题相关的消息。


【MQTT通信的发布和订阅简单的理解:通俗易懂地讲,MQTT就像是一个邮局,而主题(Topic)好比是邮局里的个人邮箱。
发布(Publish):
想象你有一些信息想要告诉别人,你就把这个信息放进邮局的一个特定的邮箱(主题)里。
订阅(Subscribe):
如果有人想知道这个特定的信息,他们就可以告诉邮局,他们对这个邮箱(主题)感兴趣。这样,每当有新信息放入这个邮箱时,邮局就会把它送给那些订阅了这个邮箱的人。】

7、AT+MQTTPUB=0,"$sys/<产品id>/<设备名称>/thing/property/post","{\"id\":\"123\"\,\"params\":{\"<标识符>\":{\"value\":数值\}}}",0,0
通过此指令将消息发布到MQTT主题。0是客户端ID,"$sys/<产品id>/<设备名称>/thing/property/post"是要发布消息的主题。紧接着的是要发布的消息内容,其中标识符要与之前设置的一样,0,0分别表示消息的QoS等级和是否保留消息。

注意:消息内容要严格遵守固定的格式,否则会发送失败


如果一切顺利,设备详情页的属性一栏会显示发送的数值

五、一些关键的程序
在此只介绍一些关键的函数,完整的stm32驱动esp8266(HAL库)的代码大家可以参考b站up主“水手勇敢”


这是一个用于通过 UART(串口)向 ESP 系列模块发送命令并等待指定响应的函数

cmd是要发送的指令,resp是期望收到的响应(一般是OK),timeout是超时时间,HAL_UART_Transmit函数可通过串口向esp8266发送一个字符串(AT指令),下面一坨是指在timeout时间内,检查接收缓冲区是否包含目标响应,若找到响应,返回成功。
然后就能用此函数发送AT指令







这是将消息内容发布到onenet的函数,就是调用SendCommand函数发送指令,比较容易理解。但需要注意的是,字符串需要用双引号包裹,这条指令内又含双引号,就需要把內部的双引号用\转义,此外单个\也需要转义,这就意味着原指令中的\"要改为\\\",单个\或"改为\\和\"(再提醒一下消息格式:"{\"id\":\"123\"\,\"params\":{\"<标识符>\":{\"value\":数值\}}}"



通过网盘分享的文件:要用到的工具(1).zip
链接: https://pan.baidu.com/s/19L-VBkKgmL64_i5DFR-k-A 提取码: b8qy



(新人第一次发帖,如有不足希望各位批评指正)


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

12

主题

24

回帖

148

积分

版主

积分
148

甘地

发表于 2025-10-20 22:11:10 来自手机 | 显示全部楼层
好帖,够详细
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|电信科协官网

GMT+8, 2025-10-31 21:36 , Processed in 0.123175 second(s), 21 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表