はじめに
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状態が変化します。
目次
手順の概要
- ドライバインストール
- ArduinoIDEインストール
- ArduinoIDE内のBoardManagerへM5 Stickを追加
- ArduinoIDE内のLibraryManagerへM5 Stick/Adafrui_BMP280を追加
- ArduinoIDEでボード(M5Stick-C)/シリアルポート選択(/dev/cu.usbserial-3152713A92)
- コード書く
- コンパイル&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ボタン押下時の処理を追加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
/* 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にセンサ値を送信してみます。