<noscript id="mmkmi"><source id="mmkmi"></source></noscript>
  • <noscript id="mmkmi"><kbd id="mmkmi"></kbd></noscript>
  • <table id="mmkmi"><source id="mmkmi"></source></table>
  • 設備不在線

    作者:瀟瀟123 | 更新時間:2018-04-14 | 瀏覽量:1489

    弄了挺久的,一直搞不定…求幫忙看看是為什么

    串口助手一直顯示這個:

    {"M":"checkin","ID":"5438","K":"a3487a976"}
    {"M":"update","ID":"5438","V":{"4888":"76.77"}}
    {"M":"update","ID":"5438","V":{"4888":"106.55"}}
    {"M":"update","ID":"5438","V":{"4888":"63.75"}}
    {"M":"update","ID":"5438","V":{"4888":"72.59"}}

     

    這是燒錄在arduino的代碼:

    /*
     *注意 :Arduino IDE版本請使用1.6.5-1.8.2
     */
    #include <aJSON.h>
    #include <SoftwareSerial.h>
    SoftwareSerial mySerial(2, 3); //設置模擬串口針腳(RX, TX)
    //=============  此處必須修改============
    String DEVICEID="5438"; // 你的設備ID=======
    String APIKEY="a3487a976"; // 設備密碼==
    String INPUTID="4888";//接口ID==============
    //=======================================
    const int MQ2 = 0;// MQ-2 Vout 接 A0
    unsigned long lastCheckInTime = 0; //記錄上次報到時間
    unsigned long lastUpdateTime = 0;//記錄上次上傳數據時間
    const unsigned long postingInterval = 40000; // 每隔40秒向服務器報到一次
    const unsigned long updateInterval = 5000; // 數據上傳間隔時間5秒
    String inputString = "";//串口讀取到的內容
    boolean stringComplete = false;//串口是否讀取完畢
    boolean CONNECT = true; //連接狀態
    boolean isCheckIn = false; //是否已經登錄服務器
    char* parseJson(char *jsonString);//定義aJson字符串
    void setup() {
     Serial.begin(115200);
      delay(10000);
    }
    void loop() {
      if(millis() - lastCheckInTime > postingInterval || lastCheckInTime==0) {
        checkIn();
      }
      if(millis() - lastUpdateTime > updateInterval) {
        float val;//定義變量
        int dat;//定義變量
        dat=analogRead( MQ2 );// 讀取傳感器的模擬值并賦值給dat
        //val=(125*dat)>>8;//溫度計算公式
        val = dat * (4.76 / 1023.0*100);  
        update1(DEVICEID,INPUTID,val);
      }
      serialEvent();
        if (stringComplete) {
          inputString.trim();
          //Serial.println(inputString);
          if(inputString=="CLOSED"){
           Serial.println("connect closed!");
            CONNECT=false;   
            isCheckIn=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);//處理接收到的Json數據
              aJson.deleteItem(msg);          
            }
          }      
          inputString = "";
          stringComplete = false;
      }
    }
    void checkIn() {
      if (!CONNECT) {
        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();
      }
    }
    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;
        if(M=="checkinok"){
          isCheckIn = true;
        }
    }
    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 serialEvent() {
      while (Serial.available()) {
        char inChar = (char)Serial.read();
        inputString += inChar;
        if (inChar == '\n') {
          stringComplete = true;
        }
      }
    }
    同時上傳兩個接口數據調用此函數
    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(); 
    }
     


    評論:共10條

    超死亡 評論于:2018-04-17 19:52:39
    設備重啟
    瀟瀟123 回復于:2018-04-17 20:59:25
    回復 @超死亡:還是不行[哭]
    超死亡 回復于:2018-04-17 22:12:20
    回復 @瀟瀟123:沒道理呀
    ZQY 回復于:2018-04-20 18:38:23
    回復 @超死亡:我也是一樣不行,明明可以自動連接上了
    清風鈴動 回復于:2018-04-20 21:34:12
    回復 @超死亡設備要怎么重啟,我也是這個問題
    瀟瀟123 回復于:2018-04-26 02:34:40
    回復 @清風鈴動:
    瀟瀟123 回復于:2018-04-26 02:34:57
    回復 @ZQY:
    瀟瀟123 評論于:2018-04-26 02:33:14
    好了,原因是登陸指令之類的是寫在了串口,應該連接貝殼的服務器然后發送到服務端就可以了
    Y134 回復于:2018-05-01 12:00:16
    回復 @瀟瀟123:請問具體該怎么改呢
    JiYoo 回復于:2019-03-02 21:35:11
    回復 @瀟瀟123:同樣遇到了這個問題 怎么解決的呢
    返回頂部
    <noscript id="mmkmi"><source id="mmkmi"></source></noscript>
  • <noscript id="mmkmi"><kbd id="mmkmi"></kbd></noscript>
  • <table id="mmkmi"><source id="mmkmi"></source></table>
  • 三上悠亚在线观看