雑食エンジニアの気まぐれレシピ

日ごろ身に着けた技術や見知った知識などの備忘録的なまとめ.主にRaspberry Piやマイコンを使った電子工作について綴っていく予定.機械学習についても書けるといいな.

【M5StickC Plus】UIFlowのRemote機能で使用しているURIを取得する

タイトルにM5StickC Plusってつけてますが,多分どのM5シリーズでも一緒.

ひょんなことからインターネット越しにM5Stickを連携させたいということになって,少し調べてました. (※今回の要件はセキュリティ度外視)

で,UI-FlowのRemoteという機能を使うと簡単にできそうということが分かったんですが,少し引っ掛かったところがあったのでまとめました.

結論としては.

  • Remote機能を使うとインターネット越しに(=同一ネットワーク外からでも)アクセスできる
  • アクセス用のRESTはapi.m5stack.comに置かれており,完全なURIはパケット解析しないと得られない?
    • ⇒追記:ブラウザの開発モードから通信キャプチャすると簡単に取得できるという情報を頂きました.感謝!

以下,ここに至るまでの顛末です.

UI-FlowのRemote機能について

遠隔制御 · UIFlow Use

様の記事が非常に分かりやすいです.大感謝!

Remote機能は同一ネットワークからしかアクセスできない?

ところがこのRemote機能の仕組みについて呟いたところ,


先ほどのエントリの著者である たなかまさゆき さんからコメントを頂きました.ありがとうございます.

曰く,このRemote機能は同一ネットワークからしかアクセスできないとのこと.

なるほど,まぁそうですよね.

とはいえ一応確認のため,別ネットワークであるモバイル回線から試してみたのですが,,,

アクセスできてしまいました

もしかすると仕様が変わったのかもしれません.少なくとも現時点(2021年6月6日)ではアクセスできるようです.

アクセス先のAPIURIは?

そうなるとアクセス先のAPIがわかれば,当初の目的であるM5StickC同士の連携が実現できそうです. が,どうにも記載は見つかりません.
というわけで,wireshark使ってパケット解析してみました.

で,得られたURIがコチラ.

http://api.m5stack.com/v1/394XXXX/call?func=_remote_LED(1)

※IDっぽいところはぼかしてますが8桁の16進数が入る模様.

_remote_LEDは今回UI-Flowで定義した関数名です.スイッチボタンだったので,引数の部分でOn/Offを切り替えられるんだと思われます.

このURIにGETを投げてみたところ,M5StickCを操作することができました.
(PUTとかじゃないんですね.)

追記:ブラウザの開発モードから通信キャプチャするともっと簡単

REST_URLの取得方法について,先ほどの たなかまさゆき さんより再度コメントを頂きました.本当にありがとうございます.

試してみましたが,めちゃくちゃ便利でした.FireFoxでもChromeでも,ブラウザには大体この機能が備わっているかと思うので,ぜひ試してみてください!

おわりに

というわけで,M5StickのRemote機能を使うことで簡単に?M5Stick同士のインターネット越しの連携を実現できそうです.
なお,この機能で生成されるURIはHttpですし,上述のようにURIを叩けば実行できてしまうので,セキュリティ的にはかなりまずいと思われます.
M5シリーズはプロト用の運用が想定された製品なので,手軽さのためにこの辺りをそぎ落とすのは妥当な判断だと思います.ただし利用者はそのあたりをちゃんと認識したうえで使う必要がありますね.

それでは.