マイコンESP32をECMAScript+WebScockeでサーバと接続しデータ交換するチャレンジ

マイコンESP32をECMAScript+WebScockeでサーバと接続しデータ交換するチャレンジ:


0.これは何?

毎年、年末年始の休み期間に新しいことにチャレンジしている。今年はマイコン用のピュアなJavaScript(ECMAScript)開発環境のModdable-SDKを使ってマイコン(ESP32)とサーバ(Linux・Node.js)をWebScocketでつないで見たいと思う。

これから、作業とほぼ同時進行で(行き当たりばったりで)この記事を更新して行こうと思う。


1.きっかけはRebuild.fm


  1. JavaScript(ECMAScript)でシームレスにIoTを開発する野望

    先年、Raspberry Pi からNode.jsとjohnny-fiveでESP8266とWifi通信させて簡単なIoT実験を行った。このとき、実験システムのプログラムはRaspberry Pi側(サーバ)はNode.jsでJavaScriptを用い、ESP8266側(クライアント)はarduinoのC++を用いた。

    ESP8266側でJavaScriptが使えれば2つの言語でプログラムする手間がなくなり便利になるだろうと感じた。また、Web系のフロントエンド・エンジニアがIoTシステムを作るときデバイス側のマイコンがJavaScriptでプログラミングできたら、きっとハードウェア・エンジニアの思いも及ばぬモノを作り上げるのではないかとも思ったりもした。

    …と、言うことでマイコンでJavaScript…正式にはECMAScriptが稼働するオープンソースの環境はないか探索を始めた。

    JavaScriptのマイコン開発環境は色々ある。micro:bit, ESPruino, Sparcle, Tessel, obniz 等々 しかし特定のマイコンボードに依存せずオープンソースかつフルスペックのECMAScriptが動くものは見つけられなかった。

    Node.js + Johnny-five を使えばホスト側(サーバ側)のJavaScriptプログラムだけでマイコンを制御できるが、マイコンが自律稼働しつつホストと連携するようなシステムを構成することはできずマイコン利用のメリットがあまり生かされないシステムになる。

  2. ポットキャスト Rebuild.fm 214回 の”Moddable”の話題

    探索をしばし放置していたが、何気に聞いたポッドキャストrebuild.fm 214回 (1:52:12)@basuke さんの話に釘付けになった。
    マイコンで標準JavaScript === ECMAScriptが動く環境があるとのこと。開発元は Moddable Tech. INC. で開発環境”Moddable SDK”はオープンソースで提供されているとか。

    さっそく、Moddable Tech. INC.のwebサイトやmoddableのgithubリポジトリを開いて見た。何かすごそうな予感。

    ドキュメント「Getting Started」を読みながらModdable SDKをビルドし動かして見ると、予想を遥かに上回る環境でホスト上でマイコンのシュミレータが動く、ソースコード・デバッガがある、ECMAScriptの言語仕様を満足している等々、これを使えば野望を実現できる。
    moddable-SDK.001b-1024x576.png


2.インストール・シェル・スクリプトを書いた

Moddable提供元のインストールガイドに沿ってModdable SDKをビルドしたとき、コンパイルエラーが発生したりpythonモジュールの不足でSDKの動作が止まることがあった。その都度ググって対策を講じて不具合なく動くようになった。

これからModdable-SDKを使おうとする人向けに、その時のメモを元にしてエラー無く一気通貫でModdable-SDK環境をセットアップするシェルスクリプトを書いた。

  1. macOS用 Moddable SDK 簡単インストーラ
  2. Linux用 Moddable SDK 簡単インストーラ
  3. 残念ながらWindows用は作っていない


3.IoT定番の温度計を作った

SDK付属のexampleを試行しつつ練習してみた

  1. ESP32をModdable/ECMAScriptでLちかプログラミング

  2. M5StackをModdable/ECMAScriptでプログラミング
  3. ESP32でModdable/ECMAScriptのREPLを使ってLチカ
  4. Moddable/ECMAScriptで温度ロガー作った


4.WebSocket接続

温度計ロガーのデータをサーバに投げたい

  1. 試行システム
    webscket-test.jpg

  2. クライアントのESP32でWebSocketを動かすには
    1. Wifiリンク

      先ず、WifiリンクとIPアドレス他の設定が必須である。 Moddable-SDKではESP32にアップロードするパッケージをビルドする際にmcconfig に与える引数でWifi-APのSSIDとパスワードを与える。


      $ mcconfig -d -m -p esp32 ssid="XXXXXX" password="YYYYYY"



      このことはドキュメントmoddable/documentation/tools/tools.md の mcconfigパート に記載されている。IPアドレスその他はDHCPで取って来る。固定IPアドレスを割り当てる方法は有ると思うがドキュメントを調べた限りでは、その具体的方法を発見できていない。

《 現在、作業中 》

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)