Lab12-2
WIFI 上傳 thingspeak (DHT22溫度溼度)
[數據上傳至ThingSpeak網站]
1. 先到ThingSpeak網誌註冊自己的帳號:https://thingspeak.com/,請自己的email@前的帳號來當作註冊ID,並新增一個頻道(channel)、包括兩個顯示圖(Field)。
2. 參考Lab9的電路,連接溫濕度感測器DHT22。
3. 溫濕度數據透過wifi,上傳至ThingSpeak,程式碼如下。
#include <SoftwareSerial.h>
SoftwareSerial esp8266(4,5);
String apiKey = ""; // ""內輸入ThingSpeak的Write API Key
String ssid = ""; // ""內輸入wifi基地台的名稱
String password = ""; // ""內輸入wifi基地台的密碼
boolean DEBUG = true;
#include "DHT.h" // 匯入DHT函式庫
DHT dht(2, DHT22); // DHT22的訊號接到pin2
void showResponse(int waitTime){
long t=millis();
char c;
while (t+waitTime>millis()){
if (esp8266.available()){
c=esp8266.read();
if (DEBUG) Serial.print(c);
}
}
}
boolean thingSpeakWrite(float value1, float value2){ //自己增加或減少要上傳的數據項目
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += "184.106.153.149";
cmd += "\",80";
esp8266.println(cmd);
if (DEBUG) Serial.println(cmd);
if(esp8266.find("Error")){
if (DEBUG) Serial.println("AT+CIPSTART error");
return false;
}
String getStr = "GET /update?api_key=";
getStr += apiKey;
getStr +="&field1=";
getStr += String(value1);
getStr +="&field2=";
getStr += String(value2);
// getStr +="&field3="; //自己增加或減少要上傳的數據項目
// getStr += String(value3);
// ...
getStr += "\r\n\r\n";
cmd = "AT+CIPSEND=";
cmd += String(getStr.length());
esp8266.println(cmd);
if (DEBUG) Serial.println(cmd);
delay(100);
esp8266.print(getStr);
if (DEBUG) Serial.print(getStr);
else{
esp8266.println("AT+CIPCLOSE");
if (DEBUG) Serial.println("AT+CIPCLOSE");
return false;
}
return true;
}
void setup() {
Serial.begin(9600);
//wifi的設定要排在前面
esp8266.begin(115200);
esp8266.write("AT+UART_DEF=9600,8,1,0,0\r\n");
delay(1500);
esp8266.begin(9600);
Serial.println("ESP8266...OK");
esp8266.println("AT+CWMODE=1"); // set esp8266 as client
showResponse(10000);
esp8266.println("AT+CWJAP=\""+ssid+"\",\""+password+"\"");
showResponse(10000); //顯示並等待wifi完成連線
//其他零件的設定排在後面
dht.begin();
}
void loop() {
float dhtT = dht.readTemperature();
float dhtH = dht.readHumidity();
Serial.println("Temp="+String(dhtT)+" *C");
Serial.println("Humidity="+String(dhtH)+" %");
delay(1000); // 傳送資料前,最好等待一秒處理再上傳
thingSpeakWrite(dhtT, dhtH); //自己增加或減少要上傳的數據項目
delay(20000); // thingspeak需要15秒以上才能更新
}
[成果]
[基本問題]
1. 完成電路與程式,並將數據呈現在Thingspeak上。
[挑戰問題]
1. 調整圖表的呈現方式,包括資料量、時間間隔、圖表類型等不同呈現方式。