美文网首页
2020-06-08 esp8266ardunio阿里云

2020-06-08 esp8266ardunio阿里云

作者: hujinchao | 来源:发表于2020-06-08 15:39 被阅读0次

    #include <ESP8266WiFi.h>

    #include <PubSubClient.h>

    #include <ArduinoJson.h>

    #include "aliyun_mqtt.h"

    // GPIO 13, D7 on the Node MCU v3

    #define SENSOR_PIN 13

    #define WIFI_SSID        "CMCC-123"//替换自己的WIFI

    #define WIFI_PASSWD      "12345678"//替换自己的WIFI

    #define PRODUCT_KEY      "abcvfg" //替换自己的PRODUCT_KEY

    #define DEVICE_NAME      "Temp_Sensor" //替换自己的DEVICE_NAME

    #define DEVICE_SECRET    "QhT3OdM9Yi4izSgiXdjKOPIoCzQbVcLy"//替换自己的DEVICE_SECRET

    #define DEV_VERSION      "S-TH-WIFI-v1.0-20190220"        //固件版本信息

    #define ALINK_BODY_FORMAT        "{\"id\":\"123\",\"version\":\"1.0\",\"method\":\"%s\",\"params\":%s}"

    #define ALINK_TOPIC_PROP_POST    "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post"

    #define ALINK_TOPIC_PROP_POSTRSP  "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post_reply"

    #define ALINK_TOPIC_PROP_SET      "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/service/property/set"

    #define ALINK_METHOD_PROP_POST    "thing.event.property.post"

    #define ALINK_TOPIC_DEV_INFO      "/ota/device/inform/" PRODUCT_KEY "/" DEVICE_NAME ""   

    #define ALINK_VERSION_FROMA      "{\"id\": 123,\"params\": {\"version\": \"%s\"}}"

    unsigned long lastMs = 0;

    WiFiClient  espClient;

    PubSubClient mqttClient(espClient);

    void init_wifi(const char *ssid, const char *password)

    {

        WiFi.mode(WIFI_STA);

        WiFi.begin(ssid, password);

        while (WiFi.status() != WL_CONNECTED)

        {

            Serial.println("WiFi does not connect, try again ...");

            delay(500);

        }

        Serial.println("Wifi is connected.");

        Serial.println("IP address: ");

        Serial.println(WiFi.localIP());

    }

    void mqtt_callback(char *topic, byte *payload, unsigned int length)

    {

        Serial.print("Message arrived [");

        Serial.print(topic);

        Serial.print("] ");

        payload[length] = '\0';

        Serial.println((char *)payload);

        if (strstr(topic, ALINK_TOPIC_PROP_SET))

        {

            StaticJsonBuffer<100> jsonBuffer;

            JsonObject &root = jsonBuffer.parseObject(payload);

            if (!root.success())

            {

                Serial.println("parseObject() failed");

                return;

            }

        }

    }

    void mqtt_version_post()

    {

        char param[512];

        char jsonBuf[1024];

        //sprintf(param, "{\"MotionAlarmState\":%d}", digitalRead(13));

        sprintf(param, "{\"id\": 123,\"params\": {\"version\": \"%s\"}}", DEV_VERSION);

      // sprintf(jsonBuf, ALINK_BODY_FORMAT, ALINK_METHOD_PROP_POST, param);

        Serial.println(param);

        mqttClient.publish(ALINK_TOPIC_DEV_INFO, param);

    }

    void mqtt_check_connect()

    {

        while (!mqttClient.connected())//mqttδ����

        {

            while (connect_aliyun_mqtt(mqttClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET))

            {

                Serial.println("MQTT connect succeed!");

                //client.subscribe(ALINK_TOPIC_PROP_POSTRSP);

                mqttClient.subscribe(ALINK_TOPIC_PROP_SET);

                Serial.println("subscribe done");

                mqtt_version_post();

            }

        }

    }

    void mqtt_interval_post()

    {

        char param[512];

        char jsonBuf[1024];

        //sprintf(param, "{\"MotionAlarmState\":%d}", digitalRead(13));

        sprintf(param, "{\"CurrentHumidity\":%d,\"CurrentTemperature\":12,\"GeoLocation\":{\"CoordinateSystem\":2,\"Latitude\":2,\"Longitude\":123,\"Altitude\":1}}", digitalRead(13));

        sprintf(jsonBuf, ALINK_BODY_FORMAT, ALINK_METHOD_PROP_POST, param);

        Serial.println(jsonBuf);

        mqttClient.publish(ALINK_TOPIC_PROP_POST, jsonBuf);

    }

    void setup()

    {

        pinMode(SENSOR_PIN, INPUT);

        /* initialize serial for debugging */

        Serial.begin(115200);

        Serial.println("Demo Start");

        init_wifi(WIFI_SSID, WIFI_PASSWD);

        mqttClient.setCallback(mqtt_callback);

    }

    // the loop function runs over and over again forever

    void loop()

    {

        if (millis() - lastMs >= 20000)

        {

            lastMs = millis();

            mqtt_check_connect();

            /* Post */       

            mqtt_interval_post();

        }

        mqttClient.loop();

        unsigned int WAIT_MS = 2000;

        if (digitalRead(SENSOR_PIN) == HIGH)

        {

            Serial.println("Motion detected!");

        }

        else

        {

            Serial.println("Motion absent!");

        }

        delay(WAIT_MS); // ms

        Serial.println(millis() / WAIT_MS);

    }

    ————————————————

    原文链接:https://blog.csdn.net/ziqi5543/java/article/details/88710552

    相关文章

      网友评论

          本文标题:2020-06-08 esp8266ardunio阿里云

          本文链接:https://www.haomeiwen.com/subject/jajrtktx.html