Transmisión de vídeo/imagen wifi ESP32

Transmisión de vídeo/imagen wifi ESP32


1. Instalar Arduino

1.1 Descarga de programas

https://arduino.me/download, descarga e instala la versión 1.8.19 (principalmente 2.xxx es inestable)

1.2 Siga el tutorial para instalar

https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-mac-and-linux-instructions/
preste atención para agregar ESP32 (por Espressif System) descargue la versión 2.0.2 (puede que tenga que ir sobre la pared), y algunos Flash (80 m), PartitionScheme (enorme), tasa de baudios (115200) de la placa deben seleccionarse correspondientemente

1.3 Precauciones para la programación

La placa necesita una fuente de alimentación de 5 V, IO0 y GND están en cortocircuito para el modo de descarga y programación, desconectados para el modo de ejecución, después de conectar hay un subrayado, luego reinícielo

2. Experimento

2.1 Código

https://gitcode.net/mirrors/yoursunny/esp32cam?utm_source=csdn_github_accelerator

2.2 Código del programa principal

#include <esp32cam.h>
#include <WebServer.h>
#include <WiFi.h>

const char* WIFI_SSID = "***";  // 改成自己的wifi名称
const char* WIFI_PASS = "***";  // 改成自己的wifi密码

WebServer server(80);

static auto loRes = esp32cam::Resolution::find(320, 240);
static auto hiRes = esp32cam::Resolution::find(800, 600);

void handleBmp()
{
    
    
  if (!esp32cam::Camera.changeResolution(loRes)) {
    
    
    Serial.println("SET-LO-RES FAIL");
  }

  auto frame = esp32cam::capture();
  if (frame == nullptr) {
    
    
    Serial.println("CAPTURE FAIL");
    server.send(503, "", "");
    return;
  }
  Serial.printf("CAPTURE OK %dx%d %db\n", frame->getWidth(), frame->getHeight(),
                static_cast<int>(frame->size()));

  if (!frame->toBmp()) {
    
    
    Serial.println("CONVERT FAIL");
    server.send(503, "", "");
    return;
  }
  Serial.printf("CONVERT OK %dx%d %db\n", frame->getWidth(), frame->getHeight(),
                static_cast<int>(frame->size()));

  server.setContentLength(frame->size());
  server.send(200, "image/bmp");
  WiFiClient client = server.client();
  frame->writeTo(client);
}

void serveJpg()
{
    
    
  auto frame = esp32cam::capture();
  if (frame == nullptr) {
    
    
    Serial.println("CAPTURE FAIL");
    server.send(503, "", "");
    return;
  }
  Serial.printf("CAPTURE OK %dx%d %db\n", frame->getWidth(), frame->getHeight(),
                static_cast<int>(frame->size()));

  server.setContentLength(frame->size());
  server.send(200, "image/jpeg");
  WiFiClient client = server.client();
  frame->writeTo(client);
}

void handleJpgLo()
{
    
    
  if (!esp32cam::Camera.changeResolution(loRes)) {
    
    
    Serial.println("SET-LO-RES FAIL");
  }
  serveJpg();
}

void handleJpgHi()
{
    
    
  if (!esp32cam::Camera.changeResolution(hiRes)) {
    
    
    Serial.println("SET-HI-RES FAIL");
  }
  serveJpg();
}

void handleJpg()
{
    
    
  server.sendHeader("Location", "/cam-hi.jpg");
  server.send(302, "", "");
}

void handleMjpeg()
{
    
    
  if (!esp32cam::Camera.changeResolution(hiRes)) {
    
    
    Serial.println("SET-HI-RES FAIL");
  }

  Serial.println("STREAM BEGIN");
  WiFiClient client = server.client();
  auto startTime = millis();
  int res = esp32cam::Camera.streamMjpeg(client);
  if (res <= 0) {
    
    
    Serial.printf("STREAM ERROR %d\n", res);
    return;
  }
  auto duration = millis() - startTime;
  Serial.printf("STREAM END %dfrm %0.2ffps\n", res, 1000.0 * res / duration);
}

void setup()
{
    
    
  Serial.begin(115200);
  Serial.println();

  {
    
    
    using namespace esp32cam;
    Config cfg;
    cfg.setPins(pins::AiThinker);
    cfg.setResolution(hiRes);
    cfg.setBufferCount(2);
    cfg.setJpeg(80);

    bool ok = Camera.begin(cfg);
    Serial.println(ok ? "CAMERA OK" : "CAMERA FAIL");
  }

  WiFi.persistent(false);
  WiFi.mode(WIFI_STA);
  WiFi.begin(WIFI_SSID, WIFI_PASS);
  while (WiFi.status() != WL_CONNECTED) {
    
    
    delay(500);
  }

  Serial.print("http://");
  Serial.println(WiFi.localIP());
  Serial.println("  /cam.bmp");
  Serial.println("  /cam-lo.jpg");
  Serial.println("  /cam-hi.jpg");
  Serial.println("  /cam.mjpeg");

  server.on("/cam.bmp", handleBmp);
  server.on("/cam-lo.jpg", handleJpgLo);
  server.on("/cam-hi.jpg", handleJpgHi);
  server.on("/cam.jpg", handleJpg);
  server.on("/cam.mjpeg", handleMjpeg);

  server.begin();
}

void loop()
{
    
    
  server.handleClient();
}

3. IP de acceso

3.1 Configuración del enrutador

Fijar el puerto IP de la cámara y el enrutador

3.2 Dirección de acceso a la cámara

La dirección IP de la cámara se devolverá en el puerto serie de Arduino, ingrese la dirección en el navegador en la misma LAN y agregue el sufijo de la imagen/video que desea ver, como http://192.168.1.240/ cam.mjpeg

Supongo que te gusta

Origin blog.csdn.net/qq_37249793/article/details/131951968
Recomendado
Clasificación