ESP32を用いてLCDに温湿度センサーの値を表示してみた‼
本日はESP32を使ってLCD(液晶ディスプレイ)に温度センサーの値を表示してみたいと思います‼
結構難しいイメージかもしれませんが、想像以上に簡単なので、是非、お試しを^^
※Arduinoで試されたいかたはこちら⇩
①「部品準備」
・LCDディスプレイ (LCD1602A) (シリアルインタフェースボードモジュール)
電子工作ステーション 640円(送料無料)
・温度センサー(なんでもOK)
今回は電子工作ステーションさんのDHT22温湿度センサーモジュールを使います。
DHT22温湿度センサーモジュール 560円(送料無料)
・ESP-WROOM-32
電子工作ステーション 1090円(送料無料)(30pinモデル)
電子工作ステーション 1750円(送料無料)(ESP32D)(38pinモデル)
・通信対応USBケーブル(無ければ)
電子工作ステーション 990円(送料無料)
・ジャンパーワイヤー(メス・メス)(7本)
②「配線」
・今回電子工作ステーションさんで購入したLCDディスプレイはシリアルインターフェイスがすでに付いている状態なので、
たった4本のピンを繋ぐだけで機能します。
今回使用しているLCD1602Aは、2行x16文字表示でき、動作電圧はDC5VとなっていますのでArduinoの5Vから電源を取ります。
LCD1602A | ESP32 |
GND | GND |
VCC | 5V |
SDA | 21 |
SCL | 22 |
・DHT22センサーは動作電圧3~5.5Vまで幅広く対応しています。今回はLCD1602AでArduinoの5Vピンを使ってしまっているので、こちらは3.3Vピンから電源を取ります。
測定範囲は温度が-40℃~80℃(±0.5℃)、湿度が0〜100%(±2%)と、日常生活上の温湿度計としては十分役に立ちそうな精度ですね!
DHT22 | ESP32 |
DAT | 2 |
VCC | 3.3V |
GND | GND |
③「開発環境整備」
まず、Arduino IDEが無い方は、Arduino IDEをダウンロードし開発環境を整えましょう‼
ArduinoIDEでESP32を使えるようにしていない方はこちらもしておきましょう➡Arduino IDEでESP-WROOM-32を使えるようにする!
あとはDHTセンサーのライブラリーと、LCDディスプレイのライブラリー、2点をインストールするだけです。
Arduino IDEを開き、ツール⇒ライブラリー管理を選択、
「DHT sensor library」を検索しインストールします。
これでDHT センサーが使えるようになります。
インストール完了したら、最後に、LCDディスプレイを使えるようにするために、
LiquidCrystal_I2C というライブラリーを入れます‼
手順は先ほどと同じで、ツール⇒ライブラリー管理を選択、
「LiquidCrystal_I2C」を検索しインストールします。
(上から3ん番目ぐらいに出てくるかと思います、「jm_LiquidCrystal_I2C」というものです。)
これで開発環境は整いましたので、次は待ちに待ったプログラミングです‼
④「プログラミング」
下記のコードをコピペして貼り付けるだけで動くはずです‼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
//LEDディスプレイ #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); //DHTセンサー #include <Adafruit_Sensor.h> #include <DHT.h> #include <DHT_U.h> #define DHTPIN 2 // Digital pin connected to the DHT sensor #define DHTTYPE DHT22 // DHT 22 (AM2302) DHT_Unified dht(DHTPIN, DHTTYPE); uint32_t delayMS; //取得数値格納用 double s = 0; void setup() { Serial.begin(9600); //初期化 dht.begin(); Serial.println(F("DHTxx Unified Sensor Example")); // 温度、湿度センサーの詳細をセット sensor_t sensor; dht.temperature().getSensor(&sensor); dht.humidity().getSensor(&sensor); // センサーの詳細に基づいて、センサー読み取り間の遅延を設定します。 delayMS = sensor.min_delay / 1000; //ディスプレイに最初のみHello, world!と表示。 lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("Hello, world!"); } void loop() { //測定間の遅延。 delay(delayMS); //温度イベントを取得。 sensors_event_t event; dht.temperature().getEvent(&event); if (isnan(event.temperature)) { Serial.println(F("Error reading temperature!")); } else { //シリアルモニターに温度表示 Serial.print(F("Temperature: ")); Serial.print(event.temperature); //ディスプレイに温度表示 s = event.temperature; lcd.clear(); lcd.setCursor(0, 0); lcd.print("Tem"); lcd.print(s); lcd.print("C"); } // 湿度イベントを取得。 dht.humidity().getEvent(&event); if (isnan(event.relative_humidity)) { Serial.println(F("Error reading humidity!")); } else { //シリアルモニターに湿度表示 Serial.print(F("Humidity: ")); Serial.print(event.relative_humidity); Serial.println(F("%")); //ディスプレイに湿度表示 s = event.relative_humidity; lcd.setCursor(0, 1); lcd.print("Hum"); lcd.print(s); lcd.print("%"); } } |
⑤「結果」
上手くビルドが完了すると、最初に「Hello, world!」と表示され、
数秒後にセンサーの値が表示されます‼
これでリアルタイムな温度と湿度が可視化できるようになりました‼
他のセンサーにも応用できますので是非、いろいろ試してみてください^^
※液晶に何も表示されない、もしくは文字が薄い場合は、LEDディスプレイ裏面にある、
半固定抵抗で調整できます‼
以上、ご閲覧ありがとうございます。
ご不明点等ございましたらお気軽にコメントください^^