DHT11とESP32で実現!自宅で作るIoT温湿度計測システム
ThingSpeakという面白そうなサービス見つけたので、遊んでみることにしました。このプロジェクトでは、ESP32マイクロコントローラーとDHT11温湿度センサーを組み合わせて、環境データをリアルタイムで監視します。
ThingSpeakを使用して、センサーからのデータをリアルタイムでグラフにすることで、温度と湿度の変化を直感的に追跡できます。
プロジェクトの準備
このセクションでは、IoTプロジェクトを開始するために必要なパーツとサービスについて説明します。
必要なパーツ:
- ・ESP32 devkitc v1
- ・DHT11
- ・ブレッドボード
- ・ジャンプワイヤー
- ・抵抗(5.16 kOhms 1%)
利用したサービス:
データの視覚化と監視にはThingSpeakを使用しました。これはIoTデバイスからのデータを収集し、グラフ化することができるクラウドベースのサービスです。
ソースコード
#include <WiFi.h> // WiFi機能を利用するためのライブラリ
#include <DHT.h> // DHTセンサーを利用するためのライブラリ
#include "secrets.h" // WiFi接続情報とThingSpeakのAPIキーを含む秘密情報
#include "ThingSpeak.h" // ThingSpeakライブラリ
#define DHTPIN 22 // DHTセンサーが接続されているピンの番号
#define DHTTYPE DHT11 // 使用するDHTセンサーのタイプを指定
DHT dht(DHTPIN, DHTTYPE); // DHTセンサーのインスタンスを作成
WiFiClient client; // WiFiクライアントのインスタンスを作成
void setup() {
Serial.begin(115200); // シリアル通信の初期化
dht.begin(); // DHTセンサーの初期化
WiFi.mode(WIFI_STA); // WiFiをステーションモードに設定
ThingSpeak.begin(client);// ThingSpeakの初期化
}
void loop() {
// WiFi接続が切れている場合は再接続を試みる
if (WiFi.status() != WL_CONNECTED) {
Serial.print("接続中 ");
Serial.println(SECRET_SSID);
WiFi.begin(SECRET_SSID, SECRET_PASS); // WiFiに接続
while (WiFi.status() != WL_CONNECTED) {
delay(5000); // 接続が完了するまで待機
Serial.print(".");
}
Serial.println("\\n接続完了");
}
float temp = dht.readTemperature(); // 温度を読み取る
float humi = dht.readHumidity(); // 湿度を読み取る
Serial.print("温度: ");
Serial.print(temp);
Serial.print("[℃]");
Serial.print(" 湿度: ");
Serial.print(humi);
Serial.println("[%]");
// ThingSpeakのフィールドにデータを設定
ThingSpeak.setField(1, temp);
ThingSpeak.setField(2, humi);
// ThingSpeakにデータを送信
int x = ThingSpeak.writeFields(SECRET_CH_ID, SECRET_WRITE_APIKEY);
if (x == 200) {
Serial.println("データ送信成功");
} else {
Serial.println("送信エラー: HTTPステータスコード " + String(x));
}
delay(20000); // 20秒待機し、次の測定までの間隔を設ける
}
追加ファイル: secrets.h
プロジェクトには別途secrets.h
ファイルが必要です。このファイルにはWiFi接続情報とThingSpeakのAPIキーを定義します。このファイルは同一フォルダー内に作成してください。
// WiFiの設定
#define SECRET_SSID "********" // WiFiのSSID
#define SECRET_PASS "********" // WiFiのパスワード
// ThingSpeakの設定
#define SECRET_CH_ID ******** // ThingSpeakのチャンネルID
#define SECRET_WRITE_APIKEY "********" // ThingSpeakのWrite APIキー
Arduino標準ライブラリ
- Serial.begin():
Serial.begin(speed)でシリアル通信を初期化します。speedは通信速度(ボーレート)をボーで指定します。
例: Serial.begin(115200)は115200 bpsでシリアル通信を開始します。 - delay(milliseconds):
delay(ms)でプログラムの実行を指定されたミリ秒数だけ一時停止します。
例: delay(5000)は5秒間プログラムを一時停止します。
ESP32 WiFiライブラリ
DHTセンサーライブラリ
- dht.begin():
dht.begin()でDHTセンサーを初期化します。
例: 初期化後にセンサーからデータを読み取ることができます。 - dht.readTemperature():
dht.readTemperature()でセンサーから温度データを読み取ります。摂氏温度が戻り値です。
例: float temp = dht.readTemperature()で温度を変数tempに保存します。 - dht.readHumidity():
dht.readHumidity()でセンサーから湿度データを読み取ります。湿度のパーセンテージが戻り値です。
例: float humidity = dht.readHumidity()で湿度を変数humidityに保存します。
ThingSpeakライブラリ
- ThingSpeak.begin(client):
ThingSpeak.begin(client)でThingSpeak通信の初期化を行います。clientはWiFiClientのインスタンスです。
例: ThingSpeak.begin(client)でThingSpeakへの接続準備が整います。 - ThingSpeak.setField(field, data):
ThingSpeak.setField(field, data)でThingSpeakの特定のフィールドにデータを設定します。fieldはフィールド番号、dataは送信するデータです。
例: ThingSpeak.setField(1, temperature)でフィールド1に温度データを設定します。 - ThingSpeak.writeFields(SECRET_CH_ID, SECRET_WRITE_APIKEY):
ThingSpeak.writeFields(channelNumber, writeAPIKey)で設定されたフィールドのデータをThingSpeakに送信します。channelNumberはチャンネルID、writeAPIKeyはAPIキーです。
例: ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey)でデータをThingSpeakに送信します。
出力結果
以下のチャートは、ESP32とDHT11センサーから取得した温度と湿度のデータをThingSpeakにアップロードした実際の結果です。これにより、環境の変化を視覚的に確認することができます。
食洗機NP-TZ300のピピッ音を止める!自分でできる簡単修理法
購入して2年が経過し、突然私のNP-TZ300食洗機が「ピピッ、ピピッ」と警告音を鳴らし、運転が停止しました。この問題は多くのユーザーが経験しており、ドアセンサーの不具合が主な原因です。
ドアセンサーの故障が原因か?
ドアが確実に閉まっているにも関わらず、エラー音が鳴り続ける場合、ドアセンサーの故障が疑われます。センサーがドアの開閉を正しく検知できていないことが、この問題の根本的な原因です。
赤くマークした部分をドライバーでちょっと触ってみると、センサーがあることがわかります。ドアの爪がセンサーにもう少し深く届けば、問題が解決するかもしれません。
3Dプリントパーツでの修理
そこで、3Dプリンターを使って、センサーを深く押し込むことができるカバーをを作ってみました。この部品をドアの爪に取り付けたら、なんと!食洗機がまた元気に動き出しました。
この部品のデータはこちらのサイトにアップロードしていますので、同じ問題に直面している方はぜひ使ってみてください。
3Dプリンターがない場合
3Dプリンターを持っていない方は、サランラップで代用する方法もあります。ドアの爪にサランラップを数周巻きつけて太くすれば、センサーが正しく検知しやすくなります。
注意事項
これらの修理方法を試す場合は、すべて自己責任で行ってください。不適切な修理は、さらなる故障や安全上の問題を引き起こす可能性があります。疑問や不安がある場合は、専門家に相談することをお勧めします。
※この記事はChatGPTによって生成されています。