NodeMCU第一次接入阿里物联网记录贴-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 16415|回复: 21

NodeMCU第一次接入阿里物联网记录贴

[复制链接]
发表于 2019-7-31 09:49 | 显示全部楼层 |阅读模式
本帖最后由 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  提交人工  工单,阿里工程师会帮你处理解决问题的,比在网上乱查,乱问来的准确。


 楼主| 发表于 2019-11-30 18:15 | 显示全部楼层
谁能比我白痴?   花了整整一下午时间把 整个代码翻译了一边把重点的地方都有说明。这次应当没有啥问题了吧。


[pre]//应用库文件
#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 是由三部分组成的,分别clientId  securemode  signmethod
//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客户端
PubSubClient  client(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[length] = '\0';                                        // 有效载荷[长度] 等于 '\0'
  Serial.println((char *)payload);                               // 串口.打印(有效载荷);
}


void Shang_Bao_Xiao_Xi() {                                       // 上报消息
  char param[32];                                                // 声明一个char变量 名称为 参数 字符数组 长度为32字节        char类型为一个字节          char*是变量,值可以改变, char[]是常量,值不能改变。char[]对应的内存区域总是可写,char*指向的区域有时可写,有时只读
  char jsonBuf[128];                                             // 声明一个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));
}[/pre]
 楼主| 发表于 2019-8-7 15:09 | 显示全部楼层
#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;
PubSubClient  client(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[length] = '\0';
  Serial.println((char *)payload);
}





void mqttIntervalPost(){//上报消息心跳周期   MQTT间隔岗位
  char param[32];
  char jsonBuf[128];

  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);
}
 楼主| 发表于 2019-8-7 15:11 | 显示全部楼层
用这个代码可以直接连接上阿里云,连接上后在https://iot.console.aliyun.com/这里可以看到连接状态为绿色,连接成功了。

但是如何进行数据交换还没搞明白。如控制台发送指令1   板子这边是接收到了消息,但是针脚好像没有动作,正在研究。有看到的朋友给指导一下。
 楼主| 发表于 2019-11-30 18:15 | 显示全部楼层
//应用库文件
#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 是由三部分组成的,分别clientId  securemode  signmethod
//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客户端
PubSubClient  client(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[length] = '\0';                                        // 有效载荷[长度] 等于 '\0'
  Serial.println((char *)payload);                               // 串口.打印(有效载荷);
}


void Shang_Bao_Xiao_Xi() {                                       // 上报消息
  char param[32];                                                // 声明一个char变量 名称为 参数 字符数组 长度为32字节        char类型为一个字节          char*是变量,值可以改变, char[]是常量,值不能改变。char[]对应的内存区域总是可写,char*指向的区域有时可写,有时只读
  char jsonBuf[128];                                             // 声明一个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));
}
 楼主| 发表于 2020-1-23 15:11 | 显示全部楼层
现在还是不会如何控制LED灯的开关,现在只是能连接上阿里的MQTT服务器而已
 楼主| 发表于 2020-1-23 15:35 | 显示全部楼层
在这里我需要骂阿里,你看我第一次尝试是什么时候,在这段时间里,我有多少次尝试你们懂知道吗?为什么这么复杂?为什么?我智商太低?连接MQTT搞的非常复杂,麻烦。示例代码也没有ARDUINO IDE的。想接入怎么就这么难呢?我自己建立的平台都完全搞定了,但这个就是搞不定。要不是我的平台接入并发数不高,我咋就放弃研究阿里接入了。MLGB
 楼主| 发表于 2020-1-23 16:00 | 显示全部楼层
TIM图片20200123155926.png 这是是计算MQTT_PASSWD  工作的说明。
 楼主| 发表于 2020-1-27 17:35 | 显示全部楼层
现在是可以成功连接阿里的MQTT平台,可以从平台发送信息,NODEMCU这边也可以收到,但是如何从平台下发的字符中提取有用的值,这个还没有解决。平台发过来的字符是两层JSON只能获取到外行的键值,但内层的数据怎么获取还搞不明白。

发表于 2020-4-3 13:39 | 显示全部楼层
感谢楼主分享!简直是太有用了,我去年早些时候和你研究方向一样,要是那时候看到了估计现在问题都解决了!感谢!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 02:49 , Processed in 0.146873 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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