webGPIO-etc-on-microbit-via-webBluetooth

micro:bit内蔵のセンサーやLED、スイッチ、GPIOポートを、web bluetoothAPI経由でウェブアプリから使う。専用ライブラリが用意されており比較的簡単にコーディングできる。GPIOポートAPIはwebGPIOに準拠、拡張機能としてアナログ入力に対応。CHIRIMEN for RPi3のGPIO(WebGPIO),I2C(WebI2C)とも同時利用可能。

micro:bitは、子供向けの教育用ボードコンピュータですが、Bluetooth搭載で、たくさんのセンサーや表示装置、さらにGPIO端子も載っています。コストパフォーマンスも入手性も良いと思いますので、Bluetoothを用いたIoTのプロトタイピングで、ワイヤレスのセンサーやアクチュエーターなどとして便利に活用できると思います。

Code on micro:bit (slave)

WebApps on Host Computer (master)

回路図

GPIO(Pin)を使わない場合

GPIO(Pin)を使わない場合は単純です。(example.htmlはこれでも動きます。電源は供給してください) GPIOを使わない場合の回路図

GPIO(Pin)を使う場合

GPIO(Pin)を使う場合は、Pin0,1,2はワニ口クリップなどで結線できます。それ以外のピンはmicro:bitのブレークアウトボードを使ってピンヘッダ経由で配線します。 example.htmlのGPIO部は、以下の回路図で動くように組まれています。 GPIOを使う場合の回路図

ライブラリの使い方

大まかな流れは以下の通りです。web bluetoothを直に使うのと比べてだいぶ簡単だと思います。

初期化

初期化後は、以下の機能を独立して使用することができるようになります。複数の機能を使う場合でも初期化は一回行えば良いです。

センサーデータの取得(ボタンもセンサーの一種とみなします)

指示してデータを取得するタイプと、データが変化したらコールバック関数に帰ってくるタイプの、2タイプが使えます。

指示してデータを取得するタイプ

すべて非同期の関数なので、async接頭辞付きの関数内で使用します。返り値は加速度と磁気が3軸のため、.x,.y,.zで各軸にアクセス。他は値がそのまま得られます。

async function getKasokudo(){
  var kasokudo = await microBitBLE.getAccelerometer();
  console.log(kasokudo.x,kasokudo.y,kasokudo.z);
}

getAccelerometer()以外に、getMagnetometer(), getTemperature(), getButtonA(), getButtonB()が使えます。

コールバック関数を指定するタイプ

指定したコールバック関数の第一引数に同様の形式で値が返ってきます。

function accelerometerCBF(val){
  console.log(val.x,val.y,val.z);
}
microBitBLE.onAccelerometerChange = accelerometerCBF;

onAccelerometerChange以外に、onMagnetometerChange, onButtonAChange, onButtonBChange, onThermometerChangeが使えます。

マトリクスLEDの表示

指定したASCII文字列が流れて表示するタイプ、指定したビットパターンが固定表示されるタイプの二つの関数が使えます。

ASCII文字列表示

microBitBLE.setLEDtext("hello!");

ビットパターン表示

microBitBLE.setLEDmatrix(matrixData);

ピン(GPIO Port)の利用

Notes on Web Bluetooth

ToDo_ISSUES