MixJuice をサーバー化して paprika ロボットを動かす

1. はじめに

IchigoJam などの シリアル通信機器から利用できる ネットワークボード MixJuice ですが、 HTTPクライアント機能に加え、HTTPサーバ機能にも対応してみました。(現状はベータ版。)

MixJuice にPOSTでデータを送信するとシリアル通信のTXDに転送されるようになりました。

下記よりダウンロードしてファームウエアを書き換えてお試しいただけます。
http://mixjuice.shizentai.jp/MixJuice.1.3b1.zip

2. 試し方

今回追加したコマンドは下記です。

SERV START:
HTTPサーバの起動。(デフォルトポート: 80, 追加のパラメータで変更可)

SERV STOP:
HTTPサーバの停止。

SERV NAME ****:
mDNS名の設定。(デフォルト値: “mixjuice”, ****.local の ****部分を指定)

IchogoJam BASIC の場合、下記のようなプログラムでHTTPサーバが起動します。

10 ?"MJ APC ******** ********"
20 ?"MJ SERV START"

データの送信先となる MixJuice の IPアドレス はDHCPで自動的に割り当てられますが、4. MixJuice の IPアドレスの調べ方 を参考にご確認ください。
※ macOS や iOS、Windows 10(1809以降) を使っている場合、mixjuice.local 等のDNS名でアクセスできる場合があります。

データ送信を試すには、MixJuice と同じLANに属するパソコンで下記のようなコマンドを発行します。

macOS/Linux の端末から(LEDをONにする、文字列を送信する)

$ curl -X POST -d payload=LED1%0A http://[MixJuiceのIPアドレス]
$ curl -X POST -d "payload='Hello,World!%0A" http://[MixJuiceのIPアドレス]

Windows のPowerShellから(LEDをONにする、文字列を送信する)

> Invoke-RestMethod -Method POST -Body payload=LED1%0A -Uri http://[MixJuiceのIPアドレス]
> Invoke-RestMethod -Method POST -Body "payload='Hello,World!%0A" -Uri http://[MixJuiceのIPアドレス]

3. サンプルアプリケーション

paprika ロボットを動作させるサンプルアプリケーションはこちらです。
http://mixjuice.shizentai.jp/webapps/1.3b1_robo_c/

MixJuice URL: に http://[MixJuiceのIPアドレス] を入力した状態で矢印のボタンなどをタップ/クリックすると、ロボットを制御するOUTコマンドがIchigoJamに送られます。
※ macOS/iOSのSafari や Windows 10(1809以降)など、mDNSに対応した動作環境では mixjuice.local 等のDNS名が利用できる場合があります。

動作環境ごとのmDNS対応状況(筆者確認分)
macOS (10.12) / Safari
macOS (10.12) / Chrome×
macOS (10.12) / Firefox
Windows 10 (1809) / Edge
Windows 10 (1809) / Chrome
Windows 10 (1809) / Firefox
Windows 10 (1803) / Edge×
Windows 10 (1803) / Chrome×
Windows 10 (1803) / Firefox×
iOS (8.1.2) / Safari
Android (8.1) / Chrome×

4. MixJuice の IPアドレスの調べ方

I. 接続時に画面で確認する(IchigoJamなど)

MixJuice は APCコマンドの成功時に自機に割り当てられたIPアドレスを報告するので、 IchigoJam の画面などで確認できます。
割り当てられるIPアドレスは起動毎に変わる可能性がありますが、一般的に一定時間内は同じ機材(MACアドレス)には同じIPアドレスが割り当てられることが多いため、ロボット等に載せる前にIchigoJam の画面で確認しておくことができます。

II. mDNSを使って確認する(macOS/Windowsの一部のバージョン)

MixJuice は mDNSに対応しているため、同じく対応している macOS や iOS、Windows 10(1809以降) からはDNS名でアクセスすることができます。
また、DNS名でのアクセスがおそい場合は、下記のコマンドでDNS名からIPアドレスを確認してIPアドレスでアクセスしてもよいでしょう。

macOS の ターミナル から

$ dns-sd -G v4 mixjuice.local

Windows 10(1809以降) の PowerShell から

> Resolve-DnsName mixjuice.local

III. ARP を使って確認する

パソコン等は自機が属するLAN内の機器のMACアドレスとIPアドレスの組み合わせ表(ARPテーブル)を 管理しているので、ARP関連のコマンドを使って確認できます。
MixJuice の MACアドレスは MACコマンドで確認できます。

?"MJ MAC"

ARPテーブルには最近通信した機器の情報のみ保持されるため、事前にマルチキャストでpingを打つなどの準備が必要になりますが、下記が参考になるでしょう。(上級者向け)
http://d.hatena.ne.jp/nattou_curry_2/20090906/1252203651

5. まとめと課題

  • MixJuice に HTTPサーバ機能を追加したのでロボットの操作などに使えるようになりました。
  • 現状、IPアドレスを調べるのが少し大変ですが、環境は改善されてきています。
  • IPアドレスを調べるツールを探すか作りたい。
  • mDNSやARPについてもっと詳しくなりたい。
  • パソコン: 最新の環境に限れば、Scratch 対応できそう。
  • スマホ/タブレット: iOSとWindowsに限れば、Scratch 対応できそう。