查看: 490|回复: 2

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-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   板子这边是接收到了消息,但是针脚好像没有动作,正在研究。有看到的朋友给指导一下。
您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

热门推荐

【Arduino】108种传感器模块系列实验(55)---DHT11温湿度传感器
【Arduino】108种传感器模
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
【Arduino】108种传感器模块系列实验(40)---旋转编码器模块
【Arduino】108种传感器模
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
基于机器视觉的智能分拣机械臂
基于机器视觉的智能分拣机
本作品是一个基于机器视觉的智能机械臂操作平台,其采用atmega32单片机作为主控制系统
请问HMC5883L的三个数据到底代表什么,如何做成指南针?
请问HMC5883L的三个数据到
或者哪位朋友有资料给个连接?网上愣是没找到。都只介绍了如何读取数据。我想做成图
关于atmega328p-pu 地的问题
关于atmega328p-pu 地的问
请问图中ADC的地和VCC的地在单片机内部有连接吗?本人初学者,因为需要控制模拟电路,
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
快速回复 返回顶部 返回列表