Arduino通过提供的代码开灯,这部分代码是什么意思???

作者:Blue moon | 更新时间:2018-08-07

有没有朋友懂的,帮注释下呗,感激不尽@贝壳物联

想喷的,请绕路

#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
留个记号
评论支持使用[code][/code]标签添加代码
返回顶部