[C]NodeMCU(ESP8266)接入阿里云物联网平台

[复制链接]
 楼主| IoT8888 发表于 2019-12-26 16:18 | 显示全部楼层 |阅读模式
本帖最后由 IoT8888 于 2019-12-26 16:19 编辑
esp8266,人体红外感应,监测办公室厕所坑位

阿里云物联网平台公共实例,18元/年起:点此购买
按用量付费6折起:点此购买
NodeMCU(ESP8266)接入阿里云物联网平台

PIR只有三个口,分别是VCC,GND和输出口。接线方法如下(NodeMCU的D7相当于arduino里的Pin 13)

物模型定义


C程序代码esp8266.ino 代码
  1. #include <ESP8266WiFi.h>
  2. /* 依赖 PubSubClient 2.4.0 */
  3. #include <PubSubClient.h>
  4. /* 依赖 ArduinoJson 5.13.4 */
  5. #include <ArduinoJson.h>

  6. #define SENSOR_PIN    13

  7. /* 连接您的WIFI SSID和密码 */
  8. #define WIFI_SSID         "路由器SSID"
  9. #define WIFI_PASSWD       "密码"


  10. /* 设备的三元组信息*/
  11. #define PRODUCT_KEY       "设备PRODUCT_KEY"
  12. #define DEVICE_NAME       "替换DEVICE_NAME"
  13. #define DEVICE_SECRET     "替换DEVICE_SECRET"
  14. #define REGION_ID         "cn-shanghai"

  15. /* 线上环境域名和端口号,不需要改 */
  16. #define MQTT_SERVER       PRODUCT_KEY ".iot-as-mqtt." REGION_ID ".aliyuncs.com"
  17. #define MQTT_PORT         1883
  18. #define MQTT_USRNAME      DEVICE_NAME "&" PRODUCT_KEY

  19. #define CLIENT_ID         "esp8266|securemode=3,timestamp=1234567890,signmethod=hmacsha1|"
  20. // 算法工具: http://iot-face.oss-cn-shanghai.aliyuncs.com/tools.htm 进行加密生成password
  21. // password教程 https://www.yuque.com/cloud-dev/iot-tech/mebm5g
  22. #define MQTT_PASSWD       "参考上面password教程,算法工具生成"

  23. #define ALINK_BODY_FORMAT         "{"id":"123","version":"1.0","method":"thing.event.property.post","params":%s}"
  24. #define ALINK_TOPIC_PROP_POST     "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post"

  25. unsigned long lastMs = 0;
  26. WiFiClient espClient;
  27. PubSubClient  client(espClient);


  28. void callback(char *topic, byte *payload, unsigned int length)
  29. {
  30.     Serial.print("Message arrived [");
  31.     Serial.print(topic);
  32.     Serial.print("] ");
  33.     payload[length] = '\0';
  34.     Serial.println((char *)payload);

  35. }


  36. void wifiInit()
  37. {
  38.     WiFi.mode(WIFI_STA);
  39.     WiFi.begin(WIFI_SSID, WIFI_PASSWD);
  40.     while (WiFi.status() != WL_CONNECTED)
  41.     {
  42.         delay(1000);
  43.         Serial.println("WiFi not Connect");
  44.     }

  45.     Serial.println("Connected to AP");
  46.     Serial.println("IP address: ");
  47.     Serial.println(WiFi.localIP());

  48.    
  49. Serial.print("espClient [");


  50.     client.setServer(MQTT_SERVER, MQTT_PORT);   /* 连接WiFi之后,连接MQTT服务器 */
  51.     client.setCallback(callback);
  52. }


  53. void mqttCheckConnect()
  54. {
  55.     while (!client.connected())
  56.     {
  57.         Serial.println("Connecting to MQTT Server ...");
  58.         if (client.connect(CLIENT_ID, MQTT_USRNAME, MQTT_PASSWD))

  59.         {

  60.             Serial.println("MQTT Connected!");

  61.         }
  62.         else
  63.         {
  64.             Serial.print("MQTT Connect err:");
  65.             Serial.println(client.state());
  66.             delay(5000);
  67.         }
  68.     }
  69. }


  70. void mqttIntervalPost()
  71. {
  72.     char param[32];
  73.     char jsonBuf[128];

  74.     sprintf(param, "{"idle":%d}", digitalRead(13));
  75.     sprintf(jsonBuf, ALINK_BODY_FORMAT, param);
  76.     Serial.println(jsonBuf);
  77.     boolean d = client.publish(ALINK_TOPIC_PROP_POST, jsonBuf);
  78.     Serial.print("publish:0 失败;1成功");
  79.     Serial.println(d);
  80. }


  81. void setup()
  82. {

  83.     pinMode(SENSOR_PIN,  INPUT);
  84.     /* initialize serial for debugging */
  85.     Serial.begin(115200);
  86.     Serial.println("Demo Start");

  87.     wifiInit();
  88. }


  89. // the loop function runs over and over again forever
  90. void loop()
  91. {
  92.     if (millis() - lastMs >= 5000)
  93.     {
  94.         lastMs = millis();
  95.         mqttCheckConnect();

  96.         /* 上报 */
  97.         mqttIntervalPost();
  98.     }

  99.     client.loop();
  100.     if (digitalRead(SENSOR_PIN) == HIGH){
  101.     Serial.println("Motion detected!");
  102.     delay(2000);
  103.       }
  104.     else {
  105.     Serial.println("Motion absent!");
  106.     delay(2000);
  107.   }

  108. }
PubSubClient.h 修改参数

运行效果


阿里云物联网平台公共实例,18元/年起:点此购买





按用量付费6折起:
点此购买




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

14

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部