<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通過提供的代碼開燈,這部分代碼是什么意思???

    作者:Blue moon | 更新時間:2018-08-07 | 瀏覽量:1856

    有沒有朋友懂的,幫注釋下唄,感激不盡@貝殼物聯

    想噴的,請繞路

    #include <aJSON.h>
    //=============  此處必須修該============
    String DEVICEID="xxx"; // 你的設備編號   ==
    String  APIKEY="xxxxxxxx"; // 設備密碼==
    //=======================================
    unsigned long lastCheckInTime = 0; //記錄上次報到時間
    unsigned long lastCheckStatusTime = 0; //記錄上次報到時間
    const unsigned long postingInterval = 40000; // 每隔40秒向服務器報到一次
    const unsigned long statusInterval = 100000; // 每隔100秒檢測一次在線狀態
    String inputString = "";
    boolean stringComplete = false;
    char* parseJson(char *jsonString);                                                                  //???
    void setup() {
      Serial.begin(115200);
      delay(6000);
    }
    void loop() {

    //???
      if(millis() - lastCheckInTime > postingInterval || lastCheckInTime==0) {
        checkIn();
      }
      if(millis() - lastCheckStatusTime > statusInterval) {
        checkStatus();
      }

    //??
      serialEvent();
      if (stringComplete) {
        inputString.trim();
        //Serial.println(inputString);
        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() {
      Serial.print("{\"M\":\"checkin\",\"ID\":\"");
      Serial.print(DEVICEID);
      Serial.print("\",\"K\":\"");
      Serial.print(APIKEY);
      Serial.print("\"}\n");
      lastCheckInTime = millis();   
    }

     

    //???
    void checkOut() {
      Serial.print("{\"M\":\"checkout\",\"ID\":\"");
      Serial.print(DEVICEID);
      Serial.print("\",\"K\":\"");
      Serial.print(APIKEY);
      Serial.print("\"}\n");
    }

    //???
    void checkStatus() {
      Serial.print("{\"M\":\"status\"}\n");
      lastCheckStatusTime = 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;
      String C=content->valuestring;
      String F_C_ID=client_id->valuestring;
      if(M=="WELCOME TO BIGIOT"){
        checkOut();
        delay(1000);
        checkIn();
      }

     

    //???
      if(M=="connected"){
        checkOut();
        delay(1000);
        checkIn();
      }
      if(M=="say"){
        if(C=="offOn"){
          sayToClient(F_C_ID,"\u4f60\u5230\u5e95\u60f3\u5f00\u8fd8\u662f\u60f3\u5173\uff1f");
        }
        else if(C=="play"){
          sayToClient(F_C_ID,"\u4e00\u8d77\u73a9\u5427\u002d\u005f\u002d\u0021");
        }
        else if(C=="stop"){
          sayToClient(F_C_ID,"\u90a3\u771f\u662f\u505c\u4e0d\u4e0b\u6765\u554a\uff01");
        }else{
          sayToClient(F_C_ID,"\u4f60\u8bf4\u5565\uff1f");
        }
      }
    }

     

    //???
    void sayToClient(String client_id, String content){
      Serial.print("{\"M\":\"say\",\"ID\":\"");
      Serial.print(client_id);
      Serial.print("\",\"C\":\"");
      Serial.print(content);
      Serial.print("\"}\n");
      lastCheckInTime = millis();
    }

     

    //????
    void serialEvent() {
      while (Serial.available()) {
        char inChar = (char)Serial.read();
        inputString += inChar;
        if (inChar == '\n') {
          stringComplete = true;
        }
      }
    }


    評論:共11條

    SS501 評論于:2018-08-08 09:52:53
    那一部分呢??
    Blue moon 回復于:2018-08-08 10:37:24
    回復 @SS501:帶問號的,其實沒標注的幾乎都看不懂....,希望大神幫幫忙
    SS501 評論于:2018-08-08 10:54:04
    我就順著開始:1.2.就是記錄時間的,就是40秒就向貝殼發送一次數據,假如時間到了100秒就發送一次請求狀態,這些你可以看一看它的通信協議,協議里面有的;3.這就是讀取串口收到的保文,然后用void processMessage()這個函數解析出信號;4.void checkIn() 函數是向貝殼發送你的在線狀態,不然貝殼平臺會一段時間后顯示你不在線;5.6.這兩個都是一樣,你看一下通信協議就知道啦,就是查詢轉態的意思;7.void processMessage()這個函數就是解析你串口收到的數據;8.void sayToClient(String client_id, String content)這個函數你也要看一下通信協議就可以知道;9.void serialEvent() 這個函數就是讀取串口數據, if (inChar == '\n')這句是讀取到最后的換行了,那就說明串口讀取結束。
    Blue moon 回復于:2018-08-08 11:18:05
    回復 @SS501:謝謝大神!!!膜拜
    SS501 評論于:2018-08-08 11:31:37
    沒有啦,互相學習學習,其實我也是剛剛摸索了兩天自己感觸出來的,只是我自己改了好多,這個程序我用不了。
    Blue moon 回復于:2018-08-08 14:06:52
    回復 @SS501:我這個能直接用,為啥要改??
    SS501 回復于:2018-08-08 16:50:52
    回復 @Blue moon:我用的是Arduino+正點原子的ESP8266模塊,還有你應該是燒了ESP8266的固件庫,直接就可以進行聯網透傳,我的是自己程序里面配置的。
    SS501 回復于:2018-08-08 16:55:54
    回復 @Blue moon:說實話啊,我怎么沒有看到你鏈接那個無線網?還有密碼呢?
    Blue moon 回復于:2018-08-12 18:56:30
    回復 @SS501:我把WiFi名稱,密碼燒錄在ESP8266里面了
    Blue moon 回復于:2018-08-12 20:13:25
    回復 @SS501:透傳也燒進去了
    dfkn 評論于:2019-04-14 16:44:18
    留個記號
    返回頂部
    <noscript id="mmkmi"><source id="mmkmi"></source></noscript>
  • <noscript id="mmkmi"><kbd id="mmkmi"></kbd></noscript>
  • <table id="mmkmi"><source id="mmkmi"></source></table>
  • 三上悠亚在线观看