M5Stick-CのGROVEポートに汎用のBME280(I2C接続)を繋いでみる
M5Stick-CにはENV HATもあるしGROVE用のENV UNITも使えるのでわざわざ生でBME280を繋ぐ意味は無いのですが、会社での社員研修でHATやUNITの中身を理解させる意味もあってBME280が載ったモジュールをGROVEポートへと接続してみました。
BME280は3.3V駆動でM5tick-CのGROVEポートは5V駆動なので今回は5V<->3.3Vのレベルコンバーターが載ったボードをAliExpressから購入してこれを使用しました。
さすが大陸の通販サイトだけあってデータシートとかは明示されていなかったのですが、製品的にはここに詳細が書かれている物と同等品のようです。
GROVE用のコネクタが付いたヘッダーピン用ケーブルはスイッチサイエンスから購入しましたが、このケーブルM5Stick-CのケーブルとSCL、SDAの配線の色が入れ替わっているので要注意でした。 (調べていないけど、この辺りってGROVEで規定されていないのかな?)
ケーブルの結線自体は基板上のVINにM5Stick-CのVOUTを、GNDにはGを、SDAをG32に、SCLをG33へと繋ぐだけなので簡単です。
スケッチもM5Stick-Cのサンプルスケッチの「ENV」でインクルードするセンサー用のライブラリを Adafruit_BMP280.h
から Adafruit_BME280.h
へと変更し、センサーライブラリのインスタンスを生成する部分も同様にクラスを Adafruit_BMP280
から Adafruit_BME280
へと変更するだけです。
あとは不要なDHT12に関する処理をコメントアウトし、元々のENV UNITではDHT12から取得していた温度と湿度の情報をBME280から取得するように修正します。
@@ -3,13 +3,13 @@
*/
#include <M5StickC.h>
-#include "DHT12.h"
+//#include "DHT12.h"
#include <Wire.h> //The DHT12 uses I2C comunication.
#include "Adafruit_Sensor.h"
-#include <Adafruit_BMP280.h>
+#include <Adafruit_BME280.h>
-DHT12 dht12; //Preset scale CELSIUS and ID 0x5c.
-Adafruit_BMP280 bme;
+//DHT12 dht12; //Preset scale CELSIUS and ID 0x5c.
+Adafruit_BME280 bme;
void setup() {
M5.begin();
@@ -27,8 +27,8 @@
void loop() {
- float tmp = dht12.readTemperature();
- float hum = dht12.readHumidity();
+ float tmp = bme.readTemperature();
+ float hum = bme.readHumidity();
float pressure = bme.readPressure();
Serial.printf("Temperatura: %2.2f*C Humedad: %0.2f%% Pressure: %0.2fPa\r\n", tmp, hum, pressure);