作者:瀟瀟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();
}