ESP8266とDHT22で作るWi-Fi気象観測ステーション – ThingSpeak連携
必要な部品と材料
| Espressif ESP8266 ESP-01 モジュール × 1 |
| DHT22 温湿度センサー (AM2302) × 1 |
| ブレッドボード × 1 |
| ジャンパーワイヤー × 1式 |
| UDOO USB/シリアル デバッグモジュール (またはFT232RL等のUSB-シリアル変換) × 1 |
| Arduino UNO × 1 (ESP-01への書き込み用プログラマーとして使用) |
| 3.3V 安定化電源 (LDO: AMS1117-3.3等、ESP-01用) × 1 |
| 抵抗 10kΩ × 1 (DHT22データライン プルアップ) |
プロジェクト概要
ESP8266 (ESP-01) 単体で動作するWi-Fi接続の気象観測ステーションです。DHT22センサーで温度・湿度を測定し、定期的に ThingSpeak クラウドへデータ送信。長期間の環境データを自動記録・可視化できます。Arduino UNOはESP-01へのファームウェア書き込み用プログラマーとしてのみ使用し、本番動作時は不要です。
ハードウェア接続
ESP-01 ピンアサイン (8ピン)
| ピン | 機能 | 接続先 |
|---|---|---|
| 1 | GND | 電源GND、USB-シリアルGND |
| 2 | TX | USB-シリアル RX |
| 3 | GPIO2 | DHT22 データ (プルアップ 10kΩ to 3.3V) |
| 4 | CH_PD (EN) | 3.3V (常時HIGHで有効) |
| 5 | GPIO0 | 書き込み時: GND / 通常時: 3.3V (またはフロート) |
| 6 | RST | 通常時: 3.3V (またはフロート) |
| 7 | RX | USB-シリアル TX |
| 8 | VCC | 3.3V電源 (最大170mAピーク、平均80mA) |
DHT22 接続
- VDD → 3.3V (または5V、センサー仕様確認)
- GND → GND
- DATA → ESP-01 GPIO2 (10kΩで3.3Vにプルアップ)
重要: 電源設計
ESP8266は送信時に最大 170mA 以上のピーク電流を要求します。PCのUSBポート (500mA限界) や Arduino UNO の 3.3V出力 (150mA限界) では不安定になります。**必ず専用の3.3V LDO (AMS1117-3.3, LM1117-3.3, AP2112等) を外部電源 (5V以上) から供給し、入出力に 10μF+0.1μF のバイパスコンデンサを配置してください。**
ThingSpeak 設定
- ThingSpeak でアカウント作成 → 新規チャネル作成
- フィールド1: Temperature、フィールド2: Humidity 等を設定
- Write API Key と Channel ID をメモ
- 書き込み間隔: 最短 15秒 (無料プラン)。コードでは20秒間隔に設定
Arduino IDE で ESP-01 へ書き込み
- Arduino IDE → ファイル → 環境設定 → 追加ボードマネージャURL:
https://arduino.esp8266.com/stable/package_esp8266com_index.json - ツール → ボード → ボードマネージャー → 「esp8266」インストール
- ツール → ボード → 「Generic ESP8266 Module」選択
- 設定: Flash Mode: DOUT, Flash Size: 1M (512K SPIFFS), CPU: 80MHz, Upload Speed: 115200
- GPIO0=GND、RST=GND→3.3V で書き込みモード起動 → 書き込み実行
- 書き込み後、GPIO0=3.3V (またはフロート) に戻して再起動
スケッチ (temphumwifi.ino)
#include <ThingSpeak.h>
#include <DHT.h>
#include <ESP8266WiFi.h>
#define DHTPIN 2 // GPIO2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// ThingSpeak設定 (ご自身の値に変更)
unsigned long myChannelNumber = 167319;
const char *myWriteAPIKey = "XXXP9V86RWR7R9Y";
// Wi-Fi設定
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";
WiFiClient client;
void setup() {
Serial.begin(115200);
delay(10);
dht.begin();
// Wi-Fi接続
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected");
Serial.println(WiFi.localIP());
ThingSpeak.begin(client);
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature(); // 摂氏
if (isnan(h) || isnan(t)) {
Serial.println("DHT読み取り失敗");
delay(2000);
return;
}
Serial.print("Humidity: "); Serial.println(h);
Serial.print("Temp: "); Serial.println(t);
// ThingSpeak送信 (フィールド1:湿度、フィールド2:温度)
ThingSpeak.writeField(myChannelNumber, 1, h, myWriteAPIKey);
delay(20000); // 15秒以上空ける (無料プラン制限)
ThingSpeak.writeField(myChannelNumber, 2, t, myWriteAPIKey);
delay(20000);
}
動作確認
- シリアルモニター (115200bps) で「WiFi connected」とIPアドレス確認
- ThingSpeakチャネルページでグラフ表示確認
- 長期運用時は定期的な再起動 (ウォッチドッグタイマー活用) 推奨
拡張アイデア (Step 6: さらにセンサー追加)
| センサー | 測定項目 | 接続 | 備考 |
|---|---|---|---|
| BMP280 / BME280 | 気圧、温度、湿度 | I2C (GPIO4/5) | 高度計算も可能 |
| BH1750 | 照度 (lux) | I2C | 日照時間記録 |
| MQ-135 | 大気質 (CO2等) | アナログ (ADC: A0) | ESP-01はADC 1chのみ (TOUTピン) |
| 風速計/雨量計 | 風速、降水量 | GPIO割り込み | パルスカウント |
| 土壌水分センサー | 土壌湿度 | ADC | 農業IoT向け |
ThingSpeakは1チャネル8フィールドまで対応。複数センサー統合に最適。
トラブルシューティング
- Wi-Fi接続失敗: SSID/パスワード確認、2.4GHz帯のみ対応 (5GHz不可)、電源不足確認
- DHT読み取り失敗 (NaN): 配線確認、プルアップ抵抗、電源電圧、センサー不良
- ThingSpeak 400/429 エラー: APIキー/チャネルID確認、書き込み間隔 15秒以上守る
- 書き込み後動作しない: GPIO0 が GND のまま (書き込みモード) になっていないか確認
参考リソース
- 「エル・プロフェ・ガルシア」YouTube: ESP8266直書き込み手順の解説動画
- ThingSpeak Arduino ライブラリ ドキュメント
- ESP8266 Arduino Core GitHub
製造プロセス
- Raspberry PiとPythonでリモート温度センサーを構築 – ステップバイステップガイド
- Raspberry Piで気象観測ステーションを構築し、日次天気データをメール送信
- Raspberry PiとDS18B20でマルチセンサー温度・光監視システムを構築
- Raspberry Piでセンサーとアクチュエータを制御:加速度計、サーボ、データストリーミング
- 湿度センサーの検証とキャリブレーションで精密測定を実現
- Windows 10 IoT CoreとSHT15センサーで高精度な温湿度モニタリング
- Arduino Portenta H7にMAX6675でサーモカップル温度センサーを接続する
- DHT11温湿度センサーで作る温度アラート – LEDとピエゾブザーで視覚/聴覚通知
- ESP8266・Arduino・超音波センサーで作るスマートIoTジャー:リアルタイム中身監視
- 川の健康を見守る:Arduinoベース水質監視システム「MyRiver」
- DFRobot静電容量式指紋センサーをArduino/ESP8266で使う – 登録・認証・削除の完全ガイド