M5StickC Plusを手に入れたので少し動かしてみました。
はじめに
勢いで購入してみたは良いけど、とりあえず慣れる必要があるなと思って、題材を考えたのですが、以下の記事でも書いている通り、Modbus結構使っているので、RS485経由でのModbus通信をしてみました。
利用したのはこの温湿度計です。
こちらの記事でも使っています。
開発環境を整える
IDEの準備
ArduinoのIDEではなく、手になじんだVS Code使いたいなと思ったら、以下の記事見つけたのでVSCodeで開発しています。
M5StickC Plusの開発環境準備
以下のライブラリを使います。
https://docs.m5stack.com/#/en\uiflow\RS485
以下の公式手順にあるようにGitHubからZipでダウンロードしたものをインポートします。
https://docs.m5stack.com/#/en/arduino/arduino_development?id=for-m5stickc-plus-1
Modbus-RTU通信準備
RS485通信用のHatの購入
M5StickはHatで色々通信できるらしいということで、見てみたら可愛いHatが見つかったので、せっかくなのでこちらを購入してみました。
Pin Map等は↑のSwitch Scienceのサイトにもありますが、以下の公式ドキュメントに記載があります。
https://docs.m5stack.com/#/en/hat/hat-rs485
Modbus通信に利用するライブラリを導入
以下のModbusMasterというライブラリを利用します。
VSCodeからはArduino Library Managerで以下のように見えます。
コード
以下が今回のコードです。
見た目は参考サイトに貼らせていただいた記事を参考に少し調整してみました。
#include "ModbusMaster.h" #include "M5StickCPlus.h" #define RX_PIN 26 #define TX_PIN 0 #define LCD_HEIGHT 160 #define LCD_WIDTH 160 #define BLACK 0 ModbusMaster node; int count = 0; int title_x = 0; int title_y = 0; int header_x = 0; int header_y = 18; int data_x = 0; int data_y = 48; void setup() { M5.begin(); // 見た目調整 M5.Lcd.fillScreen(BLACK); M5.Lcd.setRotation(3); M5.Lcd.setCursor(title_x, title_y, 2); M5.Lcd.println("Modbus Sensor Reader"); // Initialize for Modbus // SERIAL_[8N1] -> データビット幅(8)、パリティチェック(No)、ストップビット(1) Serial2.begin(9600, SERIAL_8N1, RX_PIN, TX_PIN); //Serial port 2 initialization node.begin(1, Serial2); } void loop() { if (M5.BtnA.wasPressed()) { //If button A is pressed // 前回実行分のテキストを黒で上書き M5.Lcd.fillRect(data_x, data_y, LCD_WIDTH - data_x, LCD_HEIGHT - data_y, BLACK); // 更新したかわかるように、ボタンを押した回数カウント M5.Lcd.setCursor(header_x, header_y, 2); count++; M5.Lcd.printf("Count : %03d", count); // Modbus温湿度計からのデータ読み取り M5.Lcd.setCursor(data_x, data_y, 2); uint8_t result; result = node.readHoldingRegisters(0x0000, 2); if (result == 0) { uint16_t data[2]; for (int j = 0; j < 2; j++) data[j] = node.getResponseBuffer(j); M5.Lcd.printf("Temperature :%5.1f\n", float(data[0] / 10)); M5.Lcd.printf("Humidity : %5.1f\n", float(data[1] / 10)); } else { M5.Lcd.printf("Error Code : %x\n", result); } } M5.update(); //Button status refresh delay(100); }
動かしてみる
以下のように配線して動かしてみます。
表示は以下のようにシンプルです。 M5ボタンを押す毎に温湿度計が青く光って情報が更新されます。
所感
まだまだM5StickC Plusの力を活かせて無いですが、まずはわかりやすいバッテリーとディスプレイを活かしてみるだけでも面白いことは色々できそうです。
参考URL
見た目の調整は以下のサイトが大変参考になりました。