M5StickC with ENV HatでLチカと温度/湿度/気圧取得表示

この記事は公開されてから半年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

M5Stackをすっかり気に入り、AWS IoTと接続しようと考えていたのですが
(自分のスイッチ切り替えにも?)Slackステータス更新デバイスとして気に入ってしまったので
https://www.skyarch.net/blog/?p=18315
手元で動作する物としてそのまま残しておきたいので、M5StickC+ENV Hatを追加購入しこちらをAWS IoTとつなげるため下準備をしてみました。

M5StickCの紹介記事は沢山出てきますので割愛します。
被せもの (HAT) は温度・湿度・気圧と定番の物が揃ったこちらを選択しました。
https://docs.m5stack.com/#/en/hat/hat-env

出来たもの

温度・湿度・気圧を画面内に表示
Aボタンを押下すると (離した際に)LED状態が変化します。

目次

手順の概要

  1. ドライバインストール
  2. ArduinoIDEインストール
  3. ArduinoIDE内のBoardManagerへM5 Stickを追加
  4. ArduinoIDE内のLibraryManagerへM5 Stick/Adafrui_BMP280を追加
  5. ArduinoIDEでボード(M5Stick-C)/シリアルポート選択(/dev/cu.usbserial-3152713A92)
  6. コード書く
  7. コンパイル&M5StickCへ転送

セットアップが必要な場合は下記公式ドキュメントに沿って実施
https://docs.m5stack.com/#/en/arduino/arduino_development
※M5StickCではドライバインストールが不要との事でした。

LibraryManagerで M5 Stick/Adafrui_BMP280を追加

接続したM5StickCが認識されているか確認

接続前
~ $ ls -la /dev | grep usb

接続後
~ $ ls -la /dev | grep usb
crw-rw-rw-   1 root   wheel                  18,  39  4 20 17:11 cu.usbserial-3152713A92
crw-rw-rw-   1 root   wheel                  18,  38  4 20 17:06 tty.usbserial-3152713A92

実行環境

MacOS上で実施しました。

手順

コードについて予め用意されているスケッチブックから下記を参考に作成しました。
M5Stick-C ⇢ Hat ⇢ ENV

コード

上記サンプルから、下記変更点を加えました。

  • 地磁気センサ値取得部分を削除
  • HATが刺さっていない際の処理のまとめ
  • Aボタン押下時の処理を追加
/*
    note: need add library Adafruit_BMP280 from library manage
    Github: https://github.com/adafruit/Adafruit_BMP280_Library
*/

#include <M5StickC.h>
#include "DHT12.h"
#include <Wire.h>
#include "Adafruit_Sensor.h"
#include <Adafruit_BMP280.h>

// LED_PIN
#define M5_STICK_PIN_LED 10
boolean ledState = true; // HIGH: LED Off/Low: LED On

DHT12 dht12; 
Adafruit_BMP280 bme;

void checkWiring() {
  while (!bme.begin(0x76)) {
    M5.Lcd.fillScreen(BLACK);
    M5.Lcd.setCursor(0, 0, 2);
    M5.Lcd.println("Could not find a valid BMP280 sensor, check wiring!");
    delay(1000);
  }
}

void setup() {
  // put your setup code here, to run once:
  M5.begin();
  M5.Lcd.setRotation(3);
  M5.Lcd.fillScreen(BLACK);
  // I2C
  Wire.begin(0,26);
  // GPIOSetup
  pinMode(M5_STICK_PIN_LED, OUTPUT);
  digitalWrite(M5_STICK_PIN_LED, ledState);
  // check ENVHat
  checkWiring();
}

void loop() {
  // update button state
  M5.update();

  // Button Pressed
  if (M5.BtnA.wasReleased()) {
    ledState = !ledState;
    digitalWrite(M5_STICK_PIN_LED, ledState);
  }

  // display Temp/Humidity/Pressure
  float tmp = dht12.readTemperature();
  float hum = dht12.readHumidity();
  M5.Lcd.setCursor(0, 0, 2);
  M5.Lcd.printf("Temp: %2.1f Humi: %2.0f%%", tmp, hum);
  
  float pressure = bme.readPressure();
  M5.Lcd.setCursor(0, 20, 2);
  M5.Lcd.printf("pressure: %2.1f", pressure);

  // check ENVHat
  checkWiring();

  // wait
  delay(500);
}

コンパイル/転送

下記記事と同様に実施
https://www.skyarch.net/blog/?p=18253

まとめ

次回はセンサ取得情報をMQTTでAWSIoTにセンサ値を送信してみます。

実施してみました
https://www.skyarch.net/blog/?p=18393

投稿者プロフィール

takashi
開発会社での ASP型WEBサービス企画 / 開発 / サーバ運用 を経て
2010年よりスカイアーチネットワークスに在籍しております

機械化/効率化/システム構築を軸に人に喜んで頂ける物作りが大好きです。
個人ブログではRaspberryPiを利用したシステムやロボット作成も
実施しております。

スカイアーチネットワークスで一緒に働きましょう!

ABOUTこの記事をかいた人

開発会社での ASP型WEBサービス企画 / 開発 / サーバ運用 を経て 2010年よりスカイアーチネットワークスに在籍しております 機械化/効率化/システム構築を軸に人に喜んで頂ける物作りが大好きです。 個人ブログではRaspberryPiを利用したシステムやロボット作成も 実施しております。 スカイアーチネットワークスで一緒に働きましょう!