项目需求
最近一个项目,客户的其中一个要求是:他的客户用打印出来的小票,在检测机前可以通过摄像头识别二维码。由于成本的要求,我选择的是eps32-cam,摄像头为ov2640,200万像素。
硬件配置
esp32-cam
低功耗双核32位CPU,主频高达240MHz,运算能力高达 600 DMIPS,内置 520 KB SRAM,外置8MB PSRAM,支持OV2640和OV7670摄像头,内置闪光灯……
成本上完成可以满足客户的需求
软件配置
vscode + platform + ESP32QRCodeReader
开发过程
上图,我选择了D盘,让它自己创建一个项目目录。
上图,安装所需要的库,ESP32QRCodeReader
代码如下:
#include <Arduino.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <ESP32QRCodeReader.h>
#include <ESP32CameraPins.h>
#define WIFI_SSID "yanfa"
#define WIFI_PASSWORD "12345abc"
#define CHECK_STATUS "https://YOUR_URL.com/api/check.php"
#define CHANGE_STATUS "https://YOUR_URL.com/api/statutchange.php"
ESP32QRCodeReader reader(CAMERA_MODEL_AI_THINKER);
struct QRCodeData qrCodeData;
bool isConnected = false;
bool connectWifi() {
if (WiFi.status() == WL_CONNECTED) {
return true;
}
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
int maxRetries = 10;
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
maxRetries--;
if (maxRetries <= 0) {
return false;
}
}
Serial.println("");
Serial.println("WiFi connected");
return true;
}
void callWebhook(String code) {
HTTPClient http;
http.begin(String(CHECK_STATUS) + "?id=" + code);
int httpCode = http.GET();
String statut = http.getString();
if (statut == "true")
{
Serial.println("OK");
http.begin(String(CHANGE_STATUS) + "?id=" + code);
int httpCode = http.GET();
}
else if (statut == "false") {
Serial.println("Utilisé");
}
}
void setup() {
Serial.begin(115200);
Serial.println();
reader.setup();
Serial.println("Setup QRCode Reader");
reader.begin();
Serial.println("Begin QR Code reader");
delay(1000);
}
void loop() {
bool connected = connectWifi();
if (isConnected != connected) {
isConnected = connected;
}
if (reader.receiveQrCode( & qrCodeData, 100)) {
Serial.println("Found QRCode");
if (qrCodeData.valid) {
Serial.print("Payload: ");
Serial.println((const char * ) qrCodeData.payload);
//callWebhook(String((const char * ) qrCodeData.payload));
Serial.println(String((const char * ) qrCodeData.payload));
} else {
Serial.print("Invalid: ");
Serial.println((const char * ) qrCodeData.payload);
}
}
delay(300);
}
上图开始创建项目。
上图,项目创建成功!
如图,把esp32-cam连接好,准备刷写程序!
烧录完成!
串口调试开始!
打开一张要识别的二维码!
哈哈,识别完成!