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

求大神??!三個(gè)數(shù)據(jù)串口只有一個(gè)能用

作者:亂臣賊子 | 更新時(shí)間:2020-03-22 | 瀏覽量:1495

我是做溫濕度監(jiān)測,用的示例wendu的代碼,改變了串口和溫濕度讀取函數(shù)其他沒有變。兩次引用示例中update1函數(shù)分別上傳溫濕度到兩個(gè)數(shù)據(jù)串口。但是只有第一個(gè)數(shù)據(jù)可以收到溫度或濕度。另外的串口不能用。此外我又建立了第三個(gè)數(shù)據(jù)串口依舊如此。有沒有大神指點(diǎn)一下?


評論:共8條

lwl 評論于:2020-03-23 02:04:25
看不懂,最好把核心代碼貼出來
亂臣賊子 回復(fù)于:2020-03-24 01:12:27
回復(fù) @lwl:對不起,疏忽了。因?yàn)槌醪綉?yīng)用,所以代碼只改了幾處
注意 :Arduino IDE版本請使用1.6.5-1.8.2
ESP8266模塊在接Arduino之前請確定透傳穩(wěn)定性,在串口查看ESP8266是否能多次收到WELCOME TO BIGIOT,
能多次收到說明透傳穩(wěn)定且能自動(dòng)重連。
時(shí)間:2018.12.4
作者:m.placeboworld.cn
*/
#include <aJSON.h>
#include <DHT11.h>
//============= 此處必須修改============
String DEVICEID = "17***0"; // 你的設(shè)備ID ==
String APIKEY = "********"; //設(shè)備密碼=
String INPUTID1 = "15212"; //接口ID==============
String INPUTID2 = "15214"; //接口ID==============
String INPUTID3 = "15215"; //接口ID==============
//=======================================*/
#define dht11Pin 8 //定義溫濕度針腳號為8號引腳
dht11 dht; //實(shí)例化一個(gè)對象
unsigned long lastCheckStatusTime = 0; //記錄上次報(bào)到時(shí)間
unsigned long lastUpdateTime = 0;//記錄上次上傳數(shù)據(jù)時(shí)間
const unsigned long postingInterval = 40000; // 每隔40秒向服務(wù)器報(bào)到一次
const unsigned long updateInterval = 5000; // 數(shù)據(jù)上傳間隔時(shí)間5秒
unsigned long checkoutTime = 0;//登出時(shí)間
void setup() {
Serial.begin(115200);
delay(5000);//等一會兒ESP8266
}
void loop() {
//每一定時(shí)間查詢一次設(shè)備在線狀態(tài),同時(shí)替代心跳
if (millis() - lastCheckStatusTime > postingInterval) {
checkStatus();
}
//checkout 50ms 后 checkin
if ( checkoutTime != 0 && millis() - checkoutTime > 50 ) {
checkIn();
checkoutTime = 0;
}
//每隔一定時(shí)間上傳一次數(shù)據(jù)
if (millis() - lastUpdateTime > updateInterval) {
int tol = dht.read(dht11Pin); //將讀取到的值賦給tol
int temp = (float)dht.temperature; //將溫度值賦值給temp
int humi = (float)dht.humidity; //將濕度值賦給humi
/*
update2(DEVICEID, INPUTID1, temp, INPUTID2, humi);//引用update函數(shù)上傳數(shù)據(jù)到云平

*/
update1(DEVICEID, INPUTID1,humi);
update1(DEVICEID, INPUTID2,temp);
lastUpdateTime = millis();
}
//讀取串口信息
while (Serial.available()) {
String inputString = Serial.readStringUntil('\n');
//檢測json數(shù)據(jù)是否完整
int jsonBeginAt = inputString.indexOf("{");
int jsonEndAt = inputString.lastIndexOf("}");
if (jsonBeginAt != -1 && jsonEndAt != -1) {
//凈化json數(shù)據(jù)
inputString = inputString.substring(jsonBeginAt, jsonEndAt + 1);
int len = inputString.length() + 1;
char jsonString[len];
inputString.toCharArray(jsonString, len);
aJsonObject *msg = aJson.parse(jsonString);
processMessage(msg);
aJson.deleteItem(msg);
}
}
}
//設(shè)備登錄
//{"M":"checkin","ID":"xx1","K":"xx2"}\n
void checkIn() {
Serial.print("{\"M\":\"checkin\",\"ID\":\"");
Serial.print(DEVICEID);
Serial.print("\",\"K\":\"");
Serial.print(APIKEY);
Serial.print("\"}\n");
}
//強(qiáng)制設(shè)備下線,用消除設(shè)備掉線延時(shí)
//{"M":"checkout","ID":"xx1","K":"xx2"}\n
void checkOut() {
Serial.print("{\"M\":\"checkout\",\"ID\":\"");
Serial.print(DEVICEID);
Serial.print("\",\"K\":\"");
Serial.print(APIKEY);
Serial.print("\"}\n");
}

