文章目錄
- 實驗內容
- 實驗器件
- 實驗連線
- 實驗步驟
- 實驗代碼
- 實驗結果
- 庫檔案
實驗內容
使用 ESP8266 連接并連接貝殼物聯平臺 (需要對ESP8266進行透傳聯網),并溫濕度資料上傳,
貝殼物聯的使用手冊,
實驗器件
- arduino UNO X 1
- ESP8266-01s X 1
- DHT11溫濕度傳感器 X 1
- USB資料燒寫線 X 1
- 面包板 x 1
- 杜邦線 X 10
實驗連線
| ESP8266 | Arduino |
|---|---|
| 3v3 | 3.3V |
| GND | GND |
| EN | 3.3V |
| RX | TX |
| TX | RX |
| DHT11 | Arduino |
|---|---|
| VCC | 5V |
| GND | GND |
| DATA | 2 |
實驗步驟
- 根據連線表格,將ESP8266、DHT11與Arduino開發板進行連接;
- 將代碼中“DEVICEID”、“APIKEY”、“INPUTID”進行修改,
- 將Arduino開發板與電腦通過USB燒寫線進行連接(上傳時RX與TX不要連接,上傳完再連接)
- 使用Arduino IDE將代碼驗證并上傳
- 上傳成功后,在貝殼物聯平臺查看資料,
實驗代碼
注意:記得修改代碼中的“DEVICEID”、“APIKEY”、“INPUTID1”、“INPUTID2”,
#include <aJSON.h> //參考庫檔案
#include <dht11.h> //參考dht11庫檔案
#define dht11Pin 2 //定義溫濕度針腳號為2號引腳
//============= 此處必須修改============
String DEVICEID = "設備ID"; // 你的設備ID=======
String APIKEY = "設備APIKEY"; // 設備密碼==
String INPUTID1 = "資料介面1"; //介面ID1==============
String INPUTID2 = "資料介面2"; //介面ID2==============
//=======================================
dht11 dht; //實體化一個物件
unsigned long lastCheckStatusTime = 0; //記錄上次報到時間
unsigned long lastUpdateTime = 0;//記錄上次上傳資料時間
const unsigned long postingInterval = 40000; // 每隔40秒向服務器報到一次
const unsigned long updateInterval = 5000; // 資料上傳間隔時間5秒
unsigned long checkoutTime = 0;//登出時間
void setup() {
pinMode(dht11Pin, OUTPUT); //通過定義將Arduino開發板上dht11Pin引腳(2號口)的作業模式轉化為輸出模式
Serial.begin(115200);
delay(5000);//等一會兒ESP8266
}
void loop() {
//每一定時間查詢一次設備在線狀態,同時替代心跳
if (millis() - lastCheckStatusTime > postingInterval) {
checkStatus();
}
//checkout 50ms 后 checkin
if ( checkoutTime != 0 && millis() - checkoutTime > 50 ) {
checkIn();
checkoutTime = 0;
}
//每隔一定時間上傳一次資料
if (millis() - lastUpdateTime > updateInterval) {
int tol = dht.read(dht11Pin); //將讀取到的值賦給tol
float temp = (float)dht.temperature; //將溫度值賦值給temp
float humi = (float)dht.humidity; //將濕度值賦給humi
delay(1000); //延時1秒
update2(DEVICEID, INPUTID1, temp, INPUTID2, humi);
lastUpdateTime = millis();
}
//讀取串口資訊
while (Serial.available()) {
String inputString = Serial.readStringUntil('\n');
//檢測json資料是否完整
int jsonBeginAt = inputString.indexOf("{");
int jsonEndAt = inputString.lastIndexOf("}");
if (jsonBeginAt != -1 && jsonEndAt != -1) {
//凈化json資料
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);
}
}
}
//設備登錄
//{"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");
}
//強制設備下線,用消除設備掉線延時
//{"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");
}
//查詢設備在線狀態
//{"M":"status"}\n
void checkStatus() {
Serial.print("{\"M\":\"status\"}\n");
lastCheckStatusTime = millis();
}
//處理來自ESP8266透傳的資料
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();
}
}
//上傳一個介面資料
//{"M":"update","ID":"2","V":{"2":"120"}}\n
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("\"}}");
}
//同時上傳兩個介面資料呼叫此函式
//{"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("\"}}");
}
實驗結果
待我們上傳完代碼后,重繪貝殼物聯首頁面,即可看到設備在線狀態,

點擊資料介面右側的資料查看按鈕即可查看上傳的資料情況,

溫度介面資料情況,

濕度介面資料情況,

好了,大功告成!恭喜你!
庫檔案
需要的庫檔案,為了下載方便,我上傳到了藍奏云,如果失效了,請聯系我,
aJson 密碼:8uwy
dht11 密碼:gsvs
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/272316.html
標籤:其他
