Cámara ESP011 QA32 V1.0

../../_imagenes/QA011-1.png

1.Introduction

ACEBOTT-ESP32-CAM-V1.0 es el módulo de cámara de tamaño pequeño más competitivo de la industria, que puede funcionar independientemente como el sistema más pequeño.

ACEBOTT-ESP32-CAM-V1.0 se puede utilizar ampliamente en diversas aplicaciones de Internet de las cosas, adecuado para dispositivos inteligentes domésticos, control inalámbrico industrial, monitoreo inalámbrico, identificación inalámbrica QR, señales del sistema de posicionamiento inalámbrico y otras aplicaciones de Internet de las cosas.

ACEBOTT-ESP32-CAM-V1.0 adopta el paquete DIP, que se puede usar directamente cuando se inserta en la placa inferior para lograr la producción rápida de productos, brindar a los clientes una conexión altamente confiable y facilitar la aplicación en varias ocasiones de terminales de hardware de Internet de las cosas.

2.Features

Módulo SoC Wi-Fi 802.11b/g/n de volumen ultrapequeño

La CPU de 32 bits de doble núcleo y bajo consumo se puede utilizar como procesador de aplicaciones.

Frecuencia principal hasta 240 MHz, potencia de cálculo hasta 600 DMIPS

SRAM de 520 KB incorporada, PSRAM externa de 8 MB

Soporte para interfaces UART / SPI / I2C / PWM / ADC / DAC

Soporte para cámaras OV2640 y OV7670, con flash incorporado

Admite carga de imágenes por WiFi

Admite múltiples modos de inactividad

Lwip y FreeRTOS

Admite el modo de trabajo STA/AP/STA+AP

Admite la red de distribución con un solo clic de Smart Config / AirKiss

3.Specifications

parámetros Valor / Descripción
Tamaño 27.1 × 47.1 (milímetro)
La encapsulación Dip 20
Fuente de alimentación Tipo-c
interfaz de soporte UART/SPI/I2C/PWM
Número de puertos IO 10
Velocidad en baudios del puerto serie Admite 110 ~ 4608000 bps, valor predeterminado 115200 bps
SPI Flash Predeterminado 32Mbit
Formato de salida de imagen JPEG (compatible solo con OV2640), BMP, ESCALA DE GRISES
Rango de espectro 2400 ~ 2483.5MHz
Forma de antena Antena PCB externa, ganancia 2 dBi
Consumo de energía Apague el flash: 180mA@5V
Encienda la luz del flash y ajuste el brillo al máximo: 310 mA a 5 V.
Sueño profundo: el consumo de energía más bajo puede alcanzar el 6 mA@5V
Sueño moderado: el nivel mínimo es 20 mA@5V
Sueño ligero: El valor mínimo puede alcanzar 6.7 mA@5V
Seguridad WEP / WPA-PSK / WPA2-PSK
Rango de suministro de energía 4.75-5.25V
Temperatura de funcionamiento -20 ° C ~ 70 ° C
entorno de almacenamiento -40 °C ~ 1250 °C, <90 % de humedad relativa

../../_imagenes/QA011-2.png../../_imagenes/QA011-3.png

4. Código de muestra

Conecte la placa a la computadora mediante un cable de datos tipo C: seleccione “ESP32” -> “ESP32 Dev Module” en el menú Herramientas > Placa. Elija el puerto apropiado y cárguelo a la placa mediante el botón Cargar.

(1) Diagrama de cableado

../../_imagenes/QA011-4.png

