ESP32-WROOM-32 电影管理页从零到上線上 – daonidedie – 博客园
一、背景
何年もの間、玩园子はまだ看园子の記事に残っていますが、私はそれを自分で書いた方法を書きませんでした。この 2 日間、私は数年前に esp32 開発ボードを購入したことに突然気づきました。数年前に用意しました。ナノ私がやったフレームワークは、何回かやりました。双モ、BLEスキャン、MQTT送信、串口インタラクション、ピン制御、システム設定、唚至用LED GPIO2の使用もしました。光データ伝送—— カメラに 30fps で中国語のテキストをサンプリングさせます。
フロントエンドはHTMLチップ+JSで動作します。チップのフラッシュサイズは90Kです。リアエンドはRustを使用します。
実際にスムーズに動作させるには (実際には、Bluetooth を開く、MQTT を開く、STA を開く、LED の光学式レポートのテキストを開くとまだハングする可能性があります)、特に多くの落とし穴を踏みました。メモリ和接続番号2 つの ESP32 的命门。
2、環境
2.1 コンポーネントリスト
- ESP-IDF 5.2.8(電影与库)
- さび:
xtensa-esp32-espidfゴールesp-idf-svcフレームワーク、標準モード - コンパイラ:`xtensa-esp32-elf-clang`(esp-clang) 電影 C 側
- スクリプトツール:
tools/build.sh(英語)/tools/flash.sh(烧能)——裸を禁止するcargo build/espflash flash
環境: crates.io / static.crates.io
sparse+https://rsproxy.cn/index/これも私のこだわりですRust への依存関係は一切ありません根本的な原因。
2.2 コンパイル
cd H:/Aiprojects/esp32/rust
bash tools/build.sh release
# 成功标志:末尾 ===PIPE_RC=0=== 且无 error:
# 产物 ELF:H:/esp32bld/xtensa-esp32-espidf/release/esp32-manage
全量C重编有杀自生機 .tmp 文書が原因 cc1: Permission denied 的坑,build.sh 内蔵 自動で5回; 量設計はこれらからのものではありません。
2.3 録音
bash tools/flash.sh release COM6 90 # 90 = 手动按键窗口秒数
- 串口 CH340 / COM6 / 115200;烧能前关掉占有COM6の串口劉助/WebSerial/Arduino。
- 写す 0x0 整片擦除(MicroPython 才写 0x1000,别混)。
- 板子電影電影電視、手動ダウンロードモードが必要です按住 BOOT → 点一个 EN/RST → 松开 BOOT,完了点 EN/RST が起動します。
- –erase-all 会得 NVS 下ダウンロード清掉 → 安全出厂(ログイン名卡回デフォルト,WiFi/MQTT 設定递重任)。
図 1 電影電視页:ESP32-WROOM-32 排针、USB 串口 CH340
三、ページ機能概要
- 装置: モジュールが 3 つ動作中 (通常 = 主色 / 電気 = 青 / 非安全 = 灰)、MQTT はすでに接続されており、安全でない灰に電気を使用します。ポイントモジュールジャンプは電気を発生させます。
- Wi-Fi管理:AP/STA 双モ、STA クライアントを修復しました同ネットワークセグメントIP(如
192.168.71.x)しかし非電影在192.168.4.x問題。 - BLEスキャン:0 通常、結果は無線周波数環境のみで、エラーはありません。
- MQTT 收発行:接続 + 購読/解放 + 回覧確認。
- 串口端子:
esp32:~$ラベル入力 + クイックコマンド(help/status/wifi/ble/mqtt/mem/pin/restart)状況即発。 - 制御ピン: 排针图モデル修正 ESP32-WROOM-32(室家データシート),今花上 USB串口 CH340,開発ボードのレイアウトと比較してください。
- システム構成→構成管理:ログブックを要求し、パスワードを変更し、終了します。
図 2 设计拓支主设计:モジュール连線 + 串口端子 + RAM メモリ明绿卡石
図3 串口ターミナル:esp32:~$电影符と「电影公司」の高速タグ

