コアでのファームウェア開始¶
このページでは、ファームウェアプロジェクトを作成し、ESP32をポータルのオンライン状態に進め、ネットワーク部が機能していることを確認します。センサーと加熱ロジックは次のステップで追加します。
アプローチはiDryer::Linkファサードに基づいています。単一のiDryer::Config構造でデバイスを説明し、link.begin()とlink.loop()を呼び出します。すべてのネットワーク接続はコアが自分で行います。
1. ツールを準備する¶
必要なもの:
- VS CodeとPlatformIOエクステンション;
- USBケーブル;
- Wi-Fi
2.4 GHzネットワーク(ESP32は5 GHzのみのネットワークで動作しません)。
コントローラーファームウェアとボードへの入り方について - コントローラーファームウェア。
2. プロジェクトを作成する¶
PlatformIOのプロジェクトは固定構造の資料です。プロジェクトフォルダを作成(例my-cabinet)し、VS Codeで開きます。内部には次のファイルが必要です:
my-cabinet/
├── platformio.ini # ビルド設定(ステップ4で入力)
├── include/
│ └── secrets.h # Wi-Fiログインとパスワード(ステップ3)
├── lib/
│ └── idryer-core/ # コアライブラリ(シムリンクまたはコピー)
└── src/
└── main.cpp # デバイスコード:Config + setup() + loop()
以下のコードのすべてのフラグメントは、正確にこれらのファイルに配置されます。各ステップは、どちらにあるかを示します。フォルダinclude/、lib/、src/がない場合は、手動で作成してください。
idryer-coreライブラリをlib/に配置します。PlatformIOはそこから自動的にライブラリを見つけます。最も簡単な方法は、ダウンロードしたライブラリへのシムリンクを作成することです:
これはメニュー生成(章6)にも必要です。フックはlib/idryer-core/内でジェネレーターを探します。
3. secrets.hを作成する¶
ライブラリからsecrets.h.exampleの例をプロジェクトのinclude/secrets.hにコピーし、ネットワークデータを指定してください:
パスワードがリポジトリに入らないように、include/secrets.hを.gitignoreに追加してください。
4. platformio.iniを設定する¶
プロジェクトのルート内のplatformio.iniを入力してください:
[env:cabinet]
platform = espressif32
framework = arduino
board = esp32-c3-devkitm-1
lib_deps =
bblanchon/ArduinoJson @ ^6.21.0
knolleary/PubSubClient
densaugeo/base64 @ ^1.4.0
links2004/WebSockets @ ^2.4.0
https://github.com/jnthas/Improv-WiFi-Library.git
build_flags =
-DIDRYER_API_BASE='"https://portal.idryer.org/api"'
-DMQTT_BROKER='"mqtt.idryer.org"'
-DMQTT_PORT=8883
-DMQTT_USE_TLS=1
boardを自分のボード(例えば、esp32-s3-devkitc-1)に置き換えます。lib_depsでidryer-coreを指定する必要はありません。それはlib/(ステップ2)にあります。
これらすべての依存関係が必要な理由
ArduinoJson、PubSubClient、base64、WebSockets、Improv-WiFi-Libraryはidryer-coreライブラリ自体(MQTT、LAN WebSocket アクセス、Wi-Fi プロビジョニング)に必要です。これらのいずれかなしで、ビルドは... .h: No such fileのようなエラーで失敗します。MQTT_BROKERとMQTT_PORTフラグも必須です。それらがなければ、コアはコンパイルされません('MQTT_BROKER' was not declared)。
5. Configでデバイスを説明する¶
すべての作業は1つのファイルで行われます。 - src/main.cpp。それを開き、このステップ以下のコードを書きます。
iDryer::Configはデバイスのパスポートです。フラグhas*はポータルに何があるかを伝え、発行されるテレメトリーフィールドを決定します。
ファイルの先頭src/main.cppに加温シャフト用:
#include <iDryer.h>
static const iDryer::Config CFG = {
.deviceType = iDryer::DeviceType::Dryer,
.unitsCount = 1,
// ペリフェリー:
.hasHeater = true, // 制御された加熱器
.hasFan = true, // ファン
.hasAirTemp = true, // 空気温度(SHT31)
.hasAirHumidity = true, // 空気湿度(SHT31)
.hasHeaterTemp = true, // 加熱器温度(温度計)
// 自動発行期間:
.telemetryPeriodMs = 5000,
.statusPeriodMs = 10000,
// ポータル識別:
.hardwareVersion = "1.0",
.firmwareVersion = "0.1.0",
.model = "DIY Storage Cabinet",
};
static iDryer::Link s_link(CFG);
has*フラグはポータルとの契約です
対応するフラグがfalseであるテレメトリーフィールドは発行されません。例えば、hasAirHumidity = trueがなければ、湿度はコード内に書き込まれても、クラウドに行きません。物理的にデバイスに含まれているもののみを有効にしてください。
コンポーネントとフラグのリスト - システムコンポーネント。
6. 最小限のメイン¶
同じファイルのConfigブロックの後、setup()とloop()関数を追加します。最初の起動では、リンクを初期化し、その中にループするだけで十分です:
これは、デバイスがWi-Fiに接続し、ポータルに移動するのに十分です。センサーはセンサーのステップで追加します。
この章の後の完全なsrc/main.cpp¶
上記の両方のブロックを1つのファイルに組み合わせます。これは現在のステップの完全なsrc/main.cppです:
#include <iDryer.h>
static const iDryer::Config CFG = {
.deviceType = iDryer::DeviceType::Dryer,
.unitsCount = 1,
.hasHeater = true,
.hasFan = true,
.hasAirTemp = true,
.hasAirHumidity = true,
.hasHeaterTemp = true,
.telemetryPeriodMs = 5000,
.statusPeriodMs = 10000,
.hardwareVersion = "1.0",
.firmwareVersion = "0.1.0",
.model = "DIY Storage Cabinet",
};
static iDryer::Link s_link(CFG);
void setup() {
Serial.begin(115200);
s_link.begin();
}
void loop() {
s_link.loop();
}
前の章は、**何を追加するか**と**変更後の完全なsrc/main.cpp**を示しているので、常に全体像が見えます。散在するピースではなく。
7. フラッシュ¶
8. シリアルモニターを開く¶
ログの予想される順序:
[CLOUD] Connecting to WiFi...
[CLOUD] WiFi connected, IP: 192.168.1.42
[CLOUD] Provisioning device...
[CLOUD] PIN: 1234567 (expires in 600s)
デバイスがPIN: ...の行で停止した場合、それは正常です。バインディングに進みます。
9. デバイスをポータルにバインドする¶
- portal.idryer.orgを開きます。
- **デバイスを追加**セクションに進みます。
- シリアルモニターからPINを入力します。
バインディングの後、デバイスはOnlineステータスに移動します。ログに表示されます:
結果の確認¶
このステップで、デバイスはポータルでオンラインである必要があります。センサーからのデータはまだありません。それは予想されています。デバイスが接続していない場合:
- ネットワークが
2.4 GHzで、secrets.hのパスワードが正しいことを確認してください; - ESP32の電力を確認してください(Wi-Fi開始時の電圧低下は一般的な再起動原因です);
- 電力エラーとコントローラーエラーを参照してください。
次のステップ¶
ネットワーク部が動作しています。センサーに進んでください:SHT31と温度計を接続し、ポータルにデータを表示します。