マイクロビットとM5Stackでゲートウェイをつくる

以前、マイクロビットとESPr Developerを使ってゲートウェイをつくりました(記事は こちら)。



複数のマイクロビット(IoT端末)から無線で送られてくるデータを受信し、そのデータをWebサーバに送信するものです。
マイクロビット(無線データ受信用)とESPr Developer(Wi-Fiデータ送信用)の2チップ構成となっており、両者の間はシリアル通信でデータ転送します。

とても簡単に実現できるのですが、マイクロビット − ESPr Developer間の接続にはブレッドボードなどを使っており、その部分の接続作業だけが若干煩雑になっていました。

そんな中「M5:Bit micro:bit用変換ボード」という製品を見つけました。
マイクロビット用の拡張ボードなのですが、シリアル通信用のGROVEポートを備えています。
ESPr Developerの代わりに、GROVEポートを備えた「M5Stack」などを使うことで、両者の接続が格段に容易になり、より簡単にゲートウェイがつくれそうです。


そんな訳で、早速試してみました。

こちらが「M5:Bit micro:bit用変換ボード」です(税込660円)。

マイクロビットをセットすると、こんな感じになります。

GROVEケーブルでM5Stackと繋ぐと、こんな感じになります。

それではプログラムをつくっていきます。

まずはIoT端末用マイクロビットのプログラムです。

適当なタイミングで「デバイス番号」を無線送信します。
ボタンAを押すことで、デバイス番号を変更できます。

次はゲートウェイ用マイクロビットのプログラムです。

無線受信したら、受信した「デバイス番号」と受信したときの「信号強度」をカンマ区切りでつないで、それをシリアル通信で書き出します。

最後はM5Stack用のスケッチです。

#include <M5Stack.h>

int c = M5.Lcd.color565(255, 255, 255);

void setup() {
  M5.begin();
  Serial2.begin(115200, SERIAL_8N1, 22, 21);
} 

void loop() {
  if(Serial2.available()) {
    String values = Serial2.readStringUntil('\n');
    int    pos1   = values.indexOf(',');
    int    pos2   = values.indexOf('\n');
    String value0 = values.substring(0, pos1);
    String value1 = values.substring(pos1+1, pos2-(pos1+1));
    int    device = value0.toInt();
    int    level  = value1.toInt();

    switch(device) {
      case 0:
        c = M5.Lcd.color565(255, 209, 209); // red
        break;
      case 1:
        c = M5.Lcd.color565(255, 209, 255); // pink
        break;
      case 2:
        c = M5.Lcd.color565(209, 209, 255); // purple
        break;
      case 3:
        c = M5.Lcd.color565(209, 255, 255); // blue
        break;
      case 4:
        c = M5.Lcd.color565(209, 255, 209); // green
        break;
      default:
        c = M5.Lcd.color565(255, 255, 209); // yellow
    }
    int x = random(0, 320);
    int y = random(0, 240);
    int r = map(constrain(level, -90, -50), -90, -50, 5, 30);

    M5.Lcd.fillCircle(x, y, r, c);
  }
}

シリアル通信で1行読み込んだら、その文字列をカンマで分割し、「デバイス番号」と「信号強度」を取り出します。
それらの情報に基づいて「円」の色と大きさを決定し、LCD画面上の適当な場所に表示します。

結果は以下のとおりです。

とても簡単に、IoT端末用マイクロビットのデータをM5Stackまで受け渡すことができました。

M5Stack用のスケッチを、データをWebサーバに送信するように書き換えるだけで、お手軽にゲートウェイをつくることができます。

なお、私がマイクロビットの使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。


初心者向けから、比較的高度なものまで、さまざまな情報が記載されているだけでなく、子供向けの作例も多数掲載されていますので、「プログラミング教育」のための題材さがしなどにもおすすめです。


このサイトで書いている、マイクロビットに関するブログ記事を、「さとやまノート」という別のブログページに、あらためて整理してまとめました。

他のマイクロビット記事にも興味のある方は「さとやまノート」をご覧ください。