Bigiot.net
BIGIOT.net
貝殼物聯
貝殼物聯
公開設備
移動端
文檔
話題討論
登錄
注冊
請問一下多數據上傳的代碼怎么修改,我想上傳6種數據
作者:
a386554965
| 更新時間:2018-06-11 | 瀏覽量:1090
首頁
討論
Arduino
這是一個不錯的想法...
評論:共1條
Blue moon
評論于:2018-08-08 15:37:43
/*
這個是兩種數據的,以DHT11溫度和濕度為例
注意 :Arduino IDE版本請使用1.6.5-1.8.2
*/
#include <aJSON.h>
#include <Wire.h>
int temp;//溫度
int humi;//濕度
int j;
unsigned int loopCnt;
int chr[40] = {0};//創建數字數組,用來存放40個bit
unsigned long time;
#define pin 3
//============= 此處必須修改============
String DEVICEID = "XXXX"; // 你的設備ID=======
String APIKEY = "XXXXXf"; // 設備密碼==
String INPUTID1 = "XXXX"; //接口ID==============
String INPUTID2 = "XXXX"; //接口ID==============
//=======================================
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() {
//溫濕度部分
bgn:
delay(2000);
//設置3號接口模式為:輸出
//輸出低電平20ms(>18ms)
//輸出高電平40μs
pinMode(pin, OUTPUT);
digitalWrite(pin, LOW);
delay(20);
digitalWrite(pin, HIGH);
delayMicroseconds(40);
digitalWrite(pin, LOW);
//設置2號接口模式:輸入
pinMode(pin, INPUT);
//高電平響應信號
loopCnt = 10000;
while (digitalRead(pin) != HIGH)
{
if (loopCnt-- == 0)
{
//如果長時間不返回高電平,輸出個提示,重頭開始。
Serial.println("HIGH");
goto bgn;
}
}
//低電平響應信號
loopCnt = 30000;
while (digitalRead(pin) != LOW)
{
if (loopCnt-- == 0)
{
//如果長時間不返回低電平,輸出個提示,重頭開始。
Serial.println("LOW");
goto bgn;
}
}
//開始讀取bit1-40的數值
for (int i = 0; i < 40; i++)
{
while (digitalRead(pin) == LOW)
{}
//當出現高電平時,記下時間“time”
time = micros();
while (digitalRead(pin) == HIGH)
{}
//當出現低電平,記下時間,再減去剛才儲存的time
//得出的值若大于50μs,則為‘1’,否則為‘0’
//并儲存到數組里去
if (micros() - time > 50)
{
chr[i] = 1;
} else {
chr[i] = 0;
}
}
//濕度,8位的bit,轉換為數值
humi = chr[0] * 128 + chr[1] * 64 + chr[2] * 32 + chr[3] * 16 + chr[4] * 8 + chr[5] * 4 + chr[6] * 2 + chr[7];
//溫度,8位的bit,轉換為數值
temp = chr[16] * 128 + chr[17] * 64 + chr[18] * 32 + chr[19] * 16 + chr[20] * 8 + chr[21] * 4 + chr[22] * 2 + chr[23];
//貝殼物聯源碼里的部分,給的源碼是一種數據的,往看注釋改哪里
if (millis() - lastCheckInTime > postingInterval || lastCheckInTime == 0) {
checkIn();
}
if (millis() - lastUpdateTime > updateInterval) {
//注意這里調用了update2,注意括號里的內容,去找update2函數,如果想傳更多的數據跟update2函數有關,末尾配寫法
update2(DEVICEID, INPUTID1, temp, INPUTID2, humi);
}
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 serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == '\n') {
stringComplete = 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 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();
}
這個參考了貝殼物聯討論一位朋友的答案,感謝這位朋友
關于數據上傳這里給大家分享一個函數格式供大家參考
void update1(int did, int inputid1, int inputid2,int inputid3,float value1 ,float value2,float value3) // 定義一次傳遞3個參數的函數
{
String str1="{\"M\":\"update\",\"ID\":\"";
str1+=did;
str1+="\",\"V\":{\"";
str1+=inputid1;
str1+="\":\"";
str1+=value1;
str1+="\",\"" ;
str1+=inputid2;
str1+="\":\"";
str1+=value2;
str1+="\",\"" ;
str1+=inputid3;
str1+="\":\"";
str1+=value3;
str1+="\"" ;
str1+="}}\n";
client.print(str1);
//下面是串口打印 傳遞到服務器的信息,以便調試
Serial.print("update:");
Serial.print(inputid1);
Serial.print("->");
Serial.println(value1);
Serial.print("update:");
Serial.print(inputid2);
Serial.print("->");
Serial.println(value2);
Serial.print("update:");
Serial.print(inputid3);
Serial.print("->");
Serial.println(value3);
}
返回頂部
三上悠亚在线观看