
きたきたきたー!
なんか興奮してますね!w


スマホとXIAOだけでNodeのJohnny-Fiveを動かせるようになったよ!
NodeとかJohnny-Fiveとか何それ?

はい、ちょっと興奮気味なんですが今日のネタは、
「XIAOとスマホを接続して、それだけでXIAOを制御する!」

ってことがメインテーマです。物理的な接続イメージは図に書くとこんな感じです。node.js実行環境をtermuxに作り、johnny-fiveというnode環境で動作するものをFirmataプロトコルでXIAOとやりとりします。もっと簡単にいえば、
JavaScriptでXIAOを操る ですね。
通常、node.js実行環境はPCに作ったりしますので、物理的な接続イメージは以下のようになるかと思います。

JavaScriptでXIAOのGPIOを操作するのですが、まだこの構成のメリットがよくわかっていませんので、触ってみようと思いました。
物理的に用意するもの
(1) Androidスマホ
(2) Seeed XIAO
(3) ケーブル(Type-C x Type-C)
Androidスマホは手持ちのものでも、余ったものでもOKです。XIAOは3個入りで1800円くらいでアマゾンから購入できます。ケーブルは100円ショップですね。
Androidスマホ の必要アプリ
GoogleStore : Termux
https://play.google.com/store/apps/details?id=com.termux
まず、Androidスマホのアプリを入れておきます。あと、もう一つ有償アプリですが以下を入れておきます。日本円で190円です。
GoogleStore : BT/USB/TCP Bridge Pro
https://play.google.com/store/apps/details?id=masar.bluetoothbridge.pro
これはブリッジアプリで、今回の用途ではXIAOのUSB接続のシリアル通信をTCP上にブリッジする用途で使います。シリアルTCPのブジッジアプリは他にもいろいろありますが、XIAOと接続できた勇逸の神アプリです。
Termuxのセットアップ
アプリを入れたら、パッケージをアップデートしておきます。Termuxのコンソールからタイプするのが面倒なら、PCからSSHして作業するといいかもです。
pkg update
pkg upgrade
以下が今回必要なものです。
pkg install nodejs python clang make openssh -y
手持ちの環境、HUAWEI P20 liteでは以下が入りました。
$ dpkg --list | egrep 'node|python|clang|make|openssh' | cut -b 5-50
clang 11.1.0 aarch64
make 4.3-1 aarch64
nodejs 14.15.4-1 aarch64
openssh 8.4p1-1 aarch64
python 3.9.2 aarch64
termux-exec 1:0.8 aarch64
nodejsはもう14なんですね。速すぎる!ぜんぜんついていけないです。
サンプルソースとインストール
まず、termuxでの操作です。コピペしやすいよう$ は省いておきます。
cd
mkdir j5
cd j5
wget https://github.com/take-i/j5-termux/archive/main.zip
まだ説明も何も書いていませんがそのうち、簡単に書いておきます。
サンプルソース
https://github.com/take-i/j5-termux
サンプルソース解凍しインストール
example にLEDが光るサンプルソースが入っています。
unzip main.zip
cd j5-termux-main/example/
npm install
IPアドレスを修正
WiFiに接続していると思いますので、termux上でIPを確認しておきます。
ifconfig | grep inet
以下のようなIPv4が出ますので、それをメモしておきます。この場合は、192.168.1.36が自分のスマホのIPですね。
inet 192.168.1.36 netmask 255.255.255.0 broadcast 192.168.1.255
サンプルソースのIPを修正します。portは、あとでブリッジアプリで設定しますので、1024番〜の適当なポートにしておきます。1234でもOKです。
------- example/index.js
::
var options = {
host: '192.168.1.36', //host name or IP
port: 1234 // port
}
XIAOにFirmataをセットアップ
この記事を書いている時はまだ、XIAOはFirmataのコードをビルドするとエラーになりますが、以下を適用すればOKです。そのうち、masterにマージされると思うので、ビルドエラーが出なければOKです。
add seeedunio xiao to boards.h please #475
https://github.com/firmata/arduino/issues/475
具体的には、以下からFirmataをダウンロードします。
firmata/arduino Releases
https://github.com/firmata/arduino/releases/
Arduino-1.0.x-Firmata-2.5.8.zip
先ほどのFixをBoards.hに反映し、ArduinoIDEからインポートします。

スケッチ例>Firmata>StandardFirmata のスケッチをXIAOに書込みます。

エラーなく書き込めたらOKです。
スマホでブリッジアプリを設定
次はスマホで BT/USB/TCP Bridge Pro のアプリを設定します。このアプリはDevceAとBをブリッジしますので画面のように設定します。

XIAOをUSB接続するとアクセス許可がでますのでOKします。「このUSBデバイスをデフォルトにする」はチェックしておいたほうがいいですね。

USBデバイスに接続(USB connect)し、TCP Serverをスタートさせます。2つ上の画像、右側のようになっていればOKです。
起動!
Termuxのindex.jsがある場所で以下のコマンドを実行すると動作します。
node index.js
成功すれば、以下のようにターミナルに表示されているはずです。
Connected to USB2TCP Bridge
IO ready!
1614296838868 Available Firmata
1614296838874 Connected Firmata
1614296838882 Repl Initialized
>> Board connected!
XIAOの青色LEDが光っていれば成功です。写真では青色LEDが光っているタイミングを写せなかったので光っていませんが、チカチカしているはずです。

お疲れ様です。
まとめ
今回、なんとなくわかったのは以下となります。
・Termux上でJ5を使う時は、USBに接続したボードを認識しないので、別アプリでUSBをTCPにブリッジさせて使う
・ブリッジさせるアプリはたくさんあるが、J5からXIAOと通信できたのはこれだけ
・実際に開発するときは、スマホ充電しながらUSB接続しないと電池持ちが。
・J5の使い所がまだよくわかっていないので、例をこなしながらどんなメリットがあるのか体験してみる
あとがき
node.js実行環境をTermuxに作ってそこから有線USB接続したXIAOを操れることがわかりました。まだ、どんなことができるのか、そしてどんなメリットがあるのかまーったく分かっていませんが今後、面白い活用方法などがあれば紹介、DIYしたいなと思います。
著者にメッセージ
間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。