第 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 章:人脸识别

