M5 / プログラミング

M5AtomでENVⅡHatを使う

こんにちは、Lineaです 

前回で水分監視システムの制御をM5Atomに替えました。
今回は測定できるものが水分量だけなのも寂しいので、余っていたENVⅡHatを追加して気温や湿度の計測を追加しました。
ENVⅡHATはそもそもM5StickC用のセンサーモジュールなのですが、アダプターを使うことでM5Atomでも使用することができます。今回は使ったアダプターやM5Atomで使用するポイントも解説したいと思います。

ENVⅡHAT

ENVⅡHATはM5StickCに直接接続できる環境センサーモジュールです。内部には温湿度、地磁気、気圧センサーの3つのセンサーが内蔵されています。それぞれのセンサーはI2C接続でまとまっていますが、センサー自体は別々なので個別に制御する必要があります。

M5StickC ENV II Hat(SHT30/BMP280/BMM150搭載)
ENVⅡHAT

https://www.switch-science.com/catalog/6559/

写真のようにM5StickCのピンソケットに直接挿さるようになっているのでM5Atomには直接接続することはできません。M5Atomでてっとり早く接続するには以下に含まれるアダプターを使います。

M5Atom底部のピンソケットからM5StickCのピンソケットと同じ配置に変換します。製品ページの注意にも書いてありますが、M5Atom自体がM5StickCとピン番号が異なるのでプログラム側でピン番号は置き換えて使う必要があります。
アダプターの裏にピン配置が書かれているのでそれを元にピンを指定します。HATのサンプルコードなどWebにあるコードはM5StickCのピンになっていることがほとんどなので参考にする場合は注意しましょう。

このようなM5StickC用の拡張センサはHatシリーズとして他にも色々用意されています。接続できればM5Atomで使えるのは同じようなのでアダプタを持っておくと使い回せて便利ですね。

温湿度センサーのプログラム

ENVⅡHATは内部に 温湿度、地磁気、気圧の3つのセンサーがありますが、今回は温湿度センサーのみを使います。
温湿度センサーからの情報取得はこちらの公式のサンプルの一部を参考にしています。

この中のSHT3X.h/cppに温湿度センサーの情報取得が書かれていますが、そのままだとM5Atomのピンが設定できないので少し変更しました。
以下のようにI2C接続で使用するピンを設定できるコンストラクタを追加しています。

class SHT3X{
public:
  SHT3X(uint8_t address=0x44); //元のコンストラクタ
  SHT3X(uint8_t scl, uint8_t sda,uint8_t address=0x44);//追加コンストラクタ
//略
}
//元のコンストラクタ
SHT3X::SHT3X(uint8_t address)
{
  Wire.begin();
  _address=address;
}
//追加コンストラクタ
SHT3X::SHT3X(uint8_t scl, uint8_t sda,uint8_t address)
{
  Wire.begin(sda,scl);
  _address=address;
}

メインの計測プログラムでセンサーの値の取得には上記で変更したSHT3X.h/.cppをインクルードします。
計測のコードは以下のようになります。

#include "SHT3X.h"
//I2cピン
const uint8_t kI2CSclPin = 22; 
const uint8_t kI2CSdaPin = 19;
//センサーオブジェクト
SHT3X sht3x = SHT3X(kI2CSclPin,kI2CSdaPin); 

//計測関数
void measure(){
  //温湿度計測 get()で取得 成功すると0が返る
  if(sht3x.get() == 0){
    //オブジェクトに書き込まれているので読み取る
    Serial.printf("temp:%.2f \n",sht3x.cTemp);
    Serial.printf("humidty:%.2f \n",sht3x.humidity);
  }
}

SHT3X型のオブジェクトを作成し、get関数で値を取得します。取得した値はオブジェクトの変数に書き込まれます。
あとは変数の値を読んで表示やデータ送信などデータ処理に使うだけです。
注意点としてはピンの設定を忘れないことです。I2CにはSCL,SDAの2ピンを使いますが22,19ピンが対応しています。

おまけ

アダプターにピン拡張基板がついてきたのですが、足の長いピンソケットと組み合わせてアダプターと同時に使えるようにしてみました。アダプターだけだとAtom本体のピンソケットが幾つか使えなくなってしまうのですが、これで全部のピンを生かせます。

問題は厚みがすごいことになって要塞のようになってしまうことですwww。Atomとは言えませんねこれはw

投稿者

Linea
本業はゲームプログラマー プログラミングやIT系の記事を書いていきます アイコンは愛車のシトロエン DS3です

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA