NodeMCU第一次接入阿里物联网记录贴
本帖最后由 ws9528 于 2019-8-1 17:52 编辑此文献给小白中的小白。
阿里物联网接入教程在这里:https://help.aliyun.com/document_detail/104070.html?spm=5176.11065259.1996646101.searchclickresult.67405095dOx5Tz
所用硬件:NodeMCU 我购买的地址是:https://detail.tmall.com/item.htm?id=535433433157&spm=a1z09.2.0.0.1c722e8dBFt81y&_u=v2krn7s5755
所用软件: android IDE 1.8.9 下载地址:https://dl.google.com/dl/android/studio/install/3.4.1.0/android-studio-ide-183.5522156-windows.exe
实验目的:通过 NodeMCU 接入阿里物联网平台来控制NodeMCU上的蓝色LED灯打开或关闭 这个蓝色的LED灯用的引脚是D4
根据这个教程,前4步,所有同学应当没有任何问题。
第五步这里在 Arduino IDE 里面调试编译的时候就会有很多问题。我现在正在研究,先解决了这个问题。
把教程里的代码复制到Arduino IDE 进行编译的时候会出现提示缺少下面两个库,我已经给出了下载地址,成功解决这个问题
/* 依赖 PubSubClient 2.4.0 */
#include <PubSubClient.h> //█████ 注意添加引用这个库文件 库在IDE库里找
/* 依赖 ArduinoJson 5.13.4 */
#include <ArduinoJson.h> //█████ 注意添加引用这个库文件 库在IDE库里找
现在还有个问题就是
我在编译的时候还会报 'class PubSubClient' has no member named 'setServer'错误 正在联系阿里工程师解决。
这里再给大家提个小技巧如果搞不定就到https://selfservice.console.aliyun.com/ticket/category/iot/today提交人工工单,阿里工程师会帮你处理解决问题的,比在网上乱查,乱问来的准确。
谁能比我白痴? 花了整整一下午时间把 整个代码翻译了一边把重点的地方都有说明。这次应当没有啥问题了吧。
//应用库文件
#include <ESP8266WiFi.h> // 自带库不用安装
#include <PubSubClient.h> // 在项目-》加载库中 查找PubSubClient 向下拉找到 PubSubClient by Nick O`Leary进行安装
#include <ArduinoJson.h> // 在项目-》加载库中 查找ArduinoJson 第一个就是 ArduinoJson by Benoit Blanchon 进行安装
#define LED_PIN D4
/* 修改1 开始------------------------------------------ */
#define WIFI_SSID "HuiKeDianNaoFuWu" // WIFI的名称
#define WIFI_PASSWD "13488214252" // WIFI的密码
/* 修改1 结束------------------------------------------ */
/* 修改2 开始------------------------------------------ */
#define PRODUCT_KEY "a1cBSuDEqL0" // 产品密钥所在位置 阿里云->物联网平台->设备管理->产品->ProductKey
#define DEVICE_NAME "LED_She_Bei" // 设备名称所在位置 阿里云->物联网平台->设备管理->设备->DeviceName/备注名称 下面那个名字
#define DEVICE_SECRET "r0457Kve61oDC5EsbCS0O4iXpWrXA0E0" // 设备密钥所在位置 阿里云->物联网平台->设备管理->设备->查看->右上角 DeviceSecret
#define REGION_ID "cn-shanghai" // 地区ID 不需要修改
/* 修改2 结束------------------------------------------ */
#define MQTT_SERVER PRODUCT_KEY ".iot-as-mqtt." REGION_ID ".aliyuncs.com" // MQTT_服务器
#define MQTT_PORT 1883 // MQTT_端口
#define MQTT_USRNAME DEVICE_NAME "&" PRODUCT_KEY // MQTT_用户名称 这是由 DEVICE_NAME "&" PRODUCT_KEY 这两个参数组成的,这两个参数在上面有。
/* 修改3 ------------------------------------------ */
#define CLIENT_ID "LED_She_Bei|securemode=3,signmethod=hmacsha1,timestamp=1575099760|"
//参数具体说明在这里 https://help.aliyun.com/document_detail/86706.html?spm=a2c4g.11174283.2.44.2b351668mRnKcK
// CLIENT_ID 是由三部分组成的,分别clientIdsecuremodesignmethod
//clientId 为设备的ID信息。可取任意值,长度在64字符以内。建议使用设备的MAC地址或SN码。
//securemode为安全模式,TCP直连模式设置为securemode=3,TLS直连为securemode=2。
//signmethod为算法类型,支持hmacmd5和hmacsha1
#define MQTT_PASSWD "65E493A5E6AABBAF1DAE7EDD6A4C2ACABA08BA66"
//MQTT_PASSWD 是用一个工具算出来的 下载地址为:https://files.alicdn.com/tpsservice/88413c66e471bec826257781969d1bc7.zip?spm=a2c4g.11186623.2.21.70045800E7MImP&file=88413c66e471bec826257781969d1bc7.zip
/* 修改3 end--------------------------------------- */
#define ALINK_BODY_FORMAT "{\"id\":\"123\",\"version\":\"1.0\",\"method\":\"thing.event.property.post\",\"params\":%s}" // 链接体格式
#define ALINK_TOPIC_PROP_POST "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post" // 链接主题文章
unsigned long Zui_Hou_Hao_Miao = 0;// 最后毫秒这个是上次执行动作的时间
WiFiClient espClient; // 实例化 WIFIClient 为 esp客户端
PubSubClientclient(espClient); // 发布一个子客户端 客户端(esp客户端)
void setup() { //██████████████████████████████████████████████
pinMode(LED_PIN,OUTPUT); // 管脚模式(LED管脚,输入);
Serial.begin(115200); // 串口.启动(115200);
Serial.println("演示开始");// 串口.打印(WiFi.本地IP);
Lian_Jie__WIFI(); // 连接_WIFI
}
void loop() { //██████████████████████████████████████████████
//这段代码的作用是:每5秒 检查一下MQTT连接情况 并 上服消息
if (millis() - Zui_Hou_Hao_Miao >= 5000){ // 如果 当前毫秒 减去 最后毫秒 大于等于 5秒
Zui_Hou_Hao_Miao = millis(); // 最后毫秒 等于 当前毫秒
Jian_Cha__MQTT_Lian_Jie(); // 检查_MQTT_连接
Shang_Bao_Xiao_Xi(); // 上报消息
}
client.loop(); // 客户.循环();
//这段代码的作用是:检查引脚当前情况
if (digitalRead(LED_PIN) == HIGH) { // 如果 (数字读取(LED引脚 等于 高)
Serial.println("检测到引脚为 高 电平!"); // 串口.打印(检测到引脚为高电平!);
delay(2000); // 延时(2秒)
} else if (digitalRead(LED_PIN) == LOW) { // 如果 (数字读取(LED引脚 等于 高)
Serial.println("检测到引脚为 低 电平!"); // 串口.打印(检测到引脚为高电平!);
delay(2000); // 延时(2秒)
} else { // 否则
Serial.println("未检测到引脚情况"); // 串口.打印(未检测到引脚情况);
delay(2000); // 延时(2秒)
}
}
void Lian_Jie__WIFI() { // 连接_WIFI
WiFi.mode(WIFI_STA); // WIFI.模式(站点)
WiFi.begin(WIFI_SSID, WIFI_PASSWD); // WiFi.开始(WIFI_名称,WIFI_密码)
while (WiFi.status() != WL_CONNECTED){// 循环判断 (WIFI.状态 不等于 连接)
delay(1000); // 延时(1秒)
Serial.println("WiFi未连接"); // 串口.打印("WiFi未连接");
} // 如果 (WIFI.状态 等于 连接) 则执行下面的语句
Serial.println("连接到AP"); // 串口.打印("连接到AP");
Serial.println("IP地址: "); // 串口.打印("IP地址: ");
Serial.println(WiFi.localIP()); // 串口.打印(WiFi.本地IP);
client.setServer(MQTT_SERVER, MQTT_PORT); // 客户端.设置服务器(MQTT_服务器,MQTT_端口)这两个变量上面有
client.setCallback(Hui_Diao); // 客户端.设置回调(回调)
}
void Jian_Cha__MQTT_Lian_Jie() { // 检查_MQTT_连接
while (!client.connected()) { // 循环判断(不等于 客户端.连接)
Serial.println("正在连接到MQTT服务器。。。"); // 串口.打印("正在连接到MQTT服务器。。。");
if (client.connect(CLIENT_ID, MQTT_USRNAME, MQTT_PASSWD)){// 如果(客户端.连接(客户端ID,MQTT_用户名称,MQTT_密码))//MQTT连接服务器所需要的三个参数具体说明在这里 https://help.aliyun.com/document_detail/86706.html?spm=a2c4g.11174283.2.44.2b351668mRnKcK
Serial.println("MQTT已连接!"); // 串口.打印("MQTT已连接!");
} else { // 否则
Serial.print("MQTT连接错误:"); // 串口.打印("MQTT连接错误:");
Serial.println(client.state()); // 串口.打印(客户端.状态);
delay(5000); // 延时(5秒)
}
}
}
void Hui_Diao(char *topic, byte *payload, unsigned int length) { // 回调
Serial.print("消息已到达 ["); // 串口.打印("消息已到达 [");
Serial.print(topic); // 串口.打印(话题);
Serial.print("] "); // 串口.打印("] ");
payload = '\0'; // 有效载荷[长度] 等于 '\0'
Serial.println((char *)payload); // 串口.打印(有效载荷);
}
void Shang_Bao_Xiao_Xi() { // 上报消息
char param; // 声明一个char变量 名称为 参数 字符数组 长度为32字节 char类型为一个字节 char*是变量,值可以改变, char[]是常量,值不能改变。char[]对应的内存区域总是可写,char*指向的区域有时可写,有时只读
char jsonBuf; // 声明一个char变量 名称为 JSONBUF格式 字符数组 长度为128字节 char类型为一个字节
sprintf(param, "{\"引脚状态\":%d}", digitalRead(LED_PIN)); // 把格式数据写成串(参数,"{\"引脚状态\":%d}",读取引脚(LED_引脚))
sprintf(jsonBuf, ALINK_BODY_FORMAT, param); // 把格式数据写成串(JSONBUF格式,链接体格式,参数)
Serial.println(jsonBuf); // 串口.打印(JSONBUF格式);
boolean d = client.publish(ALINK_TOPIC_PROP_POST, jsonBuf); // 声明一个布尔型变量 名字为 D 等于 客户端.发布(链接主题文章,JSONBUF格式)
Serial.println("出版说明: 0=失败 ; 1=成功"); // 串口.打印("出版:0=失败;1=成功");
Serial.println("出版情况: " + String(d));
} #include <ESP8266WiFi.h>
#include <PubSubClient.h> /* 依赖 PubSubClient 2.4.0 */ //████████加载这个库文件在项目-》加载库中 查找PubSubClient 向下翻一页
#include <ArduinoJson.h> /* 依赖 ArduinoJson 5.13.4 */ //████████加载这个库文件在项目-》加载库中 查找ArduinoJson
#define SENSOR_PIN D4
/* 连接您的WIFI SSID和密码 */
#define WIFI_SSID "HuiKeDianNaoFuWu" //████████这里需要修改
#define WIFI_PASSWD "13488214259" //████████这里需要修改
/* 设备证书信息*/
#define PRODUCT_KEY "a1NXVscyN7F" //████████这里需要修改
#define DEVICE_NAME "NodeMCU_CeShi" //████████这里需要修改
#define DEVICE_SECRET "kZvditUJbrvoWouVjZMO88hcWpwpH1Jx" //████████这里需要修改
#define REGION_ID "cn-shanghai" //████████这里需要修改
/* 线上环境域名和端口号,不需要改 */
#define MQTT_SERVER PRODUCT_KEY ".iot-as-mqtt." REGION_ID ".aliyuncs.com"
#define MQTT_PORT 1883
#define MQTT_USRNAME DEVICE_NAME "&" PRODUCT_KEY //MQTT_用户名
#define CLIENT_ID "ws9528|securemode=3,timestamp=1564888547518,signmethod=hmacsha1|"//客户端的_ID ████████这里需要修改 生成工具在这里http://makertools.cn
#define MQTT_PASSWD "1215415B59497C78C0C0919648D2DA9817853618" //MQTT_密码 ████████这里需要修改
#define ALINK_BODY_FORMAT "{\"id\":\"123\",\"version\":\"1.0\",\"method\":\"thing.event.property.post\",\"params\":%s}"
#define ALINK_TOPIC_PROP_POST "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post"
unsigned long lastMs = 0;//最后一次报告时间
WiFiClient espClient;
PubSubClientclient(espClient);//发布子客户 客户机(ESP客户)
void setup() {
pinMode(SENSOR_PIN,INPUT);
Serial.begin(115200); /*初始化串行以进行调试*/
Serial.println("演示开始");//演示开始
wifiInit();//链接WIFI过程
}
void loop() {
if (millis() - lastMs >= 5000){
lastMs = millis();
mqttCheckConnect(); //mqtt检查连接
mqttIntervalPost(); // 上报消息心跳周期 MQTT间隔岗位 上报消息心跳周期
}
client.loop();//客户端循环
if (digitalRead(SENSOR_PIN) == HIGH) {
Serial.println("高电平检测到运动!");//检测到运动!
delay(2000);
}
else {
Serial.println("低电平没有动作!");//没有动作!
delay(2000);
}
}
void mqttCheckConnect()//MQTT检查连接
{
while (!client.connected()){ //如果客户机没有链接则
Serial.println("正在连接到MQTT服务器…"); //正在连接到MQTT服务器…
if (client.connect(CLIENT_ID, MQTT_USRNAME, MQTT_PASSWD)) { //如果客户端用 客户端_ID MQTT户用名和MQTT密码 连接服务器成功
Serial.println("已连接MQTT!"); //MQTT已连接!
}
else{ //否则显示MQTT连接错误
Serial.print("MQTT连接错误:"); //MQTT连接错误:
Serial.println(client.state()); //显示客户端状态
delay(5000);
}
}
}
void callback(char *topic, byte *payload, unsigned int length)//回拨
{
Serial.print("消息已到达[");
Serial.print(topic);
Serial.print("] ");
payload = '\0';
Serial.println((char *)payload);
}
void mqttIntervalPost(){//上报消息心跳周期 MQTT间隔岗位
char param;
char jsonBuf;
sprintf(param, "{\"idle\":%d}", digitalRead(13)); //把格式数据写成串
sprintf(jsonBuf, ALINK_BODY_FORMAT, param);
Serial.println(jsonBuf);
boolean d = client.publish(ALINK_TOPIC_PROP_POST, jsonBuf);
Serial.print("出版:0 失败;1成功");
Serial.println(d);
}
void wifiInit(){//链接WIFI过程
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWD);
while (WiFi.status() != WL_CONNECTED){
delay(1000);
Serial.println("WiFi未连接");
}
Serial.println("连接到AP");
Serial.println("IP地址: ");
Serial.println(WiFi.localIP());
Serial.print("ESP客户[");
client.setServer(MQTT_SERVER, MQTT_PORT); /* 连接WiFi之后,连接MQTT服务器 */
client.setCallback(callback);
} 用这个代码可以直接连接上阿里云,连接上后在https://iot.console.aliyun.com/这里可以看到连接状态为绿色,连接成功了。
但是如何进行数据交换还没搞明白。如控制台发送指令1 板子这边是接收到了消息,但是针脚好像没有动作,正在研究。有看到的朋友给指导一下。 //应用库文件
#include <ESP8266WiFi.h> // 自带库不用安装
#include <PubSubClient.h> // 在项目-》加载库中 查找PubSubClient 向下拉找到 PubSubClient by Nick O`Leary进行安装
#include <ArduinoJson.h> // 在项目-》加载库中 查找ArduinoJson 第一个就是 ArduinoJson by Benoit Blanchon 进行安装
#define LED_PIN D4
/* 修改1 开始------------------------------------------ */
#define WIFI_SSID "HuiKeDianNaoFuWu" // WIFI的名称
#define WIFI_PASSWD "13488214252" // WIFI的密码
/* 修改1 结束------------------------------------------ */
/* 修改2 开始------------------------------------------ */
#define PRODUCT_KEY "a1cBSuDEqL0" // 产品密钥所在位置 阿里云->物联网平台->设备管理->产品->ProductKey
#define DEVICE_NAME "LED_She_Bei" // 设备名称所在位置 阿里云->物联网平台->设备管理->设备->DeviceName/备注名称 下面那个名字
#define DEVICE_SECRET "r0457Kve61oDC5EsbCS0O4iXpWrXA0E0" // 设备密钥所在位置 阿里云->物联网平台->设备管理->设备->查看->右上角 DeviceSecret
#define REGION_ID "cn-shanghai" // 地区ID 不需要修改
/* 修改2 结束------------------------------------------ */
#define MQTT_SERVER PRODUCT_KEY ".iot-as-mqtt." REGION_ID ".aliyuncs.com" // MQTT_服务器
#define MQTT_PORT 1883 // MQTT_端口
#define MQTT_USRNAME DEVICE_NAME "&" PRODUCT_KEY // MQTT_用户名称 这是由 DEVICE_NAME "&" PRODUCT_KEY 这两个参数组成的,这两个参数在上面有。
/* 修改3 ------------------------------------------ */
#define CLIENT_ID "LED_She_Bei|securemode=3,signmethod=hmacsha1,timestamp=1575099760|"
//参数具体说明在这里 https://help.aliyun.com/document_detail/86706.html?spm=a2c4g.11174283.2.44.2b351668mRnKcK
// CLIENT_ID 是由三部分组成的,分别clientIdsecuremodesignmethod
//clientId 为设备的ID信息。可取任意值,长度在64字符以内。建议使用设备的MAC地址或SN码。
//securemode为安全模式,TCP直连模式设置为securemode=3,TLS直连为securemode=2。
//signmethod为算法类型,支持hmacmd5和hmacsha1
#define MQTT_PASSWD "65E493A5E6AABBAF1DAE7EDD6A4C2ACABA08BA66"
//MQTT_PASSWD 是用一个工具算出来的 下载地址为:https://files.alicdn.com/tpsservice/88413c66e471bec826257781969d1bc7.zip?spm=a2c4g.11186623.2.21.70045800E7MImP&file=88413c66e471bec826257781969d1bc7.zip
/* 修改3 end--------------------------------------- */
#define ALINK_BODY_FORMAT "{\"id\":\"123\",\"version\":\"1.0\",\"method\":\"thing.event.property.post\",\"params\":%s}" // 链接体格式
#define ALINK_TOPIC_PROP_POST "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post" // 链接主题文章
unsigned long Zui_Hou_Hao_Miao = 0;// 最后毫秒这个是上次执行动作的时间
WiFiClient espClient; // 实例化 WIFIClient 为 esp客户端
PubSubClientclient(espClient); // 发布一个子客户端 客户端(esp客户端)
void setup() { //██████████████████████████████████████████████
pinMode(LED_PIN,OUTPUT); // 管脚模式(LED管脚,输入);
Serial.begin(115200); // 串口.启动(115200);
Serial.println("演示开始");// 串口.打印(WiFi.本地IP);
Lian_Jie__WIFI(); // 连接_WIFI
}
void loop() { //██████████████████████████████████████████████
//这段代码的作用是:每5秒 检查一下MQTT连接情况 并 上服消息
if (millis() - Zui_Hou_Hao_Miao >= 5000){ // 如果 当前毫秒 减去 最后毫秒 大于等于 5秒
Zui_Hou_Hao_Miao = millis(); // 最后毫秒 等于 当前毫秒
Jian_Cha__MQTT_Lian_Jie(); // 检查_MQTT_连接
Shang_Bao_Xiao_Xi(); // 上报消息
}
client.loop(); // 客户.循环();
//这段代码的作用是:检查引脚当前情况
if (digitalRead(LED_PIN) == HIGH) { // 如果 (数字读取(LED引脚 等于 高)
Serial.println("检测到引脚为 高 电平!"); // 串口.打印(检测到引脚为高电平!);
delay(2000); // 延时(2秒)
} else if (digitalRead(LED_PIN) == LOW) { // 如果 (数字读取(LED引脚 等于 高)
Serial.println("检测到引脚为 低 电平!"); // 串口.打印(检测到引脚为高电平!);
delay(2000); // 延时(2秒)
} else { // 否则
Serial.println("未检测到引脚情况"); // 串口.打印(未检测到引脚情况);
delay(2000); // 延时(2秒)
}
}
void Lian_Jie__WIFI() { // 连接_WIFI
WiFi.mode(WIFI_STA); // WIFI.模式(站点)
WiFi.begin(WIFI_SSID, WIFI_PASSWD); // WiFi.开始(WIFI_名称,WIFI_密码)
while (WiFi.status() != WL_CONNECTED){// 循环判断 (WIFI.状态 不等于 连接)
delay(1000); // 延时(1秒)
Serial.println("WiFi未连接"); // 串口.打印("WiFi未连接");
} // 如果 (WIFI.状态 等于 连接) 则执行下面的语句
Serial.println("连接到AP"); // 串口.打印("连接到AP");
Serial.println("IP地址: "); // 串口.打印("IP地址: ");
Serial.println(WiFi.localIP()); // 串口.打印(WiFi.本地IP);
client.setServer(MQTT_SERVER, MQTT_PORT); // 客户端.设置服务器(MQTT_服务器,MQTT_端口)这两个变量上面有
client.setCallback(Hui_Diao); // 客户端.设置回调(回调)
}
void Jian_Cha__MQTT_Lian_Jie() { // 检查_MQTT_连接
while (!client.connected()) { // 循环判断(不等于 客户端.连接)
Serial.println("正在连接到MQTT服务器。。。"); // 串口.打印("正在连接到MQTT服务器。。。");
if (client.connect(CLIENT_ID, MQTT_USRNAME, MQTT_PASSWD)){// 如果(客户端.连接(客户端ID,MQTT_用户名称,MQTT_密码))//MQTT连接服务器所需要的三个参数具体说明在这里 https://help.aliyun.com/document_detail/86706.html?spm=a2c4g.11174283.2.44.2b351668mRnKcK
Serial.println("MQTT已连接!"); // 串口.打印("MQTT已连接!");
} else { // 否则
Serial.print("MQTT连接错误:"); // 串口.打印("MQTT连接错误:");
Serial.println(client.state()); // 串口.打印(客户端.状态);
delay(5000); // 延时(5秒)
}
}
}
void Hui_Diao(char *topic, byte *payload, unsigned int length) { // 回调
Serial.print("消息已到达 ["); // 串口.打印("消息已到达 [");
Serial.print(topic); // 串口.打印(话题);
Serial.print("] "); // 串口.打印("] ");
payload = '\0'; // 有效载荷[长度] 等于 '\0'
Serial.println((char *)payload); // 串口.打印(有效载荷);
}
void Shang_Bao_Xiao_Xi() { // 上报消息
char param; // 声明一个char变量 名称为 参数 字符数组 长度为32字节 char类型为一个字节 char*是变量,值可以改变, char[]是常量,值不能改变。char[]对应的内存区域总是可写,char*指向的区域有时可写,有时只读
char jsonBuf; // 声明一个char变量 名称为 JSONBUF格式 字符数组 长度为128字节 char类型为一个字节
sprintf(param, "{\"引脚状态\":%d}", digitalRead(LED_PIN)); // 把格式数据写成串(参数,"{\"引脚状态\":%d}",读取引脚(LED_引脚))
sprintf(jsonBuf, ALINK_BODY_FORMAT, param); // 把格式数据写成串(JSONBUF格式,链接体格式,参数)
Serial.println(jsonBuf); // 串口.打印(JSONBUF格式);
boolean d = client.publish(ALINK_TOPIC_PROP_POST, jsonBuf); // 声明一个布尔型变量 名字为 D 等于 客户端.发布(链接主题文章,JSONBUF格式)
Serial.println("出版说明: 0=失败 ; 1=成功"); // 串口.打印("出版:0=失败;1=成功");
Serial.println("出版情况: " + String(d));
} 现在还是不会如何控制LED灯的开关,现在只是能连接上阿里的MQTT服务器而已 在这里我需要骂阿里,你看我第一次尝试是什么时候,在这段时间里,我有多少次尝试你们懂知道吗?为什么这么复杂?为什么?我智商太低?连接MQTT搞的非常复杂,麻烦。示例代码也没有ARDUINO IDE的。想接入怎么就这么难呢?我自己建立的平台都完全搞定了,但这个就是搞不定。要不是我的平台接入并发数不高,我咋就放弃研究阿里接入了。MLGB 这是是计算MQTT_PASSWD工作的说明。
现在是可以成功连接阿里的MQTT平台,可以从平台发送信息,NODEMCU这边也可以收到,但是如何从平台下发的字符中提取有用的值,这个还没有解决。平台发过来的字符是两层JSON只能获取到外行的键值,但内层的数据怎么获取还搞不明白。
感谢楼主分享!简直是太有用了,我去年早些时候和你研究方向一样,要是那时候看到了估计现在问题都解决了!感谢!