見出し画像

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っぽくできればと思います。


この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?