(2) Código de muestra

  1#include "esp_camera.h"
  2#include <WiFi.h>
  3#include "esp_timer.h"
  4#include "img_converters.h"
  5#include "Arduino.h"
  6#include "fb_gfx.h"
  7#include "soc/soc.h" //disable brownout problems
  8#include "soc/rtc_cntl_reg.h" //disable brownout problems
  9#include "esp_http_server.h"
 10
 11const char *ssid = "ESP32-CAM";
 12const char *password = "12345678";
 13WiFiServer server(100);
 14WiFiClient client;
 15
 16#define PART_BOUNDARY "123456789000000000000987654321"
 17// #define CAMERA_MODEL_AI_THINKER
 18#define PWDN_GPIO_NUM     32
 19#define RESET_GPIO_NUM    -1
 20#define XCLK_GPIO_NUM      0
 21#define SIOD_GPIO_NUM     26
 22#define SIOC_GPIO_NUM     27
 23#define Y9_GPIO_NUM       35
 24#define Y8_GPIO_NUM       34
 25#define Y7_GPIO_NUM       39
 26#define Y6_GPIO_NUM       36
 27#define Y5_GPIO_NUM       21
 28#define Y4_GPIO_NUM       19
 29#define Y3_GPIO_NUM       18
 30#define Y2_GPIO_NUM        5
 31#define VSYNC_GPIO_NUM    25
 32#define HREF_GPIO_NUM     23
 33#define PCLK_GPIO_NUM     22
 34
 35#define RXD2 14 
 36#define TXD2 13  
 37
 38static const char* _STREAM_CONTENT_TYPE = "multipart/x-mixed-replace;boundary=" PART_BOUNDARY;
 39static const char* _STREAM_BOUNDARY = "\r\n--" PART_BOUNDARY "\r\n";
 40static const char* _STREAM_PART = "Content-Type: image/jpeg\r\nContent-Length: %u\r\n\r\n";
 41httpd_handle_t stream_httpd = NULL;
 42
 43static esp_err_t stream_handler(httpd_req_t *req){
 44  camera_fb_t * fb = NULL;
 45  esp_err_t res = ESP_OK;
 46  size_t _jpg_buf_len = 0;
 47  uint8_t * _jpg_buf = NULL;
 48  char * part_buf[64];
 49  res = httpd_resp_set_type(req, _STREAM_CONTENT_TYPE);
 50  if(res != ESP_OK){
 51    return res;
 52  }
 53while(true){
 54    fb = esp_camera_fb_get();
 55    if (!fb) {
 56      Serial.println("Camera capture failed");
 57      res = ESP_FAIL;
 58    } else {
 59      if(fb->width > 400){
 60        if(fb->format != PIXFORMAT_JPEG){
 61          bool jpeg_converted = frame2jpg(fb, 80, &_jpg_buf, &_jpg_buf_len);
 62          esp_camera_fb_return(fb);
 63          fb = NULL;
 64          if(!jpeg_converted){
 65            Serial.println("JPEG compression failed");
 66            res = ESP_FAIL;
 67          }
 68        } else {
 69          _jpg_buf_len = fb->len;
 70          _jpg_buf = fb->buf;
 71        }
 72      }
 73}
 74if(res == ESP_OK){
 75  size_t hlen = snprintf((char *)part_buf, 64, _STREAM_PART, _jpg_buf_len);
 76  res = httpd_resp_send_chunk(req, (const char *)part_buf, hlen);
 77    }
 78if(res == ESP_OK){
 79  res = httpd_resp_send_chunk(req, (const char *)_jpg_buf, _jpg_buf_len);
 80    }
 81if(res == ESP_OK){
 82  res = httpd_resp_send_chunk(req, _STREAM_BOUNDARY, strlen(_STREAM_BOUNDARY));
 83    }
 84
 85if(fb){
 86    esp_camera_fb_return(fb);
 87    fb = NULL;
 88    _jpg_buf = NULL;
 89    } else if(_jpg_buf){
 90    free(_jpg_buf);
 91    _jpg_buf = NULL;
 92  }
 93  if(res != ESP_OK){
 94    break;
 95  }
 96    //Serial.printf("MJPG: %uB\n",(uint32_t)(_jpg_buf_len));
 97  }
 98  return res;
 99}
