ESP32QRCodeReader库使用,ESP32-CAM识别二维码并向自写接口发出请求确认身份。

#include <Arduino.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <ESP32QRCodeReader.h>

#define WIFI_SSID "username"
#define WIFI_PASSWORD "password"
// 连接电脑主机的IP地址的8088端口
#define WEBHOOK_URL "http://{{IPV4地址}}:8088/QRCode/" //编写的确认身份接口
#define DOOR_RELAY_PIN 12

ESP32QRCodeReader reader(CAMERA_MODEL_AI_THINKER);
struct QRCodeData qrCodeData;
bool isConnected = false;

void openDoor()
{
  digitalWrite(DOOR_RELAY_PIN, LOW);
}

void closeDoor()
{
  digitalWrite(DOOR_RELAY_PIN, HIGH);
}

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(WEBHOOK_URL)+ code);

  int httpCode = http.GET();
  Serial.print("HTTP Code: ");
  Serial.println(httpCode);
  if (httpCode == HTTP_CODE_OK)
  {
    Serial.println("Open door");
    openDoor();
    delay(2000);
    closeDoor();
  }
  else
  {
    Serial.println("Not authorized");
    closeDoor();
  }

  http.end();
}
void setup()
{
  Serial.begin(115200);
  Serial.println();

  pinMode(DOOR_RELAY_PIN, OUTPUT);
  closeDoor();

  reader.setup();
  //reader.setDebug(true);
  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));
    }
    else
    {
      Serial.print("Invalid: ");
      Serial.println((const char *)qrCodeData.payload);
    }
  }
  delay(300);
}

QRCode库用来生成二维码,可自行下载

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要通过ESP32-CAM控制ESP8266,你需要先建立它们之间的WiFi连接,然后在ESP32-CAM上运行服务器程序,接收来自ESP8266的命令,并执行相应的操作。 以下是一个示例代码,展示如何通过ESP32-CAM控制ESP8266: ESP8266代码: ```c++ #include <ESP8266WiFi.h> #include <WiFiClient.h> const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; IPAddress serverIP(192, 168, 1, 100); // ESP32-CAM的IP地址 WiFiClient client; void setup() { Serial.begin(115200); delay(1000); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } void loop() { if (!client.connect(serverIP, 80)) { Serial.println("Connection failed"); delay(1000); return; } client.println("GET /?command=on HTTP/1.1"); client.println("Host: 192.168.1.100"); // ESP32-CAM的IP地址 client.println("Connection: close"); client.println(); while (client.connected()) { if (client.available()) { String line = client.readStringUntil('\n'); Serial.println(line); } } client.stop(); delay(1000); } ``` ESP32-CAM代码: ```c++ #include <WiFi.h> #include <WebServer.h> const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; IPAddress localIP(192, 168, 1, 100); // ESP32-CAM的IP地址 WebServer server(80); void handleCommand() { String command = server.arg("command"); if (command == "on") { // 执行打开操作 Serial.println("Turning on..."); } else if (command == "off") { // 执行关闭操作 Serial.println("Turning off..."); } else { // 无效的命令 Serial.println("Invalid command"); } server.send(200, "text/plain", "OK"); } void setup() { Serial.begin(115200); delay(1000); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); server.on("/command", handleCommand); server.begin(); } void loop() { server.handleClient(); } ``` 在ESP8266的代码中,我们首先定义了ESP32-CAM的IP地址,并在loop()函数中,使用WiFiClient连接到ESP32-CAM的IP地址,并向其发送一个HTTP GET请求,请求的URL中包含了一个命令参数command,值为on,表示打开操作。在ESP32-CAM的代码中,我们首先定义了一个WebServer对象,并在setup()函数中,注册了一个handleCommand()函数来处理来自ESP8266的命令。在handleCommand()函数中,我们根据命令参数的值来执行相应的操作,并返回一个OK响应。 你可以根据需要修改命令的参数和相应的操作,以实现ESP32-CAM对ESP8266的控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值