<noscript id="mmkmi"><source id="mmkmi"></source></noscript>
  • <noscript id="mmkmi"><kbd id="mmkmi"></kbd></noscript>
  • <table id="mmkmi"><source id="mmkmi"></source></table>
  • arduino上傳完程序后不在線怎么解決??串口有數據流

    作者:奮斗し | 更新時間:2019-04-20 | 瀏覽量:1543

    #include <aJSON.h>
    #include <SPI.h>
    #include <Wire.h>
    #include <dht11.h>

    //=============  此處必須修改============
    String DEVICEID = "10509"; // 你的設備編號   ==
    String  APIKEY = "1adb68719"; // 設備密碼==
    //String INPUTID1 = "9398"; //接口ID==============
    String INPUTID2 = "9398"; //接口ID==============
    String INPUTID3 = "9399"; //接口ID==============
    //String INPUTID4 = "1590"; //接口ID==============
    //=======================================
    unsigned long lastCheckInTime = 0; //記錄上次報到時間
    unsigned long lastUpdateTime = 0;//記錄上次上傳數據時間
    const unsigned long postingInterval = 40000; // 每隔40秒向服務器報到一次
    const unsigned long updateInterval = 10000; // 數據上傳間隔時間10秒
    String inputString = "";//串口讀取到的內容
    boolean stringComplete = false;//串口是否讀取完畢
    boolean CONNECT = true; //連接狀態
    boolean isCheckIn = false; //是否已經登錄服務器
    char* parseJson(char *jsonString);//定義aJson字符串
    ///****************************************************
    dht11 DHT11;
    #define DHT11PIN 2
    /////////////PM2.5
    int measurePin = 1; //Connect dust sensor to Arduino A1 pin
    int ledPower = 3; //Connect 3 led driver pins of dust sensor to Arduino D3
    float voMeasured = 0;
    float calcVoltage = 0;
    float dustDensity = 0;
    int samplingTime = 280;
    int deltaTime = 40;
    int sleepTime = 9680;
    ///////////////////PM2.5
    /////******************************************************
    int val;//MQ_2
    float valTemperature;//定義變量
    float valHumidity;//定義變量
    void update1(String did, String inputid, float value);
    void setup() {
      Serial.begin(115200);//ESP 8266 工作波特率
      Wire.begin();
      int chk = DHT11.read(DHT11PIN);
      pinMode(ledPower, OUTPUT);
      delay(5000);
    }
    void loop() {
      if (millis() - lastCheckInTime > postingInterval || lastCheckInTime == 0) {
        checkIn();
      }
      val = analogRead(0);
      valTemperature = (float)DHT11.temperature;
      valHumidity = (float)DHT11.humidity;
      digitalWrite(ledPower, LOW);
      delayMicroseconds(samplingTime);
      voMeasured = analogRead(measurePin); // read the dust value
      delayMicroseconds(deltaTime);
      digitalWrite(ledPower, HIGH); // turn the LED off
      delayMicroseconds(sleepTime);

      calcVoltage = voMeasured * (5.0 / 1024.0);

      dustDensity = 0.17 * calcVoltage - 0.1;
      if ((millis() - lastUpdateTime >= updateInterval) && isCheckIn)
      {
        //update1(DEVICEID, INPUTID1, val); //MQ_2
        update1(DEVICEID, INPUTID2, valTemperature);
        update1(DEVICEID, INPUTID3, valHumidity);
       // update1(DEVICEID, INPUTID4, dustDensity);
        ///************************
      }
      serialEvent();
      if (stringComplete) {
        inputString.trim();
        //Serial.println(inputString);
        if (inputString == "CLOSED") {
          Serial.println("connect closed!");
          CONNECT = false;
        } else {
          int len = inputString.length() + 1;
          if (inputString.startsWith("{") && inputString.endsWith("}")) {
            char jsonString[len];
            inputString.toCharArray(jsonString, len);
            aJsonObject *msg = aJson.parse(jsonString);
            processMessage(msg);
            aJson.deleteItem(msg);
          }
        }
        // clear the string:
        inputString = "";
        stringComplete = false;
      }
    }
    void checkIn() {//定時簽到,防止離線
      if (!CONNECT) {
        isCheckIn = false;
        Serial.print("+++");
        delay(500);
        Serial.print("\r\n");
        delay(1000);
        Serial.print("AT+RST\r\n");
        delay(6000);
        CONNECT = true;
        lastCheckInTime = 0;
      }
      else {
        Serial.print("{\"M\":\"checkin\",\"ID\":\"");
        Serial.print(DEVICEID);
        Serial.print("\",\"K\":\"");
        Serial.print(APIKEY);
        Serial.print("\"}\r\n");
        lastCheckInTime = millis();
        isCheckIn = true;
      }
    }
    void processMessage(aJsonObject *msg) {
      aJsonObject* method = aJson.getObjectItem(msg, "M");
      aJsonObject* content = aJson.getObjectItem(msg, "C");
      aJsonObject* client_id = aJson.getObjectItem(msg, "ID");
      //char* st = aJson.print(msg);
      if (!method) {
        return;
      }
      //Serial.println(st);
      //free(st);
      String M = method->valuestring;
      String C = content->valuestring;
      String F_C_ID = client_id->valuestring;
      if (M == "say") {
        if (C == "play") {
          // digitalWrite(LED, HIGH);
          sayToClient(F_C_ID, "LED on!");
        }
        if (C == "stop") {
          //  digitalWrite(LED, LOW);
          sayToClient(F_C_ID, "LED off!");
        }
        if (C == "wendu") {
          sayToClient(F_C_ID, String(valTemperature));
        }
        if (C == "shidu") {
          sayToClient(F_C_ID, String(valHumidity));
        }
        if (C == "mq2") {
          sayToClient(F_C_ID, String(val));
        }
        if (C == "pm") {
          sayToClient(F_C_ID, String(dustDensity));
        }
      }
    }
    void sayToClient(String client_id, String content) { //命令回復
      Serial.print("{\"M\":\"say\",\"ID\":\"");
      Serial.print(client_id);
      Serial.print("\",\"C\":\"");
      Serial.print(content);
      Serial.print("\"}\r\n");
      lastCheckInTime = millis();
    }
    void serialEvent() {
      while (Serial.available()) {
        char inChar = (char)Serial.read();
        inputString += inChar;
        if (inChar == '\n') {
          stringComplete = true;
        }
      }
    }
    //上報數據  拼接json
    void update1(String did, String inputid, float value) {
      Serial.print("{\"M\":\"update\",\"ID\":\"");
      Serial.print(did);
      Serial.print("\",\"V\":{\"");
      Serial.print(inputid);
      Serial.print("\":\"");
      Serial.print(value);
      Serial.println("\"}}");
      lastCheckInTime = millis();
      lastUpdateTime = millis();
    }
    //同時上傳兩個接口數據調用此函數
    void update2(String did, String inputid1, float value1, String inputid2, float value2) {
      Serial.print("{\"M\":\"update\",\"ID\":\"");
      Serial.print(did);
      Serial.print("\",\"V\":{\"");
      Serial.print(inputid1);
      Serial.print("\":\"");
      Serial.print(value1);
      Serial.print("\",\"");
      Serial.print(inputid2);
      Serial.print("\":\"");
      Serial.print(value2);
      Serial.println("\"}}");
      lastCheckInTime = millis();
      lastUpdateTime = millis();
    }


    評論:共6條

    799243768 評論于:2019-04-20 15:47:14
    硬件連接圖是怎么樣的
    奮斗し 回復于:2019-04-21 01:33:51
    回復 @799243768:就是0.1Wi-Fi 2dht11用的uno板,其他沒接
    799243768 回復于:2019-04-21 13:08:17
    回復 @奮斗し:WiFi模塊有配置好連上路由器并設置為cilent嗎
    奮斗し 評論于:2019-04-21 21:07:53
    我發現每次重連必須設置一遍透傳
    alilong1200 評論于:2019-04-24 17:47:40
    能加下您的QQ嗎,我目前也做這個,不過用的esp8266
    奮斗し 評論于:2019-04-24 23:59:27
    用這個代碼就好了
    返回頂部
    <noscript id="mmkmi"><source id="mmkmi"></source></noscript>
  • <noscript id="mmkmi"><kbd id="mmkmi"></kbd></noscript>
  • <table id="mmkmi"><source id="mmkmi"></source></table>
  • 三上悠亚在线观看