ESP32マイクロコントローラとそのESP-IDFを使用してOTAアップデートを行う方法

著者 Jacob Beningo

DigiKeyの北米担当編集者の提供

モノのインターネット(IoT)製品の設計者は、性能を向上させながらコストと消費電力を削減し、コネクティビティアプリケーションの設計を加速させるために、プラットフォームとコンポーネントの選択を継続的に評価する必要があります。現在、いくつかのソリューションがありますが、設計者は、デプロイした後にデバイスのファームウェアを最新の状態に保つために、無線によるオーバーザエア(OTA)アップデートを行うという課題に直面しています。

重要なのは、OTAアップデートをサポートするために、どのような追加ツールやサポートが提供されているか、利用可能なプラットフォームを確認することです。このようなサポートによってプロセスを大幅に簡素化することができますが、前もっていくつかの注意が必要です。

この記事では、OTAの基礎知識と、開発者が直面する課題にもかかわらず、OTAがほぼすべてのIoTシステムでサポートする必要のある重要な機能である理由について説明します。さらに、Espressif SystemsのBluetoothおよびWi-Fi対応マイクロコントローラESP32と、関連モジュール、キット、ESP-IDF(ESP IoT Development Framework)を使用して、OTAパーティションを作成し、otatool.pyスクリプトを利用して、アプリケーションの実行中にファームウェアのアップデートを行う方法を紹介します。

OTAアップデートの紹介

多くの開発チームは、製品固有の特長、つまり製品を差別化するビジネスロジックを実装することに主眼を置いています。しかし、すべてのIoT製品には、デバイスのライフタイムを通じてデプロイ、構成、維持する必要がある基本的な機能セットがあります。セキュリティアップデートがその良い例です。このようなアップデートの必要性を考えると、適切な開発プラットフォームを評価する際に重要であるにもかかわらず見落とされがちなのが、ブートローダやファームウェアOTA(FOTA)アップデート(単にOTAと呼ばれることもあります)の機能です。

OTAは、エンジニアが技術的およびビジネス上の要件に応じて製品をリモートでメンテナンスおよびアップグレードする機能を提供するものであり、デバイスに対して保守要員を派遣したり、エンドクライアントがアップデートのために積極的にデバイスを操作したりする必要はありません。その代わりに、バックグラウンドで、あるいは深夜などの「ダウンタイム」の時間帯に、デバイスが静かにファームウェアをアップグレードするため、これらのコストをすべて取り除くことができます。

OTAアーキテクチャには、カスタムメイドのソリューションから、クラウドプロバイダが提供する標準的な実装まで、さまざまな形態や構成があります。標準的なアーキテクチャの例を図1に示します。

アプリケーションのファームウェアを更新するプロセスの例を示すOTAアーキテクチャの概要図図1:デプロイされたデバイスにフィールドでアプリケーションのファームウェアをアップデートするプロセスの例を示すOTAアーキテクチャの概要。(画像提供:Beningo Embedded Group)

この例では、自社ブランド製品製造会社がAmazon Web Services(AWS)のIoT Coreを使用して新しいファームウェアバージョンをアップロードし、内蔵されているジョブ機能を使用してフィールドのデバイスにアップデートをデプロイしています。これは数ある例の1つに過ぎず、ほぼすべてのクラウドプロバイダが同様のソリューションを持っています。

現在、OTAをサポートするマイクロコントローラは数多くあります。低コストのシステム向けとして、また、メイカーの間で人気のあるマイクロコントローラとしては、ESP32があります。ESP32が人気を博しているのには、以下のようないくつかの理由があります。

  • マイクロコントローラを内蔵し、Wi-Fi/Bluetooth認証モジュールが利用可能
  • 低コスト
  • オープンソースの開発環境および、ESP-IDFやESP-ADF(ESP Audio Development Framework)などのソフトウェアフレームワーク
  • 既存の数多くのアプリケーションサンプルがウェブ上で自由に閲覧可能

OTAテスト用にESP32モジュールを選択

OTAのサンプルを見るためにユーザーが購入できるESP32モジュールや開発ボードは、数種類あります。たとえば、Adafruit3405 ESP32 Huzzah Featherボードを見てみましょう(図2)。これは、ESP32をプログラムするための回路をすべて搭載し、USBコネクタから電力を供給することができる低コストの開発ボードです。

Adafruitが提供する3405 Huzzah Featherボードの画像図2:3405 Huzzah Featherボードは、4Mバイトのフラッシュを搭載したESP32 WROOM-32D認定Wi-Fi/Bluetoothモジュールを備えています。このボードには、USBを介したモジュールとの通信やプログラムに必要なハードウェアがすべて含まれています。(画像提供:Adafruit)

3405の核となるのはESP32-WROOM-32Dモジュールで、4Mバイトのフラッシュ、Wi-Fi、Bluetooth、そしてほぼすべてのアプリケーションに対応する完全なペリフェラルセットを備えています。

別の開発ボードとして、Espressif SystemsのオーディオボードESP32-LYRATD-SYNAを使用することもできます(図3)。この開発ボードには、ESP32-WROVER-Bモジュールが搭載されています。

Espressif Systemsが提供するESP32-LYRATD-SYNAボードの画像図3:ESP32-LYRATD-SYNAボードは、4Mバイトのフラッシュを搭載したESP32 WROVER-B認定Wi-Fi/Bluetoothモジュールをベースとしています。このボードは、設計者がUSBを介したモジュールとの通信やプログラムを行えるだけでなく、オーディオアプリケーションの開発に必要な回路も備えています。(画像提供:Espressif Systems)

ESP32-LYRATD-SYNAモジュールには、4Mバイトのフラッシュに加え、オーディオアプリケーション用の回路もすべて搭載されています。このボードには、オーディオコーデック、オーディオアンプ、ヘッドフォン端子とスピーカ端子が搭載されており、オーディオアプリケーションを十分にテストすることができます。

OTAテストに使用できる最後の開発ボードとして、EspressifのESP32-S2-SAOLA-1RI開発ボードがあります(図4)。開発ボードとしては、これが一番安価です。このボードには、ESP32 Wroverモジュールと、そのチップをプログラムするための回路が搭載されています。簡単にブレッドボードに載せてテストできるようにピンが付いているだけで、特に飾り気はありません。

WroverモジュールをベースにしたEspressif SystemsのESP32-S2-SAOLA-1RIを示す画像図4:WroverモジュールをベースにしたESP32-S2-SAOLA-1RIは、低コストでありながら、オンボードモジュールをプログラムするのに十分な回路を搭載した、ベアボーン型の開発ボードです。(画像提供:Espressif Systems)

各ESP32モジュールはESP-IDFを利用しているため、テストに使用するボードはそれほど問題ではありません。このフレームワークは、ドライバ、ミドルウェア、RTOS、そして今回の記事で重要なこととして、ブートローダやOTAライブラリなどを含んでおり、開発者のソフトウェア開発活動を容易にするように設計されています。

ブートローダを使用することで、開発者はOTAアップデートを活用したり、メモリを分割してプライマリアプリケーションの実行中にファームウェアをアップデートしたりすることができるため、ダウンタイムを最小限に抑えられます。ブートローダの設定は、最初は複雑に見えるかもしれませんが、正しいガイドがあれば簡単です。

OTA開発のワークフロー

ESP32のOTA開発のワークフローは、ビジネスニーズや製品コンポーネントの選択に応じて若干異なります。たとえば、AWSを活用しているチームは、ESP32 OTAソリューションを動作させるために、AWSのスタートガイドやサンプルを利用するでしょう。一方、独自のソリューションをカスタマイズしている企業では、ESP32のドキュメントを活用することになるでしょう。今回は、クラウドではなく、ESP32レベルで見てみましょう。なぜなら、これらは汎用的で、どのクラウドプロバイダやソリューションを使用するかにかかわらず、ESP32でのOTAに適用されるからです。

一般的に、ESP32でOTAアップデートを設定するには、以下のような手順を踏みます。

  1. ESP32パーティションテーブルの設定
  2. OTAに対応したファームウェアのダウンロード
  3. サーバとして機能し、新しいファームウェアをプッシュするツールの開発
  4. 最新のファームウェアをESP32へダウンロード
  5. 新しいアプリケーションに交換

明らかに、これは簡略化されたアプローチです。開発者の方は、図1をもう一度見て、ファームウェアのアップデートプロセスの全体像を確認してください。このプロセスはかなり複雑になる場合があるため、GitHubにある既存のESP32 OTAサンプルを利用することをお勧めします。これらのサンプルは、次のようないくつかの重要な例を示しています。

  • HTTPS OTA
  • ネイティブOTA
  • シンプルOTA
  • OTAツール(pythonスクリプトの例)

図5は、デプロイとアップデートプロセスのステップを示しています。開発者は、OTAソリューションをESP32モジュールにデプロイするために、最初に赤色のステップを実行する必要があります。オレンジ色は次のステップで、OTAアップデートを促進するために実行します。

Espressif SystemsのOTAアップデートの例を示す図図5:GitHubに掲載されているEspressif SystemsのOTAアップデートの例では、ESP32でOTAアップデートを行うための簡単な例をいくつか紹介しています。(画像提供:Espressif Systems)

OTA用のESP32アプリケーションの設定

ESP32には、マイクロコントローラにどのようなタイプのデータがあり、どこに配置されているかを記したパーティションテーブルが含まれています。たとえば、標準的なESP32のパーティションテーブルは、表1のようになっています。

標準的なESP32のパーティションテーブルを示す画像表1:データのタイプとマイクロコントローラ上のどこにあるかを示す、標準的なESP32のパーティションテーブル。(画像提供:Beningo Embedded )

ファクトリアプリケーションがあり、続いてNVSライブラリと物理層(PHY)の初期化(init)データのセクションがあります。OTA機能を使用するためには、このテーブルを更新し、プライマリ(ファクトリ)アプリケーションに加えて、OTAアップデートファームウェア用に指定されたメモリロケーションがあるようにする必要があります。OTAの場合は通常、アップデート用に割り当てられるパーティションが2つあります。1つはアクティブに更新されたファームウェア用で、もう1つは現在ダウンロード中で最新バージョンになるファームウェア用です。これにより、ファクトリアプリケーションをそのまま使用することができます。アップデートされたOTAのパーティションテーブルは、表2のようになります。

標準的なESP32のアップデートされたOTAのパーティションテーブルを示す画像表2:標準的なESP32のアップデートされたOTAのパーティションテーブル。(画像提供:Beningo Embedded )

図のように、アップデート処理のためにRAMが割り当てられたデータセクション(otadata)に加えて、1メガバイトのサイズのota_0とota_1アプリケーションセクションが存在することになります。このテーブルは、アプリケーションに合わせて開発者が変更・更新することができます。

OTAのサンプルを実行するには、GitHubの「サンプルの使用方法」セクションに記載されている簡単な手順があります。これは、アプリケーションの構築とプログラムの方法を説明するものです。

また、ファームウェアのアップデートに使えるotatoolもあります。このスクリプトは通常、以下の目的で使用されます。

  • OTAパーティションの読み込み、書き込み、消去
  • ブートパーティションの切り替え
  • ファクトリパーティションへの切り替え

サンプルスクリプトを実行するには、ターミナルで次のコマンドを使ってサンプルを実行するだけです。

./otatool_example.sh

あるいは、Pythonで次を使用します。

python otatool_example.py

OTA用にESP32を設定する際は、パーティションの設定を確認することが重要なステップとなります。

使用に関するヒントとコツ

EPS32 OTAソリューションは、開発者のファームウェアアップデートソリューションを加速し、簡素化することができます。ソリューションが開発の負担にならないようにするには、以下のようないくつかの「ヒントとコツ」があります。

  • 可能であれば、企業のクラウドプロバイダに含まれる既存のOTAフレームワークを活用してください。これにより、開発や統合を劇的に簡素化することができます。
  • OTA機能やブートローダのテストには、低コストの開発ボードを使用します。ESP32にはいくつかのオプションがあり、アプリケーションに対してどのオプションが最適なのかを判断するには、いくつかの実験が必要になります。
  • カスタムソリューションに対しては、GitHubにあるESP32 OTAのサンプルを利用します。
  • 製品をWi-Fiルータやハブとして使用する場合は、ファームウェアイメージを外部メモリにダウンロードし、マスストレージデバイスからアップデートを行うことを検討してください。
  • パーティションテーブルについては、ESP32のドキュメントをよく読んでください。これは、標準的なマイクロコントローラの実装とは少し異なります。
  • セキュリティ上の理由から、アプリケーションのロールバックは無効にしておくことをお勧めします。アプリケーションが以前のバージョンにロールバックできる場合、攻撃者は既知のエクスプロイトを含むバージョンをプッシュし、システムを危険にさらす可能性があります。

これらの「ヒントとコツ」を参考にしていただければ、ESP32やその他のOTAソリューションを活用する際に、時間と労力を大幅に削減することができます。

まとめ

OTAアップデートは、増え続けるIoTや組み込みシステムにとって重要な機能です。開発者は、設計・開発プロセスの段階や製品出荷後の時間を短縮するために、効果的な方法をしっかりと把握しておく必要があります。

ESP32ワイヤレスマイクロコントローラはさまざまなデバイスに搭載されていますが、前述のようにOTAソリューションが用意されています。ESP-IDFをはじめとする関連モジュールやプラットフォームを使用し、経験に基づいたいくつかのヒントとコツを活用することで、設計時間を大幅に短縮し、独自のOTAソリューションを立ち上げることができます。

DigiKey logo

免責条項:このウェブサイト上で、さまざまな著者および/またはフォーラム参加者によって表明された意見、信念や視点は、DigiKeyの意見、信念および視点またはDigiKeyの公式な方針を必ずしも反映するものではありません。

著者について

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo氏は組み込みソフトウェアコンサルタントで、現在、製品の品質、コスト、市場投入までの時間を改善することで、ビジネスを劇的に変革するために数十か国以上のお客様と作業しています。同氏は、組み込みソフトウェア開発技術に関する200以上の記事を発表しており、引っ張りだこのスピーカーでありテクニカルトレーナです。ミシガン大学のエンジニアリングマスターを含む3つの学位を取得しています。気楽にjacob@beningo.comにメールするか、彼のウェブサイトwww.beningo.comから連絡してみてください。そして毎月のEmbedded Bytes Newsletterにサインアップしましょう。

出版者について

DigiKeyの北米担当編集者