ESP32-CAM Servo Motor

Good night guys!

I’m doing a project of my graduation and I can’t see the problem or any other way of doing it for what I need.

The project consists of automating the control of building gates and using the ESP Camera to take a picture and validate whether or not the person is registered, if the gate opens and the car enters (the servo motor is the gate).

But in my code and wiring diagram I couldn’t reproduce …

Could you give me a light?

#include "esp_camera.h"
#include <WiFi.h>
#include <ESP32Servo.h>



#define CAMERA_MODEL_AI_THINKER // Has PSRAM


#define BUTTON 12
#define SERVO 4

int pos = 0;
Servo servo_motor;

#include "camera_pins.h"


const char* ssid = "Tro******";`Texto pré-formatado`
const char* password = "*******";

IPAddress local_IP(192, 168, 1, 152); 
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress primaryDNS(8, 8, 8, 8);
IPAddress secondaryDNS(8, 8, 4, 4);

void startCameraServer();

void setup() {
  
  servo_motor.attach (SERVO);
  pinMode(BUTTON, INPUT);

  Serial.begin(115200);
  Serial.setDebugOutput(true);
  Serial.println();

  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = Y2_GPIO_NUM;
  config.pin_d1 = Y3_GPIO_NUM;
  config.pin_d2 = Y4_GPIO_NUM;
  config.pin_d3 = Y5_GPIO_NUM;
  config.pin_d4 = Y6_GPIO_NUM;
  config.pin_d5 = Y7_GPIO_NUM;
  config.pin_d6 = Y8_GPIO_NUM;
  config.pin_d7 = Y9_GPIO_NUM;
  config.pin_xclk = XCLK_GPIO_NUM;
  config.pin_pclk = PCLK_GPIO_NUM;
  config.pin_vsync = VSYNC_GPIO_NUM;
  config.pin_href = HREF_GPIO_NUM;
  config.pin_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG;
  

  if(psramFound()){
    config.frame_size = FRAMESIZE_UXGA;
    config.jpeg_quality = 10;
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_SVGA;
    config.jpeg_quality = 12;
    config.fb_count = 1;
  }

//#if defined(CAMERA_MODEL_ESP_EYE)
  pinMode(13, INPUT_PULLUP);
  pinMode(14, INPUT_PULLUP);
//#endif

  // camera init
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x", err);
    return;
  }

  sensor_t * s = esp_camera_sensor_get();
  // initial sensors are flipped vertically and colors are a bit saturated
  if (s->id.PID == OV3660_PID) {
    s->set_vflip(s, 1); // flip it back
    s->set_brightness(s, 1); // up the brightness just a bit
    s->set_saturation(s, -2); // lower the saturation
  }
  // drop down frame size for higher initial frame rate
  s->set_framesize(s, FRAMESIZE_QVGA);

#if defined(CAMERA_MODEL_M5STACK_WIDE) || defined(CAMERA_MODEL_M5STACK_ESP32CAM)
  s->set_vflip(s, 1);
  s->set_hmirror(s, 1);
#endif

if(!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) {
  Serial.println("STA Failed to configure");
}
WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  startCameraServer();

  Serial.print("Camera Ready! Use 'http://");
  Serial.print(WiFi.localIP());
  Serial.println("' to connect");
}

void loop() {
  if(digitalRead(BUTTON) == HIGH){
   servo_motor.write(0);
   delay(2500);
   servo_motor.write(175);
  }
  
  delay(10000);
}

Where is that in the code ?

I have a program in TypeScript that will handle the image taken by the ESP camera and a Database in Mongo that validates the access. If the person exists (activates the servo motor, in this case I am using a button for study).

so what’s the code doing that you don’t want and what is it not doing that you would want ?

for studying you could get rid of the whole image stuff since it’s irrelevant at this stage

Cool then, I can enjoy the code then, knowing that I use ESP32-CAM.
But I want to know how I configure it because if I press the button the servo would need to turn 180 degrees and it only shows that the button was pressed on the Serial Monitor … :frowning:

The simplest way is to use a library and not reinvent the wheel :slight_smile:

eg the OneButton library from Matthias Hertel could help you

Jackson! I didn’t understand the code, much less ESP32-CAM.
I need to use her WebServerCam library because I need Video Stream.
Now taking advantage of the doors, I need to control a servo motor with the button … that’s what I didn’t understand. Because my problem is that I press the button and the engine doesn’t turn.

how did you wire your button? do you have an external pull-up or pull-down

I do not use Pull UP or Pull DOWN.

Attached Image!
shematic|281x500