DIYのWifi温度計 (ESP-WROOM-02, ThingSpeak, DHT22)
DIYのWifi温度計 (ESP-WROOM-02, ThingSpeak, DHT22)
ESP-WROOM-02, ThingSpeak, DHT22を使って、Wifi無線の温度計を作る。
測定データの例は、https://thingspeak.com/channels/97919
追記:自分でデータベースを用意する方法もあります。興味のあるかたは、以下の方を参考にどうぞ。
Raspberry Pi Web ServerRaspberry Pi を使う方法。
INAの日記
材料リスト
Wi−Fiモジュール ESP−WROOM−02 DIP化キット (650円)
http://akizukidenshi.com/catalog/g/gK-09758/
ブレッドボード BB−801 (200円)
http://akizukidenshi.com/catalog/g/gP-05294/
超小型USBシリアル変換モジュール (600円)
http://akizukidenshi.com/catalog/g/gM-08461/
温湿度センサ モジュール AM2302 (950円)
http://akizukidenshi.com/catalog/g/gM-07002/
ブレッドボード・ジャンパーコード(オス−オス)セット (220円)
http://akizukidenshi.com/catalog/g/gC-05159/
USBケーブル Aオス−マイクロBオス 1.5m A−microB (120円)
http://akizukidenshi.com/catalog/g/gC-07607/
低損失三端子レギュレーター 3.3V500mA TA48M033F(S Q) (100円)
http://akizukidenshi.com/catalog/g/gI-00538/
電池ボックス 単3×4本用 (60円)
http://akizukidenshi.com/catalog/g/gP-02678/
□単3形アルカリ乾電池 4本(百均ショップで購入可、〜100円)
タクトスイッチ (10個入) (120円) 必要個数2個
http://akizukidenshi.com/catalog/g/gP-08080/
カーボン抵抗(炭素皮膜抵抗) 1/2W 10kΩ (100本入) 必要個数3本
http://akizukidenshi.com/catalog/g/gR-07838/
はんだ付けに必要なもの:
□はんだゴテ(百均ショップで購入、〜300円)
□はんだ(百均ショップで購入、〜100円)
組立図
[:large]
写真には載っていないが単3を4本が電源。USB供給の電源だけでは電流容量が足りないので注意のこと。
ThingSpeak
Thingskpeakのチャンネルでは、field1が温度
field2が相対湿度
準備編:【IoTをDIY!】ThingSpeakで作る湿温度モニターを参照して、ThingSpeakのアカウントとチャンネルの設定などの前準備を行う。
プログラム
Arduino IDE 1.6.8でプログラムuploadする。
追記:アップロードするときは、”Mechanic Note PILOT神山ラボのブログ”で述べているように、IO0をGNDにつなぎ(写真の上のボタンを押したまま)、そのあとREST(またはRSTと表記、写真の写真のボタンを押して離す)をGNDに一旦落としてリセットしてからUPDOADする手順になります。
セッテイングはとりあえずどんな設定でも動くようだが、、、、一応こんなんでuploadしました。
プログラムは10分毎に温度と相対湿度を計測、計測後はdeep sleepモードになる省エネ運用になっている。
準備:ArduinoにESP-WROOM-02ボードを追加するを参照して、ArduinoIEDでESP-WROOM-02ボードが利用できるように前準備を行う。
準備:ここを参考に、DHTxx SensorのLibraryを入れる。
書き換えるのはプログラム中のXXXXの部分(""は消さない)。
const char* ssid = "XXXXX";
const char* password = "XXXXX";
const char* host = "api.thingspeak.com";
const char* thingspeak_key = "XXXX";
それぞれ、
自宅のWifiルーターのSSID
自宅のWifiルーターのパスワード
thingspeal.comで発行されたthingspeak_key
/* This sketch sends data via HTTP GET requests to thingspeak service every 10 minutes You have to set your wifi credentials and your thingspeak key. */ #include <ESP8266WiFi.h> extern "C" { #include "user_interface.h" } #include "DHT.h" #define DHTPIN 2 // what pin we're connected to // Uncomment whatever type you're using! //#define DHTTYPE DHT11 // DHT 11 #define DHTTYPE DHT22 // DHT 22 (AM2302) //#define DHTTYPE DHT21 // DHT 21 (AM2301) DHT dht(DHTPIN, DHTTYPE, 30); const char* ssid = "XXXX"; const char* password = "XXXX"; const char* host = "api.thingspeak.com"; const char* thingspeak_key = "XXXX"; void turnOff(int pin) { pinMode(pin, OUTPUT); digitalWrite(pin, 1); } void setup() { Serial.begin(115200); turnOff(12); dht.begin(); delay(100); // We start by connecting to a WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { ////////////// delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } //int value = 0; void loop() { delay(2000); float t = dht.readTemperature(); float h = dht.readHumidity(); Serial.print(t); while (isnan(t) || isnan(h)) { delay(2000); t = dht.readTemperature(); h = dht.readHumidity(); Serial.print(t); } Serial.print("connecting to "); Serial.println(host); // Use WiFiClient class to create TCP connections WiFiClient client; const int httpPort = 80; if (!client.connect(host, httpPort)) { Serial.println("connection failed"); return; } String temp = String(t); String humidity = String(h); // String voltage = String(system_get_free_heap_size()); String url = "/update?key="; url += thingspeak_key; url += "&field1="; url += temp; url += "&field2="; url += humidity; // url += "&field3="; // url += voltage; Serial.print("Requesting URL: "); Serial.println(url); // This will send the request to the server client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); delay(10); // Read all the lines of the reply from server and print them to Serial while (client.available()) { String line = client.readStringUntil('\r'); Serial.print(line); } Serial.println(); Serial.println("closing connection. going to sleep..."); delay(1000); // go to deepsleep for 10 minutes system_deep_sleep_set_option(0); system_deep_sleep(10 * 60 * 1000000); }