四、前端方法教字:なぜ 1 を使いたいのですか
4.1 質問:ソケット用光の要件
IDF httpdです選択された単一のスレッド、max_open_sockets 制限付き (本体 6 顧客 + 内部 3 個)。ただし、ページ イベント/ステータス/メモリ/LED の複数のタイマーが相互に知られていないため、同時に操作することができます。
4.2 スキーム:安全串行方法设计
- 恒常 1 今発行:同時に1人だけ送信、残りは並び、httpd「1人1回処理」自然マッチング。
- 去結果会: 同じ GET 未名名は、排他時に古いままにし、内容を避けます。
- 時間をかけて独立する: 各リクエストは 10 秒 + AbortController、永続サポート時間切れになります。
- キャンセル可能: 現在のリクエストを停止します。キューは自動的に次のリクエストを実行します。
4.3 轮軍收流 + バックグラウンド一時停止
- イベント1秒→2秒、状態2秒→3秒。
- ドキュメント.非表示:安全を切り取る小型車、これは即時、小型占有です。
4.4 リクエストのログ記録
- ログ: 最近 1000条。已消/超時/出错整行红/琥珀高輝度。
- 汇总:总/完了/已消時/超時/出错/技术/ピークタイム、カウントを蓄積、リフレッシュ才清零,1000 の上限の影響を受けません。
図 4 「リクエストログ与汇总」カード: 累積汇总 + 最近の 1000 条ログ(超時/出错高亮)
五、特徴的な機能:GPIO光データ伝送(LED)
図5 LED光伝送ページ:GB2312直発行、直多面護設計及び可設定(方法端プログラミング)
- コード:GB2312 查表(自家建行、無新方名)直播中文,また手机摩剷。中文=2。中文=2〗节=1、节バイト、空格=0x20。
- フレームフォーマット:
[F5 0A][N][data][XOR 校验]、ビット数 66ms、フレーム間隔 333ms、MSB 先行。 - リンクを確認する: など MQTT テーマ
ack/led/decode回月{"原始报文":"...","服务端确认收到":"1"}、=1 で文書が開始されます。5 秒間自動で最大 3 回再生できます。
中文便如统计小坑:前端算「文字/バイト/ビット」時中文字师三按 2バイト老、多くの人が漏れる可能性があります。
六、过坑去盘
現象:「説明をコピー」ボタンは完全に無効です。
根因:navigator.clipboard 只在 https/localhost 等安全安全最高;file:// 存在しない場合に開き、要素の textContent Throw TypeError を参照して画像アニメーションを許可します。
解決:改用テキストボックスを読んでください自動書き込みと全選択、ユーザー Ctrl+C。 定義:フロントエンド画像共通の試聴可能な電源、クリップボード API を使用。
現象:整机送信後の LED 光学系は再起動をキャンセルします。
ログ:
I (888955) [APP] [MEM] 空闲 1KB(历史最低 0KB,最大连续块 1KB)
I (889959) [APP] [MEM] 空闲 0KB
memory allocation of 118 bytes failed
abort() was called at PC 0x4013657a on core 0
rst:0xc (SW_CPU_RESET)
根因:PSRAMなし、利用可能容量約230KB;WiFi + NimBLE(BLE常开)+ std + TLS + httpd 分完只剩约 59KB(原通電影 7KB).LED送信(12KB栈電影+几无時)+前端高镇轊轊轊轊握约118B小電影失敗即取消。
鍵:httpd 45062 ESP_ERR_HTTPD_RESP_SEND 和 error in send:11 のみ OOM 症状、非初凶。
解決:①送信前に記憶障壁(空闲<30KB 兄運動方式);② LED電視栈 12KB→6KB;③ 要件收遥降镇+全部氛壌+(台氛偗+䘟雲来业) /api/v1/mem 按蓄積分地(DEFAULT/8BIT/EXEC/DMA/INTERNAL)管理 + 定作拓支「RAMメモリ明美」卡 + 蓄積<16KB i䪸动扦䪀动 BLE 30KB 蓄積、解除可能(定动山、園全量重编、你电影)。
現象:リフレッシュは同時に複数のインターフェイスを実行します。根本原因/解決策:同 4.1/4.2(上天串行時恒常1 今発行+去重+超時+可消)。
現象:名前電影「電影中 GET /events …」 心。
根因:トリガー条件 太松——キューが存在するキューのみが表示され、ほぼすべてのキューが連続してキューにあるイベント/ステータスが表示されます。
解決:先改「电影偏遅才手机」(通常通話>2.5秒、アクティブ操作>0.7秒)、最後に、削除全体が削除されます、安全な電影を取得するには、「規定管理→録画時間方法」を参照してください。
現象:電気的効果を排除し、電気的効果 (ESP32-DevKitC V4) を使用し、USB 位置がなく、オブジェクト対上にありません。
解決:以下公式文書代最後成 ESP32-WROOM-32(标题/设计/可以电影电影),下下缘花画 USB串口 CH340。
- 32位Xtensaは使用できません
AtomicI64、 変化AtomicI32。 Mutex::lock()しなければならない.unwrap()。- 用
anyhow!しなければならないuse anyhow::anyhow;。 - 必要がなければ、また必要ありません。
現象:espツールレポート Could not open COM6 ... PermissionError(13)。
根因:電影被瞬态占用(串口助/電影/上未柄句感记)。
解決:確認は占有なし、必要な時間の実行は次のリストに続き、等句文の内容の後に再試行するとすぐに成功します。PnP は CH340 をさらに多く設定して完全に健全です。
七、収穫とアドバイス
| 経験 | 要点 |
|---|---|
| 堆は最初のリソースです | PSRAM なしの場合 WiFi+BLE+std すでに一部、すべての機能を削除可能、先見 BLE/伊公開/tmp バッファ |
| httpd シングルスレッド | フロントエンドはプロアクティブである必要があります握报発行去成 1、加超時、制指望设计端 |
| 観察 | メモリ ゾーニング統計 + リクエスト ログ,比事後猜快快交 |
| 構成 > 全量重编 | 変更された sdkconfig (BLE の禁止など) は万字/スタックを許可しますが、これらは長い設定、权バランス再起動です |
以下にダウンロードできます。 PSRAM のモジュールを無効にするか、BLE をオフにして、残量を確保してください。