🧪 新教程持續更新中 · 由機械臂到傳感器,跟隨教程從零搭建
跳到主要內容

第 7 章:二維條碼掃描 ​

淘寶店鋪

本章目標:讓 NanoCam 掃描二維碼/條形碼,把解碼結果輸出到串口與網頁畫面。

原理 ​

使用 esp-code-scanner 預編譯函式庫實時解碼畫面中的二維條碼(QR Code / Barcode)。攝影機輸出的 RGB565 幀直接傳給掃描器,無需灰階轉換。每幀建立全新的掃描器物件,掃完即銷毀,避免內部狀態累積。 解碼結果同時透過:

  1. 串列日誌輸出
  2. 共享緩衝區 g_last_code 儲存最新結果,供 HTTP/MJPEG 串流疊加顯示
  3. 網頁畫面底部疊加綠色文字標註

步驟 ​

7.1 切換模式 ​

Plain
ai_mode:5

完整指令見串口協議手冊。

7.2 掃碼 ​

將二維條碼放在攝影機前,串列會輸出:

Plain
I (xxxxx) qrcode: Decoded [QR-Code]: https://example.com

同時網頁畫面 http://<IP>/ 底部會出現綠色文字標註解碼內容。

7.3 連續掃碼 ​

對準下一個條碼即自動解碼輸出,掃描器每幀重建,可連續工作不崩潰。

程式碼 ​

核心掃描邏輯 ​

main/ai/nano_qrcode.cpp:

C++
// 每幀建立全新掃描器物件
esp_image_scanner_t *scn = esp_code_scanner_create();
esp_code_scanner_config_t cfg = {
    ESP_CODE_SCANNER_MODE_FAST,
    ESP_CODE_SCANNER_IMAGE_RGB565,
    fb->width, fb->height
};
esp_code_scanner_set_config(scn, cfg);
int count = esp_code_scanner_scan_image(scn, fb->buf);
// 解碼成功
const esp_code_scanner_symbol_t result = esp_code_scanner_result(scn);
ESP_LOGI(TAG, "Decoded [%s]: %s", result.type_name, result.data);
// 儲存到共享緩衝區供網頁疊加
snprintf(g_last_code, sizeof(g_last_code), "%s: %s",
         result.type_name, result.data);
esp_code_scanner_destroy(scn);

效果 ​

對準二維條碼 → 串列輸出解碼內容 + 網頁畫面疊加顯示。

下一章:第 8 章:人臉辨識