M5Stackと温湿度気圧センサを接続してみたよ
こんにちは!
棚の中に眠っていた、Raspberri Pi2やPi3やM5Stack、ESP等々、、、を生き返らせる試みを行っています。
今日は眠っていたM5Stackと、市販の温湿度気圧センサを接続してみます。
磁気センサと同様、Grove系で提供されているようなM5Stack専用センサではなく、自分でM5Stackの端子に間違いなく接続するところから始めます。
※使用しているホストPCはWindows11です。
1.対象センサ
HiLetgo BME280 3.3V 気圧 温度湿度センサです。
接続インタフェースは、SPIかI2Cですが、磁気センサと同様、I2Cにします。
2.接続
3.3V, GNDをM5Sackと接続します。
SDAとSCLは、磁気センサに接続したものを分岐させて接続します。
3.ArduinoIDEで開発
磁気センサを接続したプログラムに、この温湿度気圧センサの制御も加えることにします。
3.1 ライブラリのダウンロード
BME280は沢山のArduino用ライブラリが作成されています。
まぁ多分どれでも基本動くんでしょうけど、、、
https://github.com/malokhvii-eduard/arduino-bme280
こちらのライブラリをありがたく使わせていただくことにします。
ちなみに今回のセンサの仕様書(データーシート)等はここにあります。
https://www.bosch-sensortec.com/products/environmental-sensors/humidity-sensors-bme280/
じゃ、ライブラリをダウンロードします。
[スケッチ]メニューから[ライブラリをインクルード]->[ライブラリ―を管理] を選択します。
ここから、「Bme280」をインストールすることにしました。
[インストール]ボタンを押して、インストール!えいっ!
3.2 温湿度気圧センサから値を取得
次に、温湿度気圧センサにアクセスして値をとってみましょう。
先ほどのライブラリにはexampleがあります。
GitHubで見てみます。
arduino-bme280/examples/TwoWire/TwoWire.ino at master · malokhvii-eduard/arduino-bme280 · GitHub
※本記事は2024年4月に記載しました。
もしかすると現時点ではデーターシート、ライブラリ等変わっているかもしれませんのでご注意ください。
ふむふむ。
・インクルード:#include <Bme280.h>
・初期化する関数:Bme280TwoWire sensor; sensor.begin()、sensor.setSettings()
・値を取ってくる関数:
sensor.getTemperature(), sensor.getPressure(), sensor.getHumidity()
ですね。
はい、実装してみましょう。
プログラムは以下のようになりました。
#include <M5Stack.h>
#include <Wire.h>
#include "BM1422AGMV.h"
#include <Bme280.h>
#define AXIS_X (0)
#define AXIS_Y (1)
#define AXIS_Z (2)
#define DATA_DIGIT (3)
BM1422AGMV bm1422a(BM1422AGMV_ADDR_LOW);
Bme280TwoWire sensor;
void setup() {
int32_t result;
Serial.begin(115200);
Wire.begin();
result = bm1422a.init();
if (result == BM1422AGMV_OK) {
(void)bm1422a.start();
} else {
Serial.println("error");
while(1);
}
delay(BM1422AGMV_MEAS_TIME);
sensor.begin(Bme280TwoWireAddress::Primary);
sensor.setSettings(Bme280Settings::indoor());
}
void loop() {
int32_t result;
float32 mag[BM1422AGMV_DATA_SIZE];
result = bm1422a.get_val(mag);
if (result == BM1422AGMV_OK) {
Serial.print("X : Y : Z [uT] = ");
Serial.print(mag[AXIS_X], DATA_DIGIT);
Serial.print(",");
Serial.print(mag[AXIS_Y], DATA_DIGIT);
Serial.print(",");
Serial.print(mag[AXIS_Z], DATA_DIGIT);
Serial.println();
} else {
Serial.println("error");
}
String temperature = String(sensor.getTemperature()) + " °C";
String pressure = String(sensor.getPressure() / 100.0) + " hPa";
String humidity = String(sensor.getHumidity()) + " %";
String measurements = temperature + ", " + pressure + ", " + humidity;
Serial.println(measurements);
// For Single Measurement
(void)bm1422a.start();
delay(BM1422AGMV_MEAS_TIME);
return;
}
4.実行結果
実行結果は以下です。
磁気センサの値に加え、温度、気圧、湿度が表示されています。
という事で、測定したいセンサのデータを全て採ることができました。
次回、いよいよこれらを使って、IoTっぽくできればと思います。
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?