第 7 章:二維條碼掃描
本章目標:讓 NanoCam 掃描二維碼/條形碼,把解碼結果輸出到串口與網頁畫面。
原理
使用 esp-code-scanner 預編譯函式庫實時解碼畫面中的二維條碼(QR Code / Barcode)。攝影機輸出的 RGB565 幀直接傳給掃描器,無需灰階轉換。每幀建立全新的掃描器物件,掃完即銷毀,避免內部狀態累積。 解碼結果同時透過:
- 串列日誌輸出
- 共享緩衝區
g_last_code儲存最新結果,供 HTTP/MJPEG 串流疊加顯示 - 網頁畫面底部疊加綠色文字標註
步驟
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 章:人臉辨識