//查詢設(shè)備在線狀態(tài)
//{"M":"status"}\n
void checkStatus() {
Serial.print("{\"M\":\"status\"}\n");
lastCheckStatusTime = millis();
}

//處理來自ESP8266透傳的數(shù)據(jù)
void processMessage(aJsonObject *msg) {
aJsonObject* method = aJson.getObjectItem(msg, "M");
if (!method) {
return;
}
String M = method->valuestring;
if (M == "WELCOME TO BIGIOT") {
checkOut();
checkoutTime = millis();
return;
}
if (M == "connected") {
checkIn();
}
}
//上傳一個(gè)接口數(shù)據(jù)
//{"M":"update","ID":"2","V":{"2":"120"}}\n
void update1(String did, String inputid,int value){
Serial.print("{\"M\":\"update\",\"ID\":\"");
Serial.print(did);
Serial.print("\",\"V\":{\"");
Serial.print(inputid);
Serial.print("\":\"");
Serial.print(value);
Serial.println("\"}}");
}
//同時(shí)上傳兩個(gè)接口數(shù)據(jù)調(diào)用此函數(shù)
//{"M":"update","ID":"112","V":{"6":"1","36":"116"}}\n
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("\"}}");
}
//上傳更多數(shù)據(jù),可以參考上面的寫法,和通訊協(xié)議,自己添加。
//貝殼物聯(lián)通訊協(xié)議:http://m.placeboworld.cn/help/1.html
fengzaiqingdao 評論于:2020-03-24 12:02:14
update1同時(shí)上傳1個(gè)參數(shù),如果多次調(diào)用會被前面的update1覆蓋,建議根據(jù)需要例程中的子程序update(比如,你有2個(gè)參數(shù),就調(diào)用update2;3個(gè)參數(shù),自己照著寫一個(gè)update3,同時(shí)上傳3個(gè)參數(shù))
亂臣賊子 回復(fù)于:2020-03-24 16:39:13
回復(fù) @fengzaiqingdao:我也用了,但情況是一樣的。串口通訊中顯示有兩個(gè)參數(shù)上傳,但是平臺還是一個(gè)。我在想是不是bug還是我沒資格用兩個(gè)數(shù)據(jù)串口……
亂臣賊子 回復(fù)于:2020-03-26 10:16:49
回復(fù) @fengzaiqingdao哥哥哥哥,我試了一下,又可以了,謝謝謝謝?。。?
HCW 回復(fù)于:2020-04-17 00:44:05
回復(fù) @fengzaiqingdao:void update2(String did, String inputid1, float value1, String inputid2, float value2,String inputid3, float value3) {
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.print("\",\"");
Serial.print(inputid3);
Serial.print("\":\"");
Serial.print(value3);
Serial.println("\"}}");

前輩,您好。抱歉打擾您了,我也是和樓主一樣的問題,我改了這個(gè)函數(shù),還是不行,請問是哪里有不對的地方嗎?
HCW 評論于:2020-04-17 00:44:41
前輩您好,請問您是怎么解決的?虛心向您請教。
亂臣賊子 回復(fù)于:2020-04-18 20:08:27
回復(fù) @HCW:我問過一個(gè)四位的串口數(shù)據(jù)上傳,后來我自己檢查是因?yàn)榉柍鲥e(cuò)了,然后我在自己的帖子下面貼出了正確的,要不你先看看?我手邊沒有電腦,不太容易對比
返回頂部