100void startCameraServer(){
101  httpd_config_t config = HTTPD_DEFAULT_CONFIG();
102  config.server_port = 80;
103  httpd_uri_t index_uri = {
104    .uri       = "/",
105    .method    = HTTP_GET,
106    .handler   = stream_handler,
107    .user_ctx  = NULL
108  };
109if (httpd_start(&stream_httpd, &config) == ESP_OK) {
110    httpd_register_uri_handler(stream_httpd, &index_uri);
111  }
112}
113
114void setup() {
115  // WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector
116  Serial.begin(115200);
117  Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);
118
119  // Serial.setDebugOutput(false);
120
121  camera_config_t config;
122  config.ledc_channel = LEDC_CHANNEL_0;
123  config.ledc_timer = LEDC_TIMER_0;
124  config.pin_d0 = Y2_GPIO_NUM;
125  config.pin_d1 = Y3_GPIO_NUM;
126  config.pin_d2 = Y4_GPIO_NUM;
127  config.pin_d3 = Y5_GPIO_NUM;
128  config.pin_d4 = Y6_GPIO_NUM;
129  config.pin_d5 = Y7_GPIO_NUM;
130  config.pin_d6 = Y8_GPIO_NUM;
131  config.pin_d7 = Y9_GPIO_NUM;
132  config.pin_xclk = XCLK_GPIO_NUM;
133  config.pin_pclk = PCLK_GPIO_NUM;
134  config.pin_vsync = VSYNC_GPIO_NUM;
135  config.pin_href = HREF_GPIO_NUM;
136  config.pin_sccb_sda = SIOD_GPIO_NUM;
137  config.pin_sccb_scl = SIOC_GPIO_NUM;
138  config.pin_pwdn = PWDN_GPIO_NUM;
139  config.pin_reset = RESET_GPIO_NUM;
140  config.xclk_freq_hz = 20000000;
141  config.frame_size = FRAMESIZE_UXGA;
142  config.pixel_format = PIXFORMAT_JPEG; // for streaming
143  //config.pixel_format = PIXFORMAT_RGB565; // for face detection/recognition
144  config.grab_mode = CAMERA_GRAB_WHEN_EMPTY;
145  config.fb_location = CAMERA_FB_IN_PSRAM;
146  config.jpeg_quality = 12;
147  config.fb_count = 1;
148  
149  // if PSRAM IC present, init with UXGA resolution and higher JPEG quality
150  //                      for larger pre-allocated frame buffer.
151  if(config.pixel_format == PIXFORMAT_JPEG){
152    if(psramFound()){
153      config.jpeg_quality = 10;
154      config.fb_count = 2;
155      config.grab_mode = CAMERA_GRAB_LATEST;
156    } else {
157      // Limit the frame size when PSRAM is not available
158      config.frame_size = FRAMESIZE_SVGA;
159      config.fb_location = CAMERA_FB_IN_DRAM;
160    }
161  } else {
162    // Best option for face detection/recognition
163    config.frame_size = FRAMESIZE_240X240;
164#if CONFIG_IDF_TARGET_ESP32S3
165    config.fb_count = 2;
166#endif
167  }
168  // camera init
169  esp_err_t err = esp_camera_init(&config);
170  if (err != ESP_OK)
171  {
172    Serial.printf("Camera init failed with error 0x%x", err);
173    return;
174  }
175  sensor_t *s = esp_camera_sensor_get();
176  //drop down frame size for higher initial frame rate
177  //s->set_framesize(s, FRAMESIZE_SXGA); //Byte length sampling value:60000                 #9 (High picture quality)  1280x1024
178  s->set_framesize(s, FRAMESIZE_SVGA); //Byte length sampling value:40000                   #7 (Medium picture quality)  800x600
179  //s->set_framesize(s, FRAMESIZE_QVGA); //Byte length sampling value:10000                #4 (Poor picture quality)  320x240
180
181  s->set_vflip(s, 1);   //Image orientation Settings (up and down)
182  s->set_hmirror(s, 1); //Image orientation Settings (left and right)
183
184  WiFi.setTxPower(WIFI_POWER_19_5dBm);
185  WiFi.mode(WIFI_AP);
186  WiFi.softAP(ssid, password, 5);
187  // WiFi.softAP(ssid, password);
188  Serial.print("\r\n");
189  startCameraServer();
190  Serial.print("\r\n");
191  Serial.print("Camera Ready! Use 'http://");
192  Serial.print(WiFi.softAPIP());
193  Serial.println("' to connect");
194
195  server.begin();          // Starting the server
196  delay(100);
197
198}
199void loop() {
200  delay(1);
201
202}

5. Resultado de la prueba

Después de cargar el programa, el efecto de imagen se mostrará en el sitio web. En primer lugar, el dispositivo terminal debe estar conectado a la red WiFi emitida por el módulo de la cámara.

../../_imágenes/QA011-7.jpg

Pista

El nombre y la contraseña de WiFi en el programa se pueden personalizar.

../../_imagenes/QA011-5.png

La dirección IP del módulo de la cámara en modo AP es: 192.168.4.1, y luego ingrese la dirección IP en la barra de direcciones del navegador del terminal para acceder a la página web de la imagen de la cámara. Al mover la cámara en la dirección correcta, puede ver el efecto de imagen en vivo del módulo de la cámara en la página web.

../../_imagenes/QA011-6.png

6. Recursos relacionados

PDF y código

Artículos relacionados con

Deja el primer comentario

Solicite una prueba gratuita

Esta prueba de producto está priorizada para educadores e instituciones académicas.

Al completar y enviar este formulario, usted acepta los
Términos y condiciones de prueba de productos Acebott.

Desbloquee hoy su descuento educativo exclusivo

Complete este formulario para solicitar descuentos especiales diseñados para educadores e instituciones. ¡Disfrute de al menos un 5 % de descuento en nuestros kits STEM, porque la educación merece una recompensa!

¡Por favor, rellene el formulario de arriba y nuestro equipo se pondrá en contacto con usted lo antes posible!
😊🚀

¡Obtenga una cotización gratis! 🎉

¿No encuentras el kit STEM perfecto? ¿Quieres los mejores precios al por mayor?
¿Interesado en convertirse en distribuidor?

¡Simplemente complete el formulario de arriba y nos comunicaremos con usted lo antes posible con toda la información que necesita! 😊🚀

Este sitio está protegido por reCAPTCHA y Google Política de privacidad Términos de Servicio de Google