ESP32-C3 学习测试到今天,一直在使用 ESP-IDF 的框架,
但是还从来没有注意过工程结构,遇到复杂一点的项目,工程结构就显得太乱了,
本文就来了解下 ESP-IDF 工程结构。
序文
Bluetoothテストに加えて、ESP32-C3を使用するための小さなIoTアプリケーションをすでに作成しています。
ESP32-C3入門チュートリアルアプリケーション(例1:MQTTプロトコルを介したONENETプラットフォームへの接続)
ただし、実際の操作では、ほとんどの場合、アプリケーションコードをmain.cファイルに直接追加します。ドライバーファイルが少し多い、より複雑なプロジェクトに遭遇すると、プロジェクトの構造が乱雑になり、非標準になり、移植が不便になります。上記のESP32-C3アプリケーションの記事で言及したプロジェクトでは、ファイルの追加の問題が発生したため、この基本的な問題の問題を回避するには、ESP-IDFプロジェクトの構造をよく理解している必要があります。
この記事の目的は、ESP-IDFエンジニアリング構造を理解することにより、標準化された方法で独自のエンジニアリングコードを追加できるようにすることです。
この記事は、VScodeプラグイン(Ubuntu環境)のエンジニアリング構造に基づいています。環境のセットアップについては、次のブログ投稿を参照してください。
ESP32-C3 VScode開発環境が構築されています(Espressifの公式ESP-IDF-WindowsとUbuntuのデュアル環境に基づいています)
1.ESP-IDFエンジニアリングの基本的なフレームワーク
次の図に、標準のエンジニアリングフレームワークを示し
ます。アプリケーションの章のMQTTプロトコルを介してONENETプラットフォームを接続するプロジェクトをデモンストレーションとして使用します。最初に、フレームワーク全体を見てみましょう。
1.1メインプロジェクトディレクトリ内のファイル
トップレベルのCMakeLists.txt
プロジェクトのビルド方法を学習するためにCMakeが使用するメインファイルであるトップレベルのプロジェクトCMakeLists.txtファイルは、
このファイルでプロジェクトのグローバルCMake変数を設定できます。一般的に、変更する必要があるのはプロジェクトです。名前。
トップレベルのMakefile
内容CMakeLists.txt
はです。実際、CMakeでビルドする場合はこのファイルは必要ありません。このファイルをテストして削除しましたが、正常にコンパイルできるので、古いビルドで使用する必要があります。メソッドGUNMake 。。
IDFの現在のバージョン(4.3以降)はこのファイルを必要とせず、変更せずに削除できます。
sdkconfig
プロジェクト構成ファイル。このファイルは、idf.py menuconfigの実行時に作成または更新され、プロジェクト内のすべてのコンポーネント(ESP-IDF自体を含む)の構成情報がファイルに保存されます。sdkconfigファイルは、プロジェクトのソースコード管理システムに追加される場合と追加されない場合があります。
必要な設定はmenuconfigで構成されます。このファイルは、menuconfigが変更されずに実行された後、自動的に更新されます。
1.2メインディレクトリ内のファイル
メイン中的CMakeLists.txt
CMakeをガイドし、それとファイルの場所を伝える.c
ファイル.h
。.c
ディレクトリの下にいくつかのファイルがあります。いくつか追加する必要があります。
このファイルを変更する必要があります。プロジェクトのメインフォルダーの下に、さらにいくつかの.cファイルを配置し、それらすべてを追加する必要があります。ヘッダーファイルを同じフォルダーに配置する場合は、次のように変更する必要もあります。
component.mk
上記のトップレベルのMakefileのように、CMakeでビルドする場合、GNUMakeで使用されるファイルは必要ありません。
IDFの現在のバージョン(4.3以降)はこのファイルを必要とせず、変更せずに削除できます。
Kconfig.projbuild
これは必要なファイルではありません。その機能は、簡単に移植できるmenuconfigで構成できることです。
初心者がKconfigの記述に慣れていない場合は、当面は無視してかまいません。サンプルプロジェクトでは、使用されている一部の変数がマクロ定義なしで完全に記述されています。
理解することを学ぶ必要がある場合は、menuconfig構成を使用します。あなたがそれに精通した後、あなたはプロジェクトの移植を容易にするためにそれを書くことを試みることができます。
app_main.c
これはこのプロジェクトのメインファイルであり、コードをその中に配置できます。
上記の例には独自のドライバーコードがあることに注意してください。
標準的な方法では、components
ディレクトリてコンポーネントとして存在するため、これらのファイルを下のコンポーネントディレクトリに移動します。
エントリー機能ファイルは、自分で作成したアプリケーションのメイン機能ファイルです。
1.3コンポーネントディレクトリ内のファイル
前に述べたように、コンポーネントにはプロジェクトのカスタムコンポーネントがいくつか含まれていますが、再利用可能なコードを構築したり、サードパーティ(ESP-IDFの一部ではない)コンポーネントをインポートしたりするのに役立ちます。
コンポーネントフォルダの下のフレームワーク全体を見てみましょう。サンプルプロジェクトでは、ボタンサブフォルダは1つだけです(led_stripのドライバファイルでさえ、その時点で別のフォルダに配置されていたため、ボタンフォルダのすぐ下に配置されています。コンパイルエラー= =!):
component.mk
component.mk
GUN Makeで使用するファイルは上記と同じで、CMakeでビルドする場合は必要ないので、ここでは気にしません。
component.mkは必要ありません。
Kconfig
上記Kconfig.projbuild
と同じ。
プロジェクトの移植を容易にするために、読むこと、書くことを試みることを学びます。
コンポーネントのCMakeLists.txt
CMakeがプロジェクトをビルドするためのメインファイルです。ルールはメインのCMakeLists.txtと同じです。このファイルが重要なポイントです。
ポイント!!変更することを学びます。下記のコンポーネントの依存関係を理解してください!
コンポーネントの依存関係
コンポーネントのCMakeLists.txtのコアであり、独自のプロジェクトを改善するために変更する方法を学ぶ必要があるため、コンポーネントの依存関係を紹介する必要があります。ここでは公式の説明がより詳細になり、公式Webサイトを借りてスクリーンショットを紹介します。 :
コンポーネントの依存関係の例:
VScodeでコンポーネントを追加する
VScodeプラグインを使用すると、次の手順でコンポーネントをすばやく追加できます
。追加された標準コンポーネントアーキテクチャを確認できます。
将来のプロジェクトでは、この標準コンポーネントアーキテクチャ設計をインストールしてみてください。
2.エンジニアリング調整の例
以上の詳細な紹介により、施工原理がわからなくても、ESP-IDFプロジェクトの構造をある程度理解しており、学んだことを応用することができます。
2.1不要なファイルを削除する
最初のステップは、上記component.mk
とトップレベルを削除することMakefile
であり、readmeも削除されます。少なくとも最初は全体的な外観はそれほど乱雑ではなく、その後、コンパイルは正常です。
2.2コンポーネントの調整
LEDドライバーの新しいコンポーネント
LEDドライバーは以前のRMTアプリケーション教育ブログ投稿で実際に使用されていましたが、当時使用されていた公式ルーチンはテンプレートによって生成されたコンポーネントであったため、構造は気にしませんでしたが、アプリケーション記事を書いたときにこのプロジェクトの直下にコンポーネントをコピーしました。実際にコンパイルでエラーが発生したため、その時点でボタンフォルダーの直下に配置されます= =!
次に、それを移動して別のコンポーネントとして使用する必要がありますled_strip
。実際、次の図に示すように、コピーされたままです。
完了後、コンパイルは正常です。
キードライバーは、対応するコンポーネントに配置されます
ボタンドライバmy_button.c
とmy_button.h
ファイルをボタンコンポーネントフォルダの下のmain関数の下に置き、彼が行くべき場所に移動します。
完了後のコンパイルは正常です。
温度と湿度が新しいコンポーネントを駆動します
標準のコンポーネントテンプレートに従って、温度と湿度のドライバーを新しく作成したsht21コンポーネントフォルダーに配置します。
完了後のコンパイルは正常です。
2.3調整が完了しました
上記の手順を完了すると、例の調整が完了します。最終的なプロジェクト構造を見てみましょう(以前よりもはるかに美しく感じられ、コメントを書くのに耐えられません〜):
エピローグ
ボイラープレートファイルを減らすために、Espressifは実際にユーザーの便宜のためにCMakeの多くの機能をカプセル化しました。
この記事の目的は、ESP-IDFフレームワークに基づいてエンジニアリング構造を改善できるようにすることであり、Cmakeの構築原理については説明していません。不適切なものや配置されていないものがある場合は、それを指摘してください!
このブログ投稿の後、ESP32-C3の教育例はこの標準フレームワークに従います。
ありがとう!