1. 准备工作:OneNET平台配置与设备创建
在开始ESP8266/ESP32接入OneNET之前,我们需要先在OneNET平台上完成基础配置。这个过程其实就像给设备办一张"身份证",让平台能够识别和管理你的设备。
首先打开OneNET官网完成注册登录,进入控制台后找到"多协议接入"选项。这里要特别注意选择MQTT(旧版)协议,因为新版协议可能会有一些兼容性问题。创建产品时,产品名称可以按实际项目命名,比如"智能温湿度监测系统"。行业类别根据实际应用选择,技术参数中联网方式选Wi-Fi,数据格式选JSON,这样后续数据传输会更方便。
创建完产品后,系统会生成两个关键信息:产品ID和Master-APIkey。这两个参数相当于产品的"身份证号"和"钥匙",一定要妥善保管。我建议立即把这些信息记录在项目的文档中,因为后续设备连接和token生成都需要用到它们。
接下来需要添加具体设备。点击进入刚创建的产品,选择"设备列表"→"添加设备"。设备名称可以自定义,但最好有明确标识,比如"living-room-sensor"。鉴权信息就填写刚才记录的Master-APIkey,数据保密性选择私有。这里有个小技巧:可以在设备描述中详细记录设备的部署位置和用途,这样以后设备多了也容易管理。
完成设备添加后,平台会为每个设备分配唯一的设备名称。现在你的设备在平台上就有了独立的"身份",接下来就可以开始硬件端的连接配置了。整个准备过程大概需要10分钟左右,虽然步骤看起来多,但实际操作起来都很简单。
2. 硬件连接与开发环境搭建
现在我们来搭建ESP8266/ESP32的开发环境。以ESP32为例,我推荐使用Arduino IDE进行开发,因为它对初学者最友好,库支持也很完善。
首先安装Arduino IDE,然后通过开发板管理器安装ESP32支持包。在文件→首选项→附加开发板管理器网址中填入:https://dl.espressif.com/dl/package_esp32_index.json,然后在工具→开发板→开发板管理器中搜索并安装ESP32平台。安装完成后,在开发板选项中选择对应的ESP32型号,比如我常用的是"ESP32 Dev Module"。
硬件连接方面,ESP32开发板通过Micro USB线连接电脑即可。如果使用的是裸ESP8266模块,还需要USB转TTL模块进行串口连接。接线时注意VCC要接3.3V,千万不要接5V,否则会烧坏模块。我在早期项目中就犯过这个错误,损失了好几个模块,这都是血的教训啊。
接下来安装必要的库文件。在项目→加载库→管理库中搜索并安装PubSubClient库,这个库是实现MQTT通信的核心。同时建议安装ArduinoJson库,因为OneNET平台的数据传输大多采用JSON格式。
为了测试温湿度传感器,我们还需要连接DHT11传感器。将传感器的VCC接3.3V,GND接GND,数据线接GPIO4(可以根据实际需要选择其他引脚)。在代码中要包含DHT库,并通过dht.begin()初始化传感器。
开发环境搭建完成后,建议先上传一个简单的Blink程序测试硬件是否正常工作。如果LED能正常闪烁,说明硬件连接和开发环境都没有问题,可以开始编写MQTT连接代码了。这个过程可能会遇到驱动安装问题,特别是CH340芯片的驱动,如果在设备管理器中看到未知设备,需要手动安装对应的USB转串口驱动。
3. MQTT连接配置与Token生成
MQTT连接OneNET平台最关键的步骤就是生成正确的连接参数,特别是Token的计算。很多初学者在这里容易踩坑,我来详细讲解一下具体做法。
首先需要明确连接参数:服务器地址是183.230.40.96,端口号1883(非加密)或8883(SSL加密)。Client ID直接使用设备名称,Username使用产品ID。最复杂的是Password字段,需要生成特定的Token。
Token生成有两种方式:使用官方在线工具或者自己编写Python脚本。我推荐使用Python脚本方式,因为这样更灵活,可以集成到自动化脚本中。官方提供的Token生成算法基于HMAC-SHA1签名,需要以下参数:产品ID、设备名称、访问密钥(Access Key)和时间戳。
这里有个重要细节:时间戳必须大于当前时间,表示Token的有效期截止时间。我建议设置为当前时间加上足够长的时间,比如24小时(86400秒),避免频繁重新连接。但是不要设置得太长,最长不能超过一年,否则平台会拒绝连接。
下面是我修改优化后的Python生成脚本:
import base64
import hmac
import time
from urllib.parse import quote
def gen

168

被折叠的 条评论
为什么被折叠?



