<noscript id="mmkmi"><source id="mmkmi"></source></noscript>
  • <noscript id="mmkmi"><kbd id="mmkmi"></kbd></noscript>
  • <table id="mmkmi"><source id="mmkmi"></source></table>
  • 各位可以幫我看看代碼有什么問題嗎?

    作者:Justin233 | 更新時間:2019-12-12 | 瀏覽量:746

    想要將一個超聲波傳感器的數據實時傳輸到平臺上,源代碼(修改了溫度實時監控所給代碼的數據處理部分,其他的地方沒有改動)如下,為什么平臺上接受到的數據一直是0?

    #include <aJSON.h>
    //=============  此處必須修改============
    String DEVICEID = ""; // 你的設備ID=======
    String APIKEY = ""; // 設備密碼==
    String INPUTID = ""; //接口ID==============
    //=======================================

    //const int LM35 = 0;// LM35 Vout 接 A0
    const int TrigPin = 6; //發出超聲波
    const int EchoPin = 7; //收到反射回來的超聲波
    float cm; //因為測得的距離是浮點型的
    unsigned long lastCheckStatusTime = 0; //記錄上次報到時間
    unsigned long lastUpdateTime = 0;//記錄上次上傳數據時間
    const unsigned long postingInterval = 40000; // 每隔40秒向服務器報到一次
    const unsigned long updateInterval = 5000; // 數據上傳間隔時間5秒
    unsigned long checkoutTime = 0;//登出時間
    void setup() {
      Serial.begin(115200);
      delay(5000);//等一會兒ESP8266
    }
    void loop() {
      //每一定時間查詢一次設備在線狀態,同時替代心跳
      if (millis() - lastCheckStatusTime > postingInterval) {
        checkStatus();
      }
      //checkout 50ms 后 checkin
      if ( checkoutTime != 0 && millis() - checkoutTime > 50 ) {
        checkIn();
        checkoutTime = 0;
      }
      //每隔一定時間上傳一次數據
      if (millis() - lastUpdateTime > updateInterval) {
        digitalWrite(TrigPin, LOW); //低高低電平發一個短時間脈沖去TrigPin 
        delayMicroseconds(2);       // delayMicroseconds在更小的時間內延時準確
        digitalWrite(TrigPin, HIGH); 
        delayMicroseconds(10); 
        digitalWrite(TrigPin, LOW); //通過這里控制超聲波的發射
      
        cm = pulseIn(EchoPin, HIGH) / 58.0; //將回波時間換算成cm 
        cm = (int(cm * 100.0)) / 100.0; //保留兩位小數 
        //Serial.print("Distance:"); 
        //Serial.print(cm); 
        //Serial.print("cm"); 
        //Serial.println(); 
        //cm = 100;
        update1(DEVICEID, INPUTID, cm);
        lastUpdateTime = millis();
      }
      //讀取串口信息
      while (Serial.available()) {
        String inputString = Serial.readStringUntil('\n');
        //檢測json數據是否完整
        int jsonBeginAt = inputString.indexOf("{");
        int jsonEndAt = inputString.lastIndexOf("}");
        if (jsonBeginAt != -1 && jsonEndAt != -1) {
          //凈化json數據
          inputString = inputString.substring(jsonBeginAt, jsonEndAt + 1);
          int len = inputString.length() + 1;
          char jsonString[len];
          inputString.toCharArray(jsonString, len);
          aJsonObject *msg = aJson.parse(jsonString);
          processMessage(msg);
          aJson.deleteItem(msg);
        }
      }
    }
    //設備登錄
    //{"M":"checkin","ID":"xx1","K":"xx2"}\n
    void checkIn() {
      Serial.print("{\"M\":\"checkin\",\"ID\":\"");
      Serial.print(DEVICEID);
      Serial.print("\",\"K\":\"");
      Serial.print(APIKEY);
      Serial.print("\"}\n");
    }
    //強制設備下線,用消除設備掉線延時
    //{"M":"checkout","ID":"xx1","K":"xx2"}\n
    void checkOut() {
      Serial.print("{\"M\":\"checkout\",\"ID\":\"");
      Serial.print(DEVICEID);
      Serial.print("\",\"K\":\"");
      Serial.print(APIKEY);
      Serial.print("\"}\n");
    }

    //查詢設備在線狀態
    //{"M":"status"}\n
    void checkStatus() {
      Serial.print("{\"M\":\"status\"}\n");
      lastCheckStatusTime = millis();
    }

    //處理來自ESP8266透傳的數據
    void processMessage(aJsonObject *msg) {
      aJsonObject* method = aJson.getObjectItem(msg, "M");
      if (!method) {
        return;
      }
      String M = method->valuestring;
      if (M == "WELCOME TO BIGIOT") {
        checkOut();
        checkoutTime = millis();
        return;
      }
      if (M == "connected") {
        checkIn();
      }
    }
    //上傳一個接口數據
    //{"M":"update","ID":"2","V":{"2":"120"}}\n
    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("\"}}");
    }
    //同時上傳兩個接口數據調用此函數
    //{"M":"update","ID":"112","V":{"6":"1","36":"116"}}\n
    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("\"}}");
    }


    評論:共0條

    返回頂部
    <noscript id="mmkmi"><source id="mmkmi"></source></noscript>
  • <noscript id="mmkmi"><kbd id="mmkmi"></kbd></noscript>
  • <table id="mmkmi"><source id="mmkmi"></source></table>
  • 三上悠亚在线观看