BME280 とesp32で温度・湿度・気圧を測定する
今までarduino megaでbme280を動かしていたのですがesp32に変えたところそのままでは動かないことが判明しました。
そこでesp32でbme280を使えるようにするまでの備忘録です。
BME280
BME280はあのBOSCH社が開発したセンサーで、温度・湿度・気圧・高度をコンマ2桁まで計測する優れものです。
BME280自体は2.5ミリ角の米粒よりも小さいチップで、一般に販売されているBME280はこのチップを組み込んだシールドとして販売されています。
米粒を置いてみました。 (^^;
お米の上の□がボッシュ社のbme280です。
[amazon_link asins=’,B01M98R905,B07ZK697GK’ template=’ProductCarousel’ tag=’toraberuko-22′ marketplace=’JP’ link_id=’1e988895-f60c-490b-a739-ae99efcdd40a’]
adafruit bme280ライブラリ
esp32でbme280を使うにはadafruit bme280ライブラリを使うのが簡単です。
arduino IDEを起動し、スケッチ ⇒ ライブラリをインクルード ⇒ ライブラリを管理 へと進みます。
ライブラリマネージャにadafruit bme280と入力しライブラリをダウンロードします。
次に Adafruit Unified Sensor と入力しライブラリをダウンロードします。
(画像はすでにダウンロード済みです)
これでarduino開発環境(arduino IDE)側の準備は終わりです。
BME280の配線
BME280はI2CとSPI接続の両方をサポートしています。
SPIの方が読み込みが早いそうですが手持ちのBME280がSCL SDAピンですのでI2C接続をご紹介します。
BME280 配線
VCC ⇒ 3V3
GND ⇒ GND
SCL ⇒ GPIO22
SDA ⇒ GPIO21
他のピンは使わない
GPIO22はSCL,GPIO21はSDAピンです。
スケッチ
スケッチはコピペでそのまま使用出来ます。
[php]#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme;
unsigned long delayTime;
float ondo;
float kiatu;
float koudo;
float shitudo;
void setup() {
Serial.begin(115200);
bool status;
status = bme.begin(0x76);
if (!status) {
Serial.println("BME280 sensorが使えません");
while (10);
}
delayTime = 1000;
}
void loop() {
ondo=bme.readTemperature();
kiatu=bme.readPressure() / 100.0F;
koudo=bme.readAltitude(SEALEVELPRESSURE_HPA);
shitudo=bme.readHumidity();
Serial.print("温度 ;");
Serial.print(ondo);
Serial.println(" °C");
Serial.print("気圧 ;");
Serial.print(kiatu);
Serial.println(" hPa");
Serial.print("高度 ;");
Serial.print(koudo);
Serial.println(" m");
Serial.print("湿度 ;");
Serial.print(shitudo);
Serial.println(" %");
Serial.println();
delay(delayTime);
}[/php]
シリアルモニタ
実際の計測状況はこのようになりました。
ボッシュ社は車関連の世界的大手ですので車載センサーとして高度の計測も標準装備ですが家庭菜園やビニールハウスの管理ではあまり必要性はないようですね。
湿度はビニールハウスの管理に役立ちそうです。また自宅の空調管理にも使えそうです。
気圧は降雨予報に役立ちます。天気が良くても急激な気圧の低下は必ず数時間後に雨になります。
雨が降っていても気圧が上がってくれば天気も良くなります。(カズが実証済みです。 (^^; )