ESP32 - CAM OV2640. Module. WebServer

- ESP32-CAM capture image and update that image in Google Drive (II).

We are going to change the Script code, we will use part of the @TIMAI2 code to update the image that we will call capture.jpg
esp32_cam23

function doPost(e) {
  var data = Utilities.base64Decode(e.parameters.data);
// var nombreArchivo = Utilities.formatDate(new Date(), "GMT-3", "yyyyMMdd_HHmmss")+".jpg";
  var filename = "capture.jpg";
  var blob = Utilities.newBlob(data, e.parameters.mimetype, filename);
  
  var folder, folders = DriveApp.getFoldersByName("ESP32-CAM");
  if (folders.hasNext()) {
    folder = folders.next();
  } else {
    folder = DriveApp.createFolder("ESP32-CAM");
  }
  
  var existing = folder.getFilesByName(filename);
    if (existing.hasNext()) {
      var file = existing.next();
      if (file.getName() == filename) {
          fileID = file.getId();
         // Drive.Files.update({title: filename, mimeType: mimetype}, fileID, blob); 
          Drive.Files.update({title: filename,  mimeType: file.getMimeType()}, fileID, blob); 
      }
    } else {
    blob = Utilities.newBlob(data, e.parameters.mimetype, filename);
    fileID = folder.createFile(blob).getId(); 
    }
  
 // var file = folder.createFile(blob); 
  
  return ContentService.createTextOutput("Completo.")
}
  • We can locate the key of the file and put it in an Image component within a Clock, every certain interval the image will be updated on the screen.

hello sir,
my quation was by using esp 32 cam module can i controlled other 6 leds through mit app through wifi connecetivity and configuring esp32 cam as web server meanse in local area network ..... beacuse esp32 cam having 10 gpios but some are used for the camera in bulid module so can u help me in this?

In this tutorial you can see the ESP32-CAM pinout:

The following pins are internally connected to the microSD card reader:

  • GPIO 14: CLK
  • GPIO 15: CMD
  • GPIO 2: Data 0
  • GPIO 4: Data 1 (also connected to the on-board LED)
  • GPIO 12: Data 2
  • GPIO 13: Data 3

but if you don't have SdCard, maybe you can use it, I haven't tried it.

These pins can be connected to a 16-Channel CD74HC4067 multiplexer module and get 16 outputs.
https://www.google.com/search?q=CD74HC4067+16-Canal&sxsrf=ALeKk02nyZymtm4jNuuL9XKUVE1jdBLBeQ:1623309859467&source=lnms&tbm=isch&sa=X&ved=2ahUKEwibo6K8xIzxAhWrzoUKHRQYATYQ_AUoAXoECAEQAw&biw=1280&bih=611

- Loading the Sketch using an Arduino UNO.

- Add a button to the web page to turn on/off LED4, flash led.

esp32_cam37

We consult the following tutorial:

- Another Video Streamer with the WebViewer component.

esp32_cam38

It can transmit with HTTP and RTSP.

#ifdef ENABLE_WEBSERVER
WebServer server(80);
#endif

#ifdef ENABLE_RTSPSERVER
WiFiServer rtspServer(8554);
#endif

hi there, i had some question, in your esp code there is no led, and if i add a led 4 from http://kio4.com/arduino/247_Wemos_WebCam.htm#led4, when streaming the led button doesnt work, how to make the led button work when streaming?, thanks...

Try with this code:

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

const char* WIFI_SSID = "my-ssid";
const char* WIFI_PASS = "my-pass";

#define LED4  4 // LED4 is a Built-in Flash LED.

WebServer server(80);

static auto loRes = esp32cam::Resolution::find(160, 120); // Cambio resolución.
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(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(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();
}
////////////////// Modified. KIO4.COM
void handleJpg_on()
{
  Serial.println("LED ON");
  digitalWrite(LED4,HIGH); 
  serveJpg();
}
void handleJpg_off()
{
  Serial.println("LED OFF");
  digitalWrite(LED4,LOW); 
  serveJpg();
}
void handleMjpeg_off()
{
  handleMjpeg();
}
///////////////////////////

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();
  pinMode(LED4, OUTPUT);

  {
    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.mjpeg", handleMjpeg);
  server.on("/cam.mjpeg_off", handleMjpeg_off); // KIO4
  server.on("/LED_on", handleJpg_on); // KIO4
  server.on("/LED_off", handleJpg_off); // KIO4
  
  server.begin();
}

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

when streaming, the led button is not working, how to make it work while streaming?

While it is streaming it cannot be changed.