NodeMCU (ESP8266) + MQTT 上阿里云IOT (二)

上一篇是理论与流程梳理,这一篇是实操。

阿里云-计算,为了无法计算的价值

一 阿里云配置

点击进入阿里云平台官网,登录帐号,找到"物联网平台",点进去然后点击管理控制台第一次用会让你开通物联网平台,然后点击开通,进去之后点击 同意协议,然后点击立即开通。

(我是之前就开通的,现在开通不知道是否需要付费)点击"公共实例",找到"设备管理" ---点击"产品"--"创建产品"

点击"产品" "查看" 我们刚刚创建的 "测试a",点击Topic类列表,点击"自定义Topic",然后点击"定义Topic主题"

二 上云

  • 回到设备页面,可以看到设备的主题已经有了刚刚自定义定义的topic,权限是可订阅与可发布。
  • 在创建完成后,可以通过MQTT软件来测试一下能否正常连接,在这一步之前必须已在物联网平台控制台中创建产品和设备,并获取设备证书信息(ProductKey、DeviceName和DeviceSerect)。
  • 先打开"阿里云物联平台配置_32.exe"工具,按下图填写,工具会自动计算链接阿里云的必要参数。

还记得我们上一篇文章吗,我们使用AT指令配置esp8266设备上云。

先将wifi设置成sta模式,连接到WiFi网络。

cpp 复制代码
AT+CWMODE=1    //设置 WiFi为STA模式

AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"
//配置 SNTP 网络时间同步,阿里云 MQTT 登录签名强依赖时间戳,模块本地时间不准会直接鉴权失败、连不上服务器。开启时间同步保证设备时间和阿里云服务器一致。
//第 1 位 1:开启 SNTP 时间同步(0 = 关闭)
//第 2 位 8:时区 UTC+8(北京时间,国内固定填 8)
//第 3 位 "ntp1.aliyun.com":阿里云 NTP 时间服务器地址

AT+CWJAP="WiFi名","WiFi密码"

AT+MQTTUSERCFG=0,1,"NULL","用户名","密码",0,0,""   //作用:给模块配置登录阿里云 MQTT 服务器的账号密码,是鉴权关键。
//1.LinkID:ESP8266 MQTT 连接通道编号,模块默认只支持 1 路 MQTT,固定填 0。
//2.clean_session:清除会话标识:1= 断连后清空会话、离线消息;家用 / 测试场景固定填 1。
//3."NULL":MQTT 协议层面的客户端名称,阿里云直连模式下此字段无用,统一填 NULL。
//4."用户名":阿里云 MQTT 生成的 Username(工具算出的那串账号,必填,不能乱填)
//5."密码": 阿里云 MQTT 签名后的 Password(工具算出的加密密码,核心鉴权字段)
//6.will_flag:关闭遗嘱消息(设备离线上报消息,测试可关闭)
//7.will_qos:遗嘱消息 QoS 等级,关闭遗嘱时无效
//8."":遗嘱主题,关闭遗嘱时填空字符串
//举例:AT+MQTTUSERCFG=0,1,"NULL","LIGHT1&k1morxU8ru9","84BA3F1D24D6D5691459A1E3D8071CDB2B1EF6ED",0,0,""
//工具计算的"Username"和"Password",,按格式改动即可


AT+MQTTCLIENTID=0,"ClienId"//设置 MQTT ClientID(客户端唯一 ID)
//1.LinkID = 0:和上面保持一致,MQTT 通道 0
//2."ClienId":阿里云规则拼接后的完整 ClientID,阿里云标准 ClientID 格式示例:设备名|securemode=3\,signmethod=hmacsha1\,timestamp=xxx|clientId第二个参数注意每个逗号后加分隔符"\",例如:t|securemode=3\,signmethod=hmacsha1\,
//举例:AT+MQTTCLIENTID=0,"123456MA|securemode=3\,signmethod=hmacsha1\,timestamp=1780062000|"
//工具计算的"ClientId",按格式改动即可

AT+MQTTCONN=0,"a1Py84SEWWJ.iot-as-mqtt.cn-shanghai.aliyuncs.com",1883,1  //到这一步:云端设备状态会从「未激活」变为「在线 / 已激活」
//0.  0:MQTT 通道 ID
//1.  "a1Py84SEWWJ.iot-as-mqtt.cn-shanghai.aliyuncs.com":阿里云MQTT服务器域名(从工具复制)
//2.  1883:端口号,1883 = 普通 TCP 直连(你当前使用的模式),8883 = TLS 加密端口
//3.  1:reconn=1 → 开启自动重连,网络断开后模块自动重试连接服务器。
//举例:AT+MQTTCONN=0,"k1morxU8ru9.iot-as-mqtt.cn-shanghai.aliyuncs.com",1883,1
//工具计算的"连接域名",按格式改动即可



AT+MQTTSUB=0,"订阅的主题",1    //订阅的主题可在云端设备的"自定义Topic列表"复制进去
//1. MQTT 通道 ID
//2. "订阅的主题":阿里云平台自定义 Topic / 设备默认 Topic(必须和云端完全一致,建议复制)
//3. QoS 消息等级(0/1/2,测试常用 0 或 1)
//举例:AT+MQTTSUB=0,"/k1morxU8ru9/测试a/user/topicTest",1
//将Topic的设备名,如"测试a"替换成自己的即可。

三 测试

然后再找到"设备LIGHT1",点击--LIGHT1--查看

发布消息:ni hao 2026

串口收到相应数据

那么我们想设备上报数据(发布)到云,可以

cpp 复制代码
AT+MQTTPUB=0,"/k1morxU8ru9/LIGHT1/user/topicTest","2026test",0,0

可以看到

可以在阿里云的日志服务中看到,设备到云的信息 和 云到设备的信息 都是2026test,这是因为我们的主题是订阅与发布,因此串口中接收了两次。实际使用中可以分开,做到上传和下发走不同的通道。

这里放一下完整的串口数据

cpp 复制代码
[14:15:28.079]发→◇AT+CWMODE=1
□
[14:15:28.084]收←◆AT+CWMODE=1

OK

[14:15:38.462]发→◇AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"
□
[14:15:38.470]收←◆AT+CIPSNTPCFG=1,8,"ntp1.aliyun.com"

OK

[14:15:53.183]发→◇AT+CWJAP="你的wifi名","你的wifi密码"
□
[14:15:53.190]收←◆AT+CWJAP="你的wifi名","你的wifi密码"
WIFI DISCONNECT

[14:15:54.536]收←◆WIFI CONNECTED

[14:15:55.193]收←◆WIFI GOT IP

OK

[14:16:12.956]发→◇AT+MQTTUSERCFG=0,1,"NULL","LIGHT1&k1morxU8ru9","84BA3F1D24D6D5691459A1E3D8071CDB2B1EF6ED",0,0,""
□
[14:16:12.963]收←◆AT+MQTTUSERCFG=0,1,"NULL","LIGHT1&k1morxU8ru9","84BA3F1D24D6D5691459A1E3D8071CDB2B1EF6ED",0,0,""

OK

[14:20:37.689]发→◇AT+MQTTCLIENTID=0,"123456MA|securemode=3\,signmethod=hmacsha1\,timestamp=1780062000|"
□
[14:20:37.698]收←◆AT+MQTTCLIENTID=0,"123456MA|securemode=3\,signmethod=hmacsha1\,timestamp=1780062000|"

OK

[14:30:12.777]发→◇AT+MQTTCONN=0,"k1morxU8ru9.iot-as-mqtt.cn-shanghai.aliyuncs.com",1883,1
□
[14:30:12.786]收←◆AT+MQTTCONN=0,"k1morxU8ru9.iot-as-mqtt.cn-shanghai.aliyuncs.com",1883,1

[14:30:15.360]收←◆+MQTTCONNECTED:0,1,"k1morxU8ru9.iot-as-mqtt.cn-shanghai.aliyuncs.com","1883","",1

OK

[14:33:05.247]发→◇AT+MQTTSUB=0,"/k1morxU8ru9/测试a/user/topicTest",1
□
[14:33:05.255]收←◆AT+MQTTSUB=0,"/k1morxU8ru9/测试a/user/topicTest",1

[14:33:05.293]收←◆
OK

[14:38:07.000]收←◆+MQTTSUBRECV:0,"/k1morxU8ru9/LIGHT1/user/topicTest",12,ni hao 2026 

[15:05:47.136]发→◇AT+MQTTPUB=0,"/k1morxU8ru9/LIGHT1/user/topicTest","2026test",0,0

OK
□
[15:05:47.144]收←◆AT+MQTTPUB=0,"/k1morxU8ru9/LIGHT1/user/topicTest","2026test",0,0

busy p...

OK

[15:05:47.494]收←◆+MQTTSUBRECV:0,"/k1morxU8ru9/LIGHT1/user/topicTest",8,2026test
相关推荐
JNX_SEMI1 小时前
Hi9101降压DC-DC转换器:100V耐压内置3A MOS,恒压恒流,外围简洁
单片机·嵌入式硬件·物联网·硬件工程
Tellmeulovewho1 小时前
阿里云Linux云服务器部署Python项目——从零到生产环境的完整实战指南
linux·服务器·阿里云
小白起 v1 小时前
从零搭建一个现代化的验证码登录系统:Spring Boot + 阿里云短信实战教程
java·阿里云
夏天的味道٥2 小时前
Spring-AI 多模型接入实战:本地 deepseek + 阿里云百炼 + 硅基流动
人工智能·spring·阿里云
阿酷tony2 小时前
阿里云播放器API和酷播云播放器PI
阿里云·云计算·酷播云播放器
器灵科技2 小时前
DeepSeek V4 Pro宣称:超GPT-5.5+永久降价75%
大数据·人工智能·gpt·阿里云·ai·语言模型
红信鸽2 小时前
5G-A+边缘计算:低延迟应用爆发的真正推手
云计算
sbjdhjd3 小时前
企业级 Tomcat (上):WEB 技术栈 + 架构演进 + 生产级安装部署
linux·运维·云原生·开源·tomcat·云计算·负载均衡
云服务器代理商3 小时前
腾讯云香港服务器选择指南:延迟优势、配置价格与开通思路
服务器·云计算·腾讯云·腾讯云服务器·香港节点·腾讯云国际·腾讯云海外