2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Arduinoとケーブルを繋がずに書き込めるOTA(Over The Air)の種類分けと整理

Last updated at Posted at 2025-06-04

大きく分けて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ビルドファイルができるイメージ
  • それぞれの更新エラーを見つけづらい
    • インジケーターなどでエラー表示必須かも

更新ファイルを受け付けておく

  • 一斉更新ができる
    • 更新ファイルを投げる側のPCの処理が必要
  • 更新の際のエラー検出がPCで見えるので楽
  • デバイスをAPにした場合、ネットワークの構成をしなくてよい
    • wifiルーターなくてもできる
  • パスワード設定も可能
  • 個体値を設定したいとき方法を考えなければならない
    • 同上

利用場面別で考えてみると

自分が今必要になった状態の時、どれを選択するかで考えてみた

複数台(5台以上かなぁ)のデバイスを一気に更新したくて、Wi-Fiルーターがある

「更新ファイルを受け付けておく」がいいかも
たぶんだいたいWi-Fi使って何かするので、ついでに更新用のWebサーバー立ち上げる感覚でやっておくのいいかも

  1. Arduinoの「スケッチ例」->「ArduinoOTA」->「OTAWebUpdater」を参考に追記していく
  2. IPアドレスの固定はデバイスのMacアドレスから割り出すコードをArduinoに書いておく
  3. 更新する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を個別に設定できそう
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?