国内综合精彩aⅤ无码不卡_日本少妇做爰全过程_欧美性爱在线播放免费_午夜?V日韩一区二区_免费a级毛片无码免费播放_成在人线av无码喷水_亚洲精品网站色视频_国产婷婷精品成人_老师撩起裙子让我桶的视频_秋霞影院国产

問題求解,無法處理來自貝殼物聯(lián)的json信息

作者:GoastTokyo | 更新時(shí)間:2021-11-25 | 瀏覽量:1476

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

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

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

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

void setup() {
  
  //舵機(jī)初始化
  myservo.attach(9);
  //串口初始化
  Serial.begin(115200);
  //esp8266串口初始化
  mySerial.begin(115200);
  
  //esp8266網(wǎng)絡(luò)設(shè)置初始化
  //退出可能未退出的CIPSEND模式
  mySerial.write("+++");
  delay(1000);
  mySerial.write("\r\n");
  printmessage();
  delay(1000);
  //檢驗(yàn)是否退出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);
  //檢驗(yàn)透傳模式
  mySerial.write("AT+CIPMODE?\r\n");
  printmessage();
  delay(1000);
  //刷新更改透傳模式為1(開啟)
  mySerial.write("AT+CIPMODE=1\r\n");
  printmessage();
  delay(1000);
  //檢驗(yàn)透傳模式是否更改成功
  mySerial.write("AT+CIPMODE?\r\n");
  printmessage();
  delay(1000);
  //連接貝殼物聯(lián)
  mySerial.write("AT+CIPSTART=\"TCP\",\"m.placeboworld.cn\",8181\r\n");
  printmessage();
  delay(5000);
  //開始對話
  mySerial.write("AT+CIPSEND\r\n");
  printmessage();
  delay(1000);
  //設(shè)備登錄
  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() {

  //每一定時(shí)間查詢一次設(shè)備在線狀態(tài),同時(shí)替代心跳
  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);
    
  }
  
#處理來自貝殼物聯(lián)的信息
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條

返回頂部