「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > ESPith SDK x(スクリプトプログラマブルコントローラー)のOTA機能実装方法

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

2024 年 11 月 1 日に公開
ブラウズ:400

インターネットへのリモート接続をサポートするモノのインターネット デバイスとして、ローカルまたはリモート 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 書き込みを通知します。完了すると、SDK は ESP8266 の起動時に別のファームウェアで起動するようにシステム パラメータを設定します。

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)

リリースステートメント この記事は次の場所に転載されています: https://dev.to/zhangzhuyue/how-to-implement-ota-function-for-esp8266-with-sdk-2xxscript-programmable-controller-a60 侵害がある場合は、study_golang にご連絡ください。 @163.com 削除
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3