インターネットへのリモート接続をサポートするモノのインターネット デバイスとして、ローカルまたはリモート 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 は正常に起動できません。
以上がESPith SDK x(スクリプトプログラマブルコントローラ)のOTA機能実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。