ESP32で温度、湿度、気圧を測定できる「BME280」を使用してみたいと思います。
BME280から取得した値は、LCDディスプレイモジュールに表示します。
BMEがSPI通信、LCDディスプレイモジュールがI2C通信になります。
ESP32とBME280を接続
BME280使用の温湿度・気圧センサー(BOSCH)は秋月電子通商様から購入しました。
ESP32、BME280、LCDディスプレイモジュールを接続します。
BME280 | ESP32 |
---|---|
VDD | 3.3V |
GND | GND |
CSB | 15ピン(CS) |
SDI | 13ピン(MOSI) |
SDO | 12ピン(MISO) |
SCK | 14ピン(SCK) |
BME280制御 プログラム作成
BME280からSPI通信で 温度、湿度、気圧を取得します。
取得した値は、LCDディスプレイモジュールにI2C通信で表示します。
まずは、BME280を使用するためのライブラリをインストールします。
Arduino IDEを起動して、メニューの「ツール」→「ライブラリを管理」を選択します。
表示した「ライブラリマネージャ」のテキストボックスに「BME280」を入力します。
「Adafruit BME280 Library by Adafruit」が表示されるので、「インストール」ボタンを押してインストールします。
インストールが完了したらプログラムを書いていきます。
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
const int BME_CS = 15;
const int BME_SCK = 14;
const int BME_MOSI = 13;
const int BME_MISO = 12;
const unsigned int ADDRESS = 0x27;
const int CHARS_NUM = 16;
const int LINES_NUM = 2;
LiquidCrystal_I2C lcd(ADDRESS, CHARS_NUM, LINES_NUM);
Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK);
void setup() {
lcd.init();
lcd.backlight();
bme.begin();
}
void loop() {
lcd.setCursor(0, 0);
float temp = bme.readTemperature();
lcd.print("T:");
lcd.print(temp);
lcd.setCursor(8, 0);
float humid = bme.readHumidity();
lcd.print("H:");
lcd.print(humid);
lcd.setCursor(0, 1);
float pres = bme.readPressure() / 100.0;
lcd.print("P:");
lcd.print(pres);
delay(1000);
}
プログラムについて簡単に説明いたします。
3、4行目で、BME280から値を取得するためのライブラリヘッダを読み込みます。
6~9行目で、ESP32に接続するピンの定数を設定します。
16行目で、BME280から値を取得するためのクラス変数の初期化を行っています。
22行目で、BME280から値を取得する処理を開始します。
26行目で、ディスプレイの1行目の先頭にカーソルを移動させ、27行目でBME280から取得した温度を28~29行目で表示しています。「bme.readTemperature()」が温度を取得する処理です。
31行目で、ディスプレイの1行目の9文字目にカーソルを移動させ、32行目でBME280から取得した湿度を33~34行目で表示しています。「bme.readHumidity()」が湿度を取得する処理です。
36行目で、ディスプレイの2行目の先頭にカーソルを移動させ、37行目でBME280から取得した気圧を38~39行目で表示しています。その際に単位を「Pa(パスカル)」から「hPa(ヘクトパスカル)」に変換するために100で取得した値を割っています。「bme.readPressure()」が気圧を取得する処理です。
1秒ごとに値を取得、表示しています。
ESP32とパソコンをUSBケーブルで接続して、「マイコンボードに書き込み」を行ってください。
Tに温度(℃)、Hに湿度(%)、Pに気圧(hPa)が表示されます。
大体あっているのかな・・・?
まとめ
ESP32で温度、湿度、気圧を測定できる「BME280」を使用してみました。
ライブラリを使用したので、簡単にできてしまいましたが、取得した 温度、湿度、気圧をLCDディスプレイに表示するだけでなく、いろいろな用途に使用できるようにアイデアを練っていければと思います。
【参考図書】