LoginSignup
3
0

Raspberry Pi PicoでM5Unitを試してみた

Last updated at Posted at 2024-03-17

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側にします。
image.png

ライブラリ

QR コードスキャナ ーユニットを扱うための、オフィシャルのライブラリがありますので、それをArduino IDEでインストールします。

Arduino IDEのライブラリマネージャーで、M5Unit-QRCodeで検索すると出てきます。
image.png

ちなみにライブラリのリポジトリは以下にあります。

しかし、このままでは、ビルドが通らなかったので、ソースコードを変更します。
通常、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コードがあったので、それを読み込んでみました。

image.png

image.png

シリアルモニタに読み込んだコードが表示されたので、問題なさそうです。

M5Stack用計量ユニット 5kgレンジ(HX711)

5Kgまでの計量ができるユニットです。ナットが付属していて、ネジで天板を取り付けることも可能です。
フルカラーLEDとスイッチが取り付けてあり、ステータスの表示やゼロリセットなどに使用することができます。
マイコンが内蔵されているので、細かい制御はユニット側で行われるので、簡単に扱うことができます。

Raspberry Pi Picoとの接続

Raspberry Pi Picoとの接続は、QRコードスキャナと同様です。

image.png

ライブラリ

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イヤフォンを測ったらだいたい一致したので、問題なさそうです。

image.png

image.png

最後に

M5Unitは、M5 Stack用に設計されていますが、Raspberry Pi Picoでも簡単に扱えることがわかりました。
他にもディスプレイなど試したことはありますが、ケーシングがされているのと、ライブラリが用意されているので、プロトタイプング的にはさっと動かせるので良いですね。

執筆したPico Wの書籍では、M5Unitのディスプレイの例も書いています。

image.png

また書面で紹介しているキーリマインダーの製作例では、ロードセルを使って鍵が置かれているかを判断していますが、今回使ったM5Unitの計量ユニットを使えばもうちょっと手軽に作れそうですね。

image.png

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0