micro:bit上のEspruinoをDroidScriptから操作して楽できるかと思ったのですが、そうもいかなかった前回でした。そこで方針転換、micro:bit上で動作するBLEから制御できるアプリを作り、それをスマホから制御するという方式に落ち着きました。当然、スマホ側のアプリを作るのにDroidScriptを使用するつもりではいるのです。BLEから制御するのは、無難なところで、BLE上のシリアル接続で、コマンドを送り、データを受信という方式でまずは行うことといたしました。とりあえず何かい、BLE上のシリアル端末あればテストできるんじゃ。。。
※「モダンOSのお砂場」投稿順Indexはこちら
最初に、前回Espruinoのために古いバージョンのDroidScriptをリストアした、古い方のAndroidタブレットのその後をご報告しておきます。翌日見たら、ソフトウエアのバージョンアップがかかり、最新版に更新されてしまっていました。慌てて勝手にバージョンアップが走らないように設定を変え、adbを使ったアプリのダウングレード・インストールを実施。再び復旧しましたが、なんとも、疲れるばかりであります。
気を取り直して、micro:bitのMakecodeエディタを使ってBLE経由での制御対象となるソフトの雛形を作ってみました。といってサンプルプログラムのいくつかをパクッてきて組み合わせただけなのですが。普段と違う「プログラミング」は面白いです。
作成した「プログラム」はこんな感じ。起動したら、bluetoothのuartサービスを立ち上げ、自分のレビジョンをLEDで報告。(今どの版のHEX書き込んであるのか忘れることがあったので、備忘のためRESETかければレビジョンが分かるように)
次にbluetoothでデータを受信したら(デリミタはサンプルそのまま#記号としました)、LEDにRCVと報告し、文字列を変数itemにセットして、さらにLEDにその文字列を流す(micro:bitの場合、表示というより「流す」という感じ)。ここがコマンド受信部分のプロトタイプ。今後は、送られてきた文字列に応じて、適宜、端子出力など所望の動作をさせようという目論見です。
データをスマホ側に報告するには、bluetooth uartに文字列を送り出せばよいですが、今回は切っ掛けにボタンAを使ってみました。ボタンAを押すとALIVE#とスマホ側に言う。#はスマホ側で処理するときのデリミタのつもり。その後、送信したことを目で確認できるように、ボタンAなので、LEDをAと光らせ、0.5秒後に消す。実際には制御結果のデータなどを送り返すのに使おうという意図です。
micro:bitに書き込むところまでの「プログラミング」は楽しいのですが、その後、ちょっと楽しくないのが、毎回のペアリングです。
横にアイコンを示しておきますが、micro:bitのコンパニオンアプリというもので、micro:bitとスマホ間のペアリングをしないとならないのですが、これが面倒。USB経由でmicro:bitに新なプログラムを書きこむとmicro:bit側のペアリング情報が失われるのは、まあ、致し方ない。けれど、面倒なのは、
スマホ側でもペアリング情報を消しておく
必要があることです。これを忘れて何度も唸りました。両方の頭を空っぽにしておいてから、おもむろに、コンパニオンアプリを使ってペアリングしないとならないのです。
- micro:bit側では、Aと Bボタンを押しながら裏側のRESETボタンを押し
- AとBボタンを押したままで、RESETボタンを離し
- LEDが全面的に光り終わるくらいまでAとBボタンは押したままでいる(タイミングが早いとアプリが起動してしまうのでRESETをリリースした後もしばらく押している必要がある)
- BLUETOOTHのペアリング用のパターンが表示されたら、コンパニオンアプリの画面でそのパターンを入力し、次へ!
- スマホのコンパニオンアプリがペアリングOKになるまで少し待つ(OKなのか、エラーなのかハッキリするまでちょっと時間がかかる)
でも、ここで非常に大事なのは、
micro:bit側も、ペアリング成功するとペアリング用のパターンから「チェックマーク」に変わる
のをちゃんと確かめることであります。スマホ側がOKとか言っても信じちゃだめなようです。「チェックマーク」に変わらぬまま通信始めると、上手く行きませぬ。
さすれば、ペアリングもでき、micro:bitでは、bluetooth uart serviceが動作しているので、スマホ側からconnectして、文字列を流し込んだり、読み取ったりできるようになっている筈。今回使わせていただくのは、スマホ上のbluetooth serial Terminalのアプリケーション。動作はこんな感じ(画面が縦長すぎるので、ちょっと短くしましたが)
まず、接続するデバイスを選んで、Connectします。
その後、入力フィールドに適当な文字列(忘れずに末尾に#を入れる)を書き込んで右の送信ボタンを押せば、端末上では水色でxc#と表示されています。micro:bitにも目出度く受信されており、
RCV xc
などとLEDに表示されます。しかして、ボタンAをば押せば、端末に緑の文字で
ALIVE#
と返信が返ります。今回、DroidScript の出る幕なかったな、残念。