寒い季節になると何故かマイコンでなにか作りたくなりますね。
久しぶりの開発にあたり、2021年3月現在どの言語やライブラリ使うと面白いかなとか個人的な主観でまとめたものです。
ただ、仕事で組み込み開発とかやってるわけでもなくフロントエンドやサーバーサイドの開発などの経験しかないので、低レイヤは素人同然です。
開発嗜好
- JavaScriptが好き
- GoとRustに興味ある
- C言語系は
怖い避けたい(実装済のコードを参考程度に読むのは良いのですが…書けないので……) - かつてFirmataを利用したフレームワークを利用し、Raspberry Piで開発したことはあるので、ボードに直接バイナリ書き込み?できるやつが面白そう
私見なまとめ
個人的に面白いかつ良さそうなのハードウェアとフレームワークの組み合わせ?は下記3つ。
- JavaScriptをマイコンに書き込め!な「M5StackかM5StickC」で「Moddable」使う
- JavaScriptでIoTやりたいだけなら「Raspberry Pi Zero WH(かW)」と「Johnny-Five」
- インターネット使わないなら「Seeeduino XIAO」と「TinyGo」
フレームワーク | Moddable | Mongoose OS | IoT.js | Espruino | Cyron.js | Johnny-Five | TinyGo | Embedded Rust |
---|---|---|---|---|---|---|---|---|
言語 | JS(ES2020) | JS(ES2015) | JS(ES2015)? | JS(ES5) | JS(Node.js) | JS(Node.js) | Go | Rust |
JavaScriptエンジン | XS | mjs | JerryScript | Espruino | V8(※1) | V8(※1) | - | - |
サポートハードウェア | ESP8266,ESP32系など | ESP8266,ESP32系など | 3つ? | 多数 | 多数 | 多数 | 多数 | 多数 |
※1 Cyron.jsとJohnny-Five については、Firmataを使った通信でホストからマイコンを操作する形態なため、マイコン単体では動作出来ないことに注意
最高なのはModdable!いかすぜ!マイコンでJavaScript動く時代!
インストールが少し手順多い以外は欠点らしい欠点がない!
もしかしてハードウェアシュミレータつかえばスタバでも開発出来たりする?
Moddable
JavaScriptでマイコンが動かせる!すごい!
JavaScriptエンジンのXSはES2020にほぼ対応しているらしい※
サポートデバイスは結構多い…M5Stack系を使うのが無難そう。Raspberry Pi Picoサポートもそのうちリリース…される?。
ハードウェアシュミレーターやデバッガがついてきていたれり尽くせり…実機がなくてもある程度開発できたりするのか…?
個人的はPocoがお気に入り。
まるでHTMLのCanvasを扱ってるかのようにLCDを操作できる抽象化はWeb開発経験者の心にはささるものがある。
DOM操作の用に扱いたいもしくは良い感じにコンテンツを表示したいならPiuを使うといいぽいですが…うーんこっちは少し無理やり感あるような……それにしても複雑なコンテンツを簡単な実装で表示できるのは凄いです。
Moddable Techが開発主体らしいけど、License見る限りOSSを推進してるぽく楽しそうな雰囲気。
https://www.moddable.com/www.moddable.com
あと日本語で本書いている方がいた。すごい!
Mongoose OS
JavaScriptでマイコンが動かせる!すごい!
mjsで動かすらしくES6(ES2015)は対応らしい。
AWSパートナーなので、AWSで開発が捗るとかなんとか
サポートデバイスがまだ少ないぽい。 技適的に大丈夫で日本国内で入手容易なのは「ESP32 Devkit-C」かな?
あと、mjsがGPL v2なのでバイナリ配布する際は Mongoose OSの商用ライセンスを購入しない限りソースコード公開必須…なのかな?Apache 2.0とも書かれてるしわからない…
JerryScript(IoT.js)
JerryScriptがすごそう!(よく分かってない)
組み込み向けぽいIoT.jsプロジェクトを除くとサポートデバイスが少ない。
https://github.com/jerryscript-project/iotjs
Sumsungが開発してたプロジェクトをOSSにしたぽい
https://www.infoq.com/jp/news/2015/08/iotjs-jerryscript-samsung/
開発状況みるにJerryScriptがメインのプロジェクトで、マイコン向けのIoT.jsの開発は活発じゃなさそうな……
Espruino
詳しくしらべてないけど、サポートデバイスも多いし実はこれが正解なのかもしれない。。。
専用ボードのみかとおもったけど、ESP32もいけるぽい
以下は昔使っていて面白かったやつ
直接書き込める軽量なバイナリをJavaScriptで生成できなかった?時代だったのか、そういうの知らなかっただけなのか…
Cyron.js
gobotの派生プロジェクトでしょうか?
初めてRaspberry Piでセンサーとか使う開発したときに使ったしたフレームワークです。
2016年?とかだったたかJohnny-Fiveのサポートするボードやライブラリが少なかったころは、JavaScriptで開発する一番良い選択肢だった記憶です。
競合のJohnny-Fiveの勢い押されたのか2021年3月現在の開発状況は……
Aruduinoを使いたい場合は、Firmataを利用するのでJohnny-Fiveと同じく、ホストなしでの動作はできない。
Johnny-Five
対応デバイスの多さ、対応センサの多さ。
Aruduinoを使いたい場合は、Firmataを利用するのでCyron.jsと同じく、マイコン単体での動作はできない。
しかしRaspberry Piで開発するなら話は別でサポートするコンポーネントの多さから、最高の選択肢の一つになる。
以下はJavaScriptでない方々
TinyGo
曰く、Go言語でマイクロコントローラとかWasmとかで使用するためのコンパイラらしい。
サポートデバイスもたくさん。
2020年の年末にLCDとかセンサつなげて動かして楽しんだりした。
ただ、WiFiやBlootoothのサポートが微妙ぽい?
あとI2CやPWMのサポートが微妙なデバイスも多い?
通信とかしないプロダクト開発だと面白い選択肢かも
Embedded Rust?
avr-rustが本家のRustに統合された?とかなんとか
awesome-embedded-rustを見るだけで楽しい。
Rustわかんないけど、書けると楽しそう。Rust勉強していつか使いたいと思ったり。
ハードウェアとか
Seeeduino XIAO
Arduino互換ボードでめっちゃ安い。
WiFiなどの通信機器が搭載されていないため、技適を気にせず適当に買える。
通信とかがいらない開発するならコレだと思う。M5StickC
M5Stackより安い。というよりESP32系のUSB-シリアル変換IC載せたボードより安い気がする。
Pinの数が気にならないプロダクトはこれで良いのでは?M5Stack
なにげにRaspberry zeroより高いけど、検索するとサンプルコードや書籍も多くてドキュメントに困らないイメージ。
値段については一度M5Stackで開発してからESP32,ESP8266系のボードにコンパイルし直せば安く運用できたりすると思うので、開発用として一家に1台は持っておくのが良さそう。Raspberry Pi Zero WH
小さくて安くてGPIOピンがついたARM CPUのPC。WiFiが使える。
お一人様1人1個までの制限がWにはあったがWHにはない…のかな。
はんだごて持ってる人はWでも良いと思う。
感想とか
JavaScriptで組み込み開発はJavaScriptエンジン(Node.js)がボトルネックになってバイナリ生成してマイコン単体で動かすのは無理だと思ってたのに、2021年3月現在では低リソース用のJavaScriptエンジンが多数あって驚いた。
JavaScriptエンジンを調べたら思いのほか多くて驚いたり。
https://en.wikipedia.org/wiki/List_of_ECMAScript_engines
知識不足のため間違っていることも多いかと思いますで、
優しい方はコメントで教えて下さると幸いです。
TinyGoとModdableはちょっとだけ触ったよって話
実際に触ったの2つだけやんって話で、触ってない他のフレームワークのほうが良い説もある。
Moddable 公式のサンプルコードが「M5StickC」対応だったのか、持っていた「M5StickC Plus」のディスプレイがうまくつかなかったのでSSD1306使って遊んだ。
TinyGo
TinyGoいけるやん pic.twitter.com/UWP9ECLeLr
— taka@SIではたらいてたフレンズ (@amanoese) 2020年11月11日Cyron.jsは燻製器の温度制御に使った日があったな…という思い出
IoTで燻製肉作成中……(internet要素無し) pic.twitter.com/Eo1PhQguxv
— taka@SIではたらいてたフレンズ (@amanoese) 2018年9月23日