<em id="ri2my"></em>
  • <em id="ri2my"></em>
    <em id="ri2my"><label id="ri2my"><nav id="ri2my"></nav></label></em>
  • <em id="ri2my"><label id="ri2my"></label></em>
    <div id="ri2my"></div>
    1. <em id="ri2my"><label id="ri2my"></label></em>
    2. <em id="ri2my"><ol id="ri2my"></ol></em>
      <em id="ri2my"></em>

      1. 各位可以幫我看看代碼有什么問題嗎?

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

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

        返回頂部

        <em id="ri2my"></em>
      2. <em id="ri2my"></em>
        <em id="ri2my"><label id="ri2my"><nav id="ri2my"></nav></label></em>
      3. <em id="ri2my"><label id="ri2my"></label></em>
        <div id="ri2my"></div>
        1. <em id="ri2my"><label id="ri2my"></label></em>
        2. <em id="ri2my"><ol id="ri2my"></ol></em>
          <em id="ri2my"></em>

          1. 免费高清视频