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
相关推荐
Geek-Chow9 小时前
05.1 · AWS Lambda 版本(Version)详解:$LATEST、不可变快照与限定 ARN
云计算
IT规划师15 小时前
MQTT实战 - MQTT vs HTTP:为什么你的物联网项目上线就崩?(二)
物联网·mqtt·.net core·http文件
衡石科技15 小时前
衡石 BI PaaS:面向 Agent 的分析底座
云原生·云计算·paas
找方案16 小时前
数字乡镇综合解决方案:从“1+2+3+4”顶层架构到落地建设,一文看懂乡村振兴的数字化打法
物联网·数字化转型·乡村振兴·数字乡镇·智慧乡镇
听说66616 小时前
信息安全工程师 - 第二十三章 云计算安全需求分析与安全保护工程
网络·安全·web安全·网络安全·云计算·系统安全
AI直播技术杂谈17 小时前
无人直播中控的硬件底线,旧电脑要满足哪些条件
网络·python·ai·云计算
黄聪的笔记本18 小时前
阿里云香港服务器Workbench远程连接,没法SSH连接,22端口安全组已经放开
服务器·安全·阿里云
OH_TPC18 小时前
【鸿蒙优选三方库】@ohos/coap:让鸿蒙设备说上 IoT 的母语
物联网·华为·harmonyos·鸿蒙
霖霖71418 小时前
【ESP32笔记】蓝牙BLE连接与广播
笔记·单片机·mcu·物联网
霖霖71419 小时前
【ESP32笔记】SmartConfig一键配网
笔记·单片机·mcu·物联网