<noscript id="mmkmi"><source id="mmkmi"></source></noscript>
  • <noscript id="mmkmi"><kbd id="mmkmi"></kbd></noscript>
  • <table id="mmkmi"><source id="mmkmi"></source></table>
  • 問題求解,無法處理來自貝殼物聯的json信息

    作者:GoastTokyo | 更新時間:2021-11-25 | 瀏覽量:422

    根據網站中文檔“基于Arduino + ESP8266控制LED燈并返回控制結果”改的代碼,運行于arduino,目的是想通過貝殼物聯網頁端控制舵機運轉,連接登錄設備和維持設備在線都沒問題,就是從網頁端給設備發信息沒有反應,已經查了幾天了一直不知道是什么問題(╥﹏╥)

    #include <aJSON.h>
    #include <Servo.h> 
    #include <SoftwareSerial.h>
    //=============  此處必須修該============
    String DEVICEID = "xxx"; // 設備ID       ==
    String  APIKEY = "xxx"; //設備APIKEY ==
    //=======================================

    SoftwareSerial mySerial(10, 11); // RX, TX

    unsigned long lastCheckStatusTime = 0; //記錄上次報到時間
    const unsigned long postingInterval = 30000; // 每隔40秒向服務器報到一次
    unsigned long checkoutTime = 0;//登出時間
    // DC hobby servo
    Servo myservo;
    int servospd=240;

    void setup() {
      
      //舵機初始化
      myservo.attach(9);
      //串口初始化
      Serial.begin(115200);
      //esp8266串口初始化
      mySerial.begin(115200);
      
      //esp8266網絡設置初始化
      //退出可能未退出的CIPSEND模式
      mySerial.write("+++");
      delay(1000);
      mySerial.write("\r\n");
      printmessage();
      delay(1000);
      //檢驗是否退出CIPSEND模式
      mySerial.write("AT\r\n");
      printmessage();
      delay(1000);
      mySerial.write("AT+CWMODE?\r\n");
      printmessage();
      delay(1000);
      mySerial.write("AT+CWMODE=3\r\n");
      printmessage();
      delay(1000);
      mySerial.write("AT+CWMODE?\r\n");
      printmessage();
      delay(1000);
      mySerial.write("AT+CWJAP=\"xxx\",\"xxx\"\r\n");
      printmessage();
      delay(10000);
      //檢驗透傳模式
      mySerial.write("AT+CIPMODE?\r\n");
      printmessage();
      delay(1000);
      //刷新更改透傳模式為1(開啟)
      mySerial.write("AT+CIPMODE=1\r\n");
      printmessage();
      delay(1000);
      //檢驗透傳模式是否更改成功
      mySerial.write("AT+CIPMODE?\r\n");
      printmessage();
      delay(1000);
      //連接貝殼物聯
      mySerial.write("AT+CIPSTART=\"TCP\",\"www.eqytg.org\",8181\r\n");
      printmessage();
      delay(5000);
      //開始對話
      mySerial.write("AT+CIPSEND\r\n");
      printmessage();
      delay(1000);
      //設備登錄
      mySerial.write("{\"M\":\"checkin\",\"ID\":\"xxx\",\"K\":\"xxx\"}\r\n");
      printmessage();
      delay(10000);
      //退出對話
      mySerial.write("+++");
      printmessage();
      delay(1000);
      mySerial.write("\r\n");
      printmessage();
      delay(1000);
      
    }
    void loop() {

      //每一定時間查詢一次設備在線狀態,同時替代心跳
      if (millis() - lastCheckStatusTime > postingInterval) {
        mySerial.write("AT+CIPSEND\r\n");
        delay(1000);
        mySerial.write("{\"M\":\"status\"}\r\n");
        lastCheckStatusTime = millis();
        delay(5000);
        mySerial.write("+++");
        delay(1000);
        mySerial.write("\r\n");
        delay(1000);
        
      }
      
    #處理來自貝殼物聯的信息
    while(mySerial.available()){
        String inputmsg=mySerial.readStringUntil("\n");
        int jsonBeginAt=inputmsg.indexOf("{");
        int jsonEndAt=inputmsg.lastIndexOf("}");
        if(jsonBeginAt!=-1 && jsonEndAt!=-1){
          inputmsg=inputmsg.substring(jsonBeginAt,jsonEndAt+1);
          int len = inputmsg.length()+1;
          char jsonString[len];
          inputmsg.toCharArray(jsonString,len);
          aJsonObject *msg=aJson.parse(jsonString);

          aJsonObject* method=aJson.getObjectItem(msg, "M");
          if (!method){
            return;
          }
          String M = method->valuestring;
          if(M == "say"){
            aJsonObject* content=aJson.getObjectItem(msg, "C");
            aJsonObject* web_id= aJson.getObjectItem(msg, "ID");
            String C = content->valuestring;
            String ID = web_id->valuestring;
            if(C == "unlock"){
              myservo.write(servospd);
              mySerial.write("AT+CIPSEND\r\n");
              mySerial.write("{\"M\":\"say\",\"ID\":\"U17110\",\"C\":\"Servo forword!\",\"SIGN\":\"esp8266\"}\r\n");
              Serial.println("Unlock!");
              delay(1000);
              mySerial.write("+++");
              mySerial.write("\r\n");
            }
            if(C == "lock"){
              myservo.write(servospd*(-1));
              mySerial.write("AT+CIPSEND\r\n");
              mySerial.write("{\"M\":\"say\",\"ID\":\"U17110\",\"C\":\"Servo reverse!\",\"SIGN\":\"esp8266\"}\r\n");
              delay(1000);
              mySerial.write("+++");
              mySerial.write("\r\n");
            }
          }

          aJson.deleteItem(msg);
         
        }
      }

    }


    void printmessage(){
      if (mySerial.available())
        Serial.println(mySerial.readStringUntil("\n"));
      if (Serial.available())
        mySerial.write(Serial.read());
    }


    評論:共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>
  • 三上悠亚在线观看