はじめに
前回(#3 Gmail通知編)でCO2が高くなったらメールで通知できるようになりました。
今回はCO2濃度を LCDに表示 して、PCがなくても手軽に確認できるようにします。
なぜLCDをつけるのか
これまではCO2濃度をPCのSerial Monitorでしか確認できませんでした。
つまりPCを開いていないと数値が見られず、手軽さに欠けていました。
LCDをつければPCなしで、ぱっと見るだけでCO2濃度がわかります。これが今回の目的です。
使用する部品
| 部品 | 説明 |
|---|---|
| LCD1602 | 16文字×2行のキャラクタ液晶 |
| ジャンパー線 | 配線用 |
LCD1602は電子工作の定番ディスプレイで、16文字を2行表示できます。
配線
LCD1602とESP32を以下のように接続します。
| LCD1602 | 役割 | ESP32 |
|---|---|---|
| 1 (VSS) | GND | GND |
| 2 (VDD) | 電源 | 5V |
| 3 (V0) | コントラスト | GND |
| 4 (RS) | レジスタ選択 | GPIO19 |
| 5 (RW) | 読み書き | GND |
| 6 (EN) | イネーブル | GPIO23 |
| 11 (D4) | データ | GPIO18 |
| 12 (D5) | データ | GPIO17 |
| 13 (D6) | データ | GPIO16 |
| 14 (D7) | データ | GPIO15 |
| 15 (A) | バックライト+ | 5V |
| 16 (K) | バックライト- | GND |
ピンが多いので、配線は1本ずつ確認しながら進めるのがおすすめです。
使用ライブラリ
-
LiquidCrystalby Arduino, Adafruit
コード
CO2濃度に応じて4段階のレベルを表示します。
#include <LiquidCrystal.h>
#include <HardwareSerial.h>
#include <MHZ19.h>
MHZ19 myMHZ19;
HardwareSerial mySerial(2);
LiquidCrystal lcd(19, 23, 18, 17, 16, 15);
void setup() {
Serial.begin(115200);
mySerial.begin(9600, SERIAL_8N1, 13, 14);
myMHZ19.begin(mySerial);
myMHZ19.autoCalibration(false);
lcd.begin(16, 2);
lcd.clear();
}
void loop() {
lcd.clear();
int co2 = myMHZ19.getCO2();
lcd.setCursor(0, 0);
lcd.print("CO2:" + String(co2) + "ppm");
lcd.setCursor(0, 1);
if (co2 >= 5000) {
lcd.print("Danger");
} else if (co2 >= 2000) {
lcd.print("Warning");
} else if (co2 >= 1000) {
lcd.print("Caution");
} else {
lcd.print("Good");
}
delay(5000);
}
CO2レベルの目安
| CO2濃度 | 表示 | 状態 |
|---|---|---|
| ~1,000 ppm | Good | 良好 |
| 1,000~2,000 ppm | Caution | 注意 |
| 2,000~5,000 ppm | Warning | 警告 |
| 5,000 ppm~ | Danger | 危険 |
コードのポイント
① LCDのピン設定
LiquidCrystal lcd(19, 23, 18, 17, 16, 15);
カッコの中はピン番号です。順番は RS, EN, D4, D5, D6, D7 です。
② 1行目にセンサーで取得したCO2濃度の数値、2行目に取得したCO2濃度の状態を表示
lcd.setCursor(0, 0); // 1行目
lcd.print("CO2:" + String(co2) + "ppm");
lcd.setCursor(0, 1); // 2行目
lcd.print("Good");
setCursor(0, 0) で1行目、setCursor(0, 1) で2行目を指定しています。
動かしてみた
書き込むとLCDにこう表示されました。
CO2:583ppm
Good
PCを開かなくてもCO2濃度が一目でわかるようになり、ぐっと実用的になりました。
まとめ
- LCD1602を配線した
- CO2濃度とレベルを表示できた
- PCなしで確認できるようになった
次回はブラウザでグラフ表示できるWebサーバーを作ります!
#5 Webサーバー編へ続く