M5Stack用のM5Unit(拡張モジュール)は、様々な種類が販売されていますが、ケーシングもしっかりしていて扱いやすいものが多いです。I/FもGrove互換なため、H/W的にも他のボードに接続しやすいですし、Arduinoライブラリも用意されているので、流用しやすいです。
今回は、Raspberry Pi Pico(実際に使ったのはPico W)にM5Unitを接続し、試してみました。
Raspberry Pi Picoは、Arduino IDEでプログラミングできる環境を使ってます。ボード定義はarduino-picoです。
試したのは、以下の2種類です。
どちらも手軽に購入できる価格です。
QR コードスキャナ ーユニット(STM32F030)
様々なバーコード、QRコードに対応したリーダーユニットで、ユニット自体に取り付けられたトリガボタンもしくは、マイコン側からスキャンを開始できます。ユニット自体にもマイコンが内蔵されているので、自動的にスキャンして、コードを送ってくれます。
Raspberry Pi Picoとの接続
QR コードスキャナ ーユニットはI2Cもしくは、Serialで通信ができるようになっています。今回は、I2Cを試しました。
Grove互換なので、Raspberry Pi PicoをPi Pico v1.0用Grove シールドに載せています。
QR コードスキャナ ーユニットをI2C0に接続し、Groveコネクタの電源選択は5V側にします。
ライブラリ
QR コードスキャナ ーユニットを扱うための、オフィシャルのライブラリがありますので、それをArduino IDEでインストールします。
Arduino IDEのライブラリマネージャーで、M5Unit-QRCode
で検索すると出てきます。
ちなみにライブラリのリポジトリは以下にあります。
しかし、このままでは、ビルドが通らなかったので、ソースコードを変更します。
通常、Arduino IDEでインストールされたライブラリは以下のパスにインストールされています。
/Arduino/libraries/M5UnitQRCode
Windowsの場合は、Documentsフォルダ下、Macの場合は、書類フォルダ下にあると思います。
(インストール時の指定により変わります)
変更する箇所は、
/M5UnitQRCode/src/M5UnitQRCodeI2C.cpp
43行目
_wire->begin(_sda, _scl, _speed);
↓
_wire->begin();
/M5UnitQRCode/src/M5UnitQRCodeUART.cpp
6行目
_serial->begin(baud, SERIAL_8N1, RX, TX);
↓
_serial->begin(baud);
です。
スケッチ
ライブラリのサンプルを元に次のようなスケッチで試しました。
#include "M5UnitQRCode.h"
#include "Wire.h"
M5UnitQRCodeI2C qrcode;
void setup() {
Serial.begin(115200);
Wire.setSDA(8);
Wire.setSCL(9);
while (!qrcode.begin(&Wire, UNIT_QRCODE_ADDR, 8, 9, 100000U)) {
Serial.println("Unit QRCode I2C Init Fail");
delay(1000);
}
Serial.println("Auto Scan Mode");
qrcode.setTriggerMode(AUTO_SCAN_MODE);
}
void loop() {
if (qrcode.getDecodeReadyStatus() == 1) {
uint8_t buffer[512] = {0};
uint16_t length = qrcode.getDecodeLength();
Serial.printf("len:%d\r\n", length);
qrcode.getDecodeData(buffer, length);
Serial.printf("decode data:");
for (int i = 0; i < length; i++) {
Serial.printf("%c", buffer[i]);
}
Serial.println();
}
}
動作確認
パッケージにバーコードとQRコードがあったので、それを読み込んでみました。
シリアルモニタに読み込んだコードが表示されたので、問題なさそうです。
M5Stack用計量ユニット 5kgレンジ(HX711)
5Kgまでの計量ができるユニットです。ナットが付属していて、ネジで天板を取り付けることも可能です。
フルカラーLEDとスイッチが取り付けてあり、ステータスの表示やゼロリセットなどに使用することができます。
マイコンが内蔵されているので、細かい制御はユニット側で行われるので、簡単に扱うことができます。
Raspberry Pi Picoとの接続
Raspberry Pi Picoとの接続は、QRコードスキャナと同様です。
ライブラリ
M5Stack用計量ユニットのライブラリもオフィシャルのものがあります。
こちらは、Arduino IDEのライブラリマネージャーでは出てこなかったので、リポジトリからZIPファイルでダウンロードして、Arduino IDEにインストールします。
こちらもソースコードの修正が必要なため、以下の箇所を変更します。
/UNIT_MINISCALE/src/UNIT_SCALES.cpp
8行目
_wire->begin(_sda, _scl, 400000UL);
↓
_wire->begin();
スケッチ
ライブラリのサンプルを元に次のようなスケッチで試しました。
#include "UNIT_SCALES.h"
UNIT_SCALES scales;
void setup() {
Serial.begin(115200);
Wire.setSDA(8);
Wire.setSCL(9);
while (!scales.begin(&Wire, 8, 9, DEVICE_DEFAULT_ADDR)) {
Serial.println("scales connect error");
delay(1000);
}
scales.setLEDColor(0x001000);
scales.setOffset();
}
void loop() {
float weight = scales.getWeight();
Serial.printf("Weight:%f\n",weight);
delay(500);
}
動作確認
別なスケールで測った53gのBluetoothイヤフォンを測ったらだいたい一致したので、問題なさそうです。
最後に
M5Unitは、M5 Stack用に設計されていますが、Raspberry Pi Picoでも簡単に扱えることがわかりました。
他にもディスプレイなど試したことはありますが、ケーシングがされているのと、ライブラリが用意されているので、プロトタイプング的にはさっと動かせるので良いですね。
執筆したPico Wの書籍では、M5Unitのディスプレイの例も書いています。
また書面で紹介しているキーリマインダーの製作例では、ロードセルを使って鍵が置かれているかを判断していますが、今回使ったM5Unitの計量ユニットを使えばもうちょっと手軽に作れそうですね。