ホームページ >バックエンド開発 >C++ >ESPith SDK x(スクリプトプログラマブルコントローラ)のOTA機能実装方法

ESPith SDK x(スクリプトプログラマブルコントローラ)のOTA機能実装方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-17 18:14:25941ブラウズ

インターネットへのリモート接続をサポートするモノのインターネット デバイスとして、ローカルまたはリモート OTA アップグレードもスクリプト プログラミング コントローラーの重要な機能です。これは、リレーにバグが完全にないという保証がないためです。バグの使用、OTA アップグレード インターフェイスがない場合、顧客がシリアル ポート経由でファームウェアをアップグレードできるようにするのは困難で、コントローラーは工場出荷時にのみアップグレードでき、コストは高く、影響は大きくなります。

さらに、顧客は中国語プログラミングでは実現できないいくつかのパーソナライズされた機能を備えており、実現するにはコントローラーのファームウェアをアップグレードする必要がある場合があります。

これら 2 つの状況は、ローカルまたはリモート OTA 機能を通じて解決する必要があります。

この機能を完成させるまでに少し時間を費やしましたが、次のようにまとめられています:
(1) ESP8266 のフラッシュには、user1.bin ~ user2.bin という名前の 2 つのファームウェアを保存できます。2 つのファームウェアのアドレスは、アドレス 0x0000 に保存されているブート プログラム boot.bin によって決定され、ストレージ アドレスはそれぞれ異なります。フラッシュの容量が異なります。
たとえば、フラッシュ容量が 1M バイトの ESP8266-01S では、ストレージ アドレスはそれぞれ 0x01000 と 0x81000 ですが、フラッシュ容量が 4M バイトの ESP8266-07S では、ストレージ アドレスはそれぞれ 0x01000 と 0x101000 です。

(2) 関数 system_upgrade_userbin_check の戻り値を使用して、user1.bin または user2.bin を実行している現在のプログラムを取得し、ファームウェアをアップグレードし、別のファームウェア記憶領域に完全なファームウェアを書き込みます (たとえば、現在の実行が保存されている場合) user1.bin の 0x1000 に、次にアドレス 0x81000(ESP8266-01S) または 0x101000(EPS8266-07S) にファームウェア user2.bin を書き込み、書き込み後に関数 system_upgrade_flag_set(0x02) を介して SDK 書き込みを通知します。完了すると、ESP8266 の起動時に別のファームウェアが起動されるように、SDK はシステム パラメーターを設定します。

3) 公式に推奨されている方法は、http プロトコル経由でファームウェアをクラウド サーバーのメモリにダウンロードすることです。私はこのプログラムを使用しませんでした。主な理由は 2 つあります。1 つは、このプログラムが厳密に検証されているかどうか、そしてブリックへのアップグレードを回避するためにデータ検証について十分な考慮が払われているとは思えません。次に、このプログラムでは、サーバーからファームウェアをダウンロードするためにコントローラーが外部ネットワークに接続できる必要がありますが、これは簡単ではありません。

私は現在、delphi を使用して一連のファームウェア アップグレード ソフトウェアを開発しています。このソフトウェアは TCP クライアントとしてコントローラーに直接接続するか、クラウド サーバーの TCP ゲートウェイに接続してコントローラーに転送されます。ファームウェアをコントローラーにプッシュするためのデータ フレームに 512 バイト。

次に、この一連のロジックをサーバーに移植できます。顧客はブラウザーから Web ページを開いて、ファームウェアをコントローラーにプッシュできます。

4) データの整合性が完全に検証され、データの最初のフレームで crc32 チェックサムが実行され、ファームウェアがフラッシュに書き込まれ、読み出されて書き込まれた値と比較され、同時に値が計算されます。 crc32 の値と、読み書きデータと比較して crc32 の値を送信する上位コンピューターが同じであり、crc の値も同じである場合、データのフレームは正常に書き込まれたと見なされます。
同時に、データの各フレームの crc32 値を調べ、さらに crc32 値を取得して合計 crc32 値を取得します。ホスト コンピューターから送信された合計 crc32 値と比較すると、関数 system_upgrade_flag_set( を呼び出す前の値は同じです)。 0x02) を使用して、SDK がブート ファームウェアに切り替わるようにします。

(5) ファームウェアの 2 つの異なるファームウェア領域に書き込む user1.bin、user2.bin は同じではありません。RTOS SDK 開発の場合、Makefile 変数 APP の値を変更して user1.bin、user2 を生成する必要があります。 .bin、それぞれ、ホスト コンピュータはコントローラに従ってファームウェアの現在の実行に戻り、コントローラに送信されたファームウェアの別の記憶領域を選択します。ホストコンピュータは、コントローラから返された現在実行中のファームウェアの記憶領域に応じて、他の記憶領域にあるファームウェアを選択します。

両方のストレージ領域で同じファームウェアが使用されている場合、ESP8266 は正常に起動できません。

How to implement OTA function for ESPith SDK x(script programmable controller)

How to implement OTA function for ESPith SDK x(script programmable controller)

以上がESPith SDK x(スクリプトプログラマブルコントローラ)のOTA機能実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。