大きく分けて3種類に分けて考えてみた
Wi-Fiで利用する想定です
- ArudinoIDEでやる
- 更新ファイルを取得しにいく
- サーバを用意しそこに更新ファイルを置き、何らかのタイミングでデバイス自身が更新ファイルを取りにいき、更新する
- 更新ファイルを受付ておく
- デバイス自身でサーバを立ち上げ、PCなどから更新ファイルをデバイスに対して送信する
メリットデメリット考えてみる
ArduinoIDEでやる
やる方法の参考記事
https://diysmartmatter.com/archives/328
- いい感じのArduinoのライブラリとサンプルがあるので、迷わない
- 筆者もすんなりできた
- 複数のデバイスに書き込む際のidの振り分けの方法を考えなくていい
- 例えばそれぞれのipアドレスを固定する際とかコードを直接変更してそれぞれのデバイスに書き込めばいいので
- サーバを用意しなくてもよい
- 同じネットワークにいればできる
- パスワード設定も簡単
- 大量のものに一斉更新ができない
- loopで行っている処理(ArduinoOTA.handle())の負荷
- どのくらい負荷になるのかは未調査
更新ファイルを取得しにいく
- 一斉更新ができる
- サーバを用意しなければいけない
- クラウド上か、ローカルサーバを立ち上げる
- ArduinoIDEでビルド後、binファイルをサーバにアップしなければならない
- ひと手間
- 更新するトリガーを考えなければならない
- 指定のURL先のbinファイルのバイト数が違ったらとか
- バージョンが書かれたテキストファイルを置いて、デバイスのEEPROMとかに保存された現在のバージョンとの差分があったらとか
- サーバから「更新してね!」っていうリクエストを送るとか
- 結局受付の処理が必要
- デバイスに取り付けたボタン長押しとか
- 個体値を設定したいとき方法を考えなければならない
- デバイスのMacアドレスとidを紐づけたテーブルを作るとか
- Arduinoのコードに書いて、自分でidを判断できるように
- テーブルをサーバに置いてもいいかも
- サーバがIP割り振りしつつ、コードを自動でビルドするとか
- 各1デバイスに1ビルドファイルができるイメージ
- デバイスのMacアドレスとidを紐づけたテーブルを作るとか
- それぞれの更新エラーを見つけづらい
- インジケーターなどでエラー表示必須かも
更新ファイルを受け付けておく
- 一斉更新ができる
- 更新ファイルを投げる側のPCの処理が必要
- 更新の際のエラー検出がPCで見えるので楽
- デバイスをAPにした場合、ネットワークの構成をしなくてよい
- wifiルーターなくてもできる
- パスワード設定も可能
- 個体値を設定したいとき方法を考えなければならない
- 同上
利用場面別で考えてみると
自分が今必要になった状態の時、どれを選択するかで考えてみた
複数台(5台以上かなぁ)のデバイスを一気に更新したくて、Wi-Fiルーターがある
「更新ファイルを受け付けておく」がいいかも
たぶんだいたいWi-Fi使って何かするので、ついでに更新用のWebサーバー立ち上げる感覚でやっておくのいいかも
- Arduinoの「スケッチ例」->「ArduinoOTA」->「OTAWebUpdater」を参考に追記していく
- IPアドレスの固定はデバイスのMacアドレスから割り出すコードをArduinoに書いておく
- 更新するPC側をNode.jsやPythonから一斉にファイルを送る
(次回の記事でここら辺のコード書いていく予定)
大量のデバイスを一気に更新したくて、Wi-Fiルーターがない(使えない状況)
「更新ファイルを受け付けておく」のAPモードにしちゃうがいいかも
もともとWi-Fiを使う予定はなかったけど、OTAのために使うようになるって状況なんだと思う
上記のものがAPモードになって、IPアドレスを固定するところがSSIDをユニークな名前にするようになる感じに
USBケーブル繋げる手間があるとき
高所とか何か箱の中に入れておいたりするとき
今までは、そういったところに置く場合は大枠の修正は終わっている状態で、数値調整のみの状態にしておいて、その数値調整はデバイスがWebサーバ立ち上げて、クライアントのPCから渡すなどしていた
調整した数値を再起動後も保持したいならばEEPROMなどに保存しておいた
けども、それよりArduinoIDEからOTAで数値調整して書き込んじゃったほうが、初期の手間は省けそう
遠隔地のArduinoを更新したい
例えば大阪で展示しているものを東京から更新したいときとか
そもそも更新自体失敗したら詰みなので、そういうことがないようにしたい…が、仕方ないこともあるので…
ということで、こういった異常事態は考えておくけど、手間はそんなにかけたくないよねってものだと思う
なので、「更新ファイルを受け付けておく」のWi-Fiルーターがあるなしで、APモードにするかどうかでいいと思う
で、現地の担当者さんにbinファイルを送って更新してもらうがいいかなと
操作マニュアルはもちろん事前に渡して置きつつ、更新成功の確認ができるようにしておく
そういう状態はVPSやリモートデスクトップなど入れていることが多いので、そこからでもできそうではあるが…やはりリアルに確認できるようにはしておきたいですよね
他にもこういった状況だとどうですか?っていうのがあればコメントもらえるとうれしいです
その他の方法
他にもBluetoothでできたり、クラウドサービスやそういったボードを使ったりする方法もあります
最後におまけでメモ程度に
- ArduinoへFirmataを書き込む
- UIFlow
- Wio Node
- obniz
- RaspberryPiを利用する
- やる意味あるかは置いておいて、ラズパイがArduinoボードとUSBで繋がっていて(複数繋げてもいい)そのラズパイにコードを共有して、ラズパイがビルド、それぞれのArduinoへ書き込み
- ラズパイがビルドしてくれるので、開発用PCはリソース空きそう
- ラズパイがビルドしてくれるので、頑張ればidを個別に設定できそう