ogochan
弊社で開発するIoT絡みのファームウェアは、実はほぼ単一のソースから作られています。たとえば、
この機器のファームウェアがまさにそれですが、他にもいくつかあります。
マイコンは昨今の半導体不足の絡みもあって、ESP32ほぼ一択になってしまいました。別にWiFiが必要でなくても、ESP32は供給が今のところ安定していて納期も短く、そこそこ高速でSDKもまぁまぁあって... といった事情です。ピン数のこととか考えるとSTM32とかにしたいものも多いのですが、手に入らないものは使いたくても使えません。
「IoT機器のファーム」に求められるものはだいたい似ているものなので、同じソースコードを使い回して、つながるセンサーやアクチュエータ部分を実装して行くという形式になっています。ここに自社クラウドサービスをセットにすると、ローコストにシステム構築できます。
フレームワークのコア機能としては、
- WiFiへの接続
- クラウドサービスへの機器登録
- クラウドサービスからの設定情報の取得
- 設定時刻でのアクチュエータ指令の取得蓄積
- 設定時刻でのセンサーデータの送信
- 機器状態によるアクチュエータ動作
- ファームウェアの自動更新
などがあります。「IoT機器を作りたい」な要求の場合、「ありがち」で「やっておいた方がいいこと」の実装は、結構厄介な問題だと思います。そこはもうほぼ実装済みになっています。
WiFiへの接続や機器登録については、機器自身がAPとなって設定するというありがちのものですが、ここは機能を絞って、スマホの専用のアプリを作っています。後述するように、ここに多くの機能は不要です。
機器の設定情報は、クラウドサービスにつながる最低限の情報のみ機器に保存し、それ以外はクラウドサービス側から取得します。オフラインになりがちの機器の場合は、NVS(不揮発メモリ)にキャッシュ的に保存することもありますが、あくまでもキャッシュです。
機器の設定については、しばしば機器自身にAP接続して設定するものが多い(たとえば「WiFiルータ」とかそうですね)のですが、機器自身にその機能を持たせると、えてしてpoorなUIとなったりバグが多かったり、酷い場合にはセキュリティホールになったりしがちなので、そうならないためのクラウドサービスを用意しました。そもそも、「IoT機器にログイン」することは、その機能の存在自体がリスクですから、特にインターネット側からは出来ないようになっています。これで「知らない間にIoT機器がクラックされてボットにされる」というリスクはほぼ消えます。
そして、ログインする方法も、
で説明した方法になっています。
センサーやアクチュエータの動作は、これもありがちのことですね。だいたいのIoT機器に必要なことだと思います。
まぁそういった「ありがち」で「やっておいた方がいいこと」をまとめてフレームワーク化しています。開発する方からすれば、必要そうなものは既に揃っていて、新規に作らなければならないことは、
- ハードウェア
- ハードウェアの操作に必要なドライバ等
- ハードウェア固有の自律動作
だけになります。つまり、機器固有の部分に集中できるわけですね。
現状では表題にあるようにESP32にしか対応していませんが、以前作った某センサーデバイス用(中身はMarvellのWiFiモジュールが使われています)に対応したり、その他の環境用に作ったりということも考えています。
ESP32としてもまだメモリに空きがあるので、BlueToothに対応したりJavascriptエンジンを搭載したりということも既にロードマップ上にあります。
現在、まだクラウドサービスはパブリックリリース前ですし、フレームワークもコードの整理が必要(特定顧客向けコードとフレームワークのコードが混在している)状態なのでGithubに置くのはもうちょっと先になりますが、個別開発としては引き受け可能となっていますので案件があればよろしくお願いします。