
Einführung #
ACEBOTT-ESP32-CAM-V1.0 ist das wettbewerbsfähigste Kleinkameramodul der Branche, das unabhängig als kleinstes System arbeiten kann.
ACEBOTT-ESP32-CAM-V1.0 kann in verschiedenen Anwendungen des Internets der Dinge eingesetzt werden und eignet sich für intelligente Heimgeräte, drahtlose industrielle Steuerung, drahtlose Überwachung, drahtlose QR-Identifikation, drahtlose Positionierungssystemsignale und andere Anwendungen des Internets der Dinge.
ACEBOTT-ESP32-CAM-V1.0 verwendet ein DIP-Paket, das direkt verwendet werden kann, wenn es in die Bodenplatte eingesetzt wird, um eine schnelle Produktproduktion zu realisieren, Kunden eine äußerst zuverlässige Verbindung bereitzustellen und die Anwendung in verschiedenen Internet of Things-Hardware-Terminal-Gelegenheiten zu erleichtern.
Eigenschaften #
- Ultrakleines 802.11b/g/n Wi-Fi-SoC-Modul
- Die stromsparende Dual-Core 32-Bit CPU kann als Anwendungsprozessor verwendet werden
- Die Hauptfrequenz bis zu 240 MHz, Rechenleistung bis zu 600 DMIPS
- Eingebautes 520 KB SRAM, externes 8 MB PSRAM
- Unterstützung für UART-/SPI-/I2C-/PWM-/ADC-/DAC-Schnittstellen
- Unterstützung für OV2640- und OV7670-Kameras mit integriertem Blitz
- Unterstützt das Hochladen von Bildern über WLAN
- Unterstützt mehrere Ruhemodi
- Lwip und FreeRTOS
- Unterstützt den Arbeitsmodus STA / AP / STA + AP
- Unterstützt das One-Click-Vertriebsnetzwerk Smart Config / AirKiss
Spezifikationen #
| Kenngrößen | Wert/Beschreibung |
|---|---|
| Größe | 27.1 × 47.1 (mm) |
| Kapselung | Dip 20 |
| Energieversorgung | Typ-c |
| Unterstützung schnittstelle | UART/SPI/I2C/PWM |
| Anzahl der IO-Ports | 10 |
| Serielle Schnittstelle Baudrate | Unterstützt 110 ~ 4608000 bps, Standard 115200 bps |
| SPI-Flash | Standard 32 Mbit |
| Bildausgabeformat | JPEG (nur von OV2640 unterstützt), BMP, Graustufen |
| Spektralbereich | 2400 ~ 2483.5MHz |
| Antennenform | Externe PCB-Antenne, Verstärkung 2 dBi |
| Leistungsaufnahme | Schalten Sie den Blitz aus: 180 mA bei 5 V |
| Schalten Sie das Blitzlicht ein und stellen Sie die Helligkeit auf das Maximum ein: 310 mA bei 5 V. | |
| Tiefschlaf: Der niedrigste Stromverbrauch kann 6 mA bei 5 V erreichen | |
| Moderm-Sleep: Der Mindestpegel beträgt 20 mA bei 5 V | |
| Leichtschlaf: Der Mindestwert kann 6.7 mA bei 5 V erreichen | |
| Sicherheit | WEP / WPA-PSK / WPA2-PSK |
| Stromversorgungsbereich | 4.75-5.25V |
| Betriebstemperatur | -20 ° C ~ 70 ° C. |
| Storage-Umgebung | -40 °C ~ 1250 °C, <90 % relative Luftfeuchtigkeit |


Fallbeispiel #
Verbinden Sie das Board über ein Type-C-Datenkabel mit dem Computer: Wählen Sie im Menü Tools > Board „ESP32“ -> „ESP32 Dev Module“. Wählen Sie den entsprechenden Port aus. Und laden Sie ihn über die Schaltfläche „Upload“ auf das Board hoch.
Schaltplan #

Beispielcode #
#include "esp_camera.h"
#include
#include "esp_timer.h"
#include "img_converters.h"
#include "Arduino.h"
#include "fb_gfx.h"
#include "soc/soc.h" //disable brownout problems
#include "soc/rtc_cntl_reg.h" //disable brownout problems
#include "esp_http_server.h"
const char *ssid = "ESP32-CAM";
const char *password = "12345678";
WiFiServer server(100);
WiFiClient client;
#define PART_BOUNDARY "123456789000000000000987654321"
// #define CAMERA_MODEL_AI_THINKER
#define PWDN_GPIO_NUM 32
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 0
#define SIOD_GPIO_NUM 26
#define SIOC_GPIO_NUM 27
#define Y9_GPIO_NUM 35
#define Y8_GPIO_NUM 34
#define Y7_GPIO_NUM 39
#define Y6_GPIO_NUM 36
#define Y5_GPIO_NUM 21
#define Y4_GPIO_NUM 19
#define Y3_GPIO_NUM 18
#define Y2_GPIO_NUM 5
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 23
#define PCLK_GPIO_NUM 22
#define RXD2 14
#define TXD2 13
static const char* _STREAM_CONTENT_TYPE = "multipart/x-mixed-replace;boundary=" PART_BOUNDARY;
static const char* _STREAM_BOUNDARY = "\r\n--" PART_BOUNDARY "\r\n";
static const char* _STREAM_PART = "Content-Type: image/jpeg\r\nContent-Length: %u\r\n\r\n";
httpd_handle_t stream_httpd = NULL;
static esp_err_t stream_handler(httpd_req_t *req){
camera_fb_t * fb = NULL;
esp_err_t res = ESP_OK;
size_t _jpg_buf_len = 0;
uint8_t * _jpg_buf = NULL;
char * part_buf[64];
res = httpd_resp_set_type(req, _STREAM_CONTENT_TYPE);
if(res != ESP_OK){
return res;
}
while(true){
fb = esp_camera_fb_get();
if (!fb) {
Serial.println("Camera capture failed");
res = ESP_FAIL;
} else {
if(fb->width > 400){
if(fb->format != PIXFORMAT_JPEG){
bool jpeg_converted = frame2jpg(fb, 80, &_jpg_buf, &_jpg_buf_len);
esp_camera_fb_return(fb);
fb = NULL;
if(!jpeg_converted){
Serial.println("JPEG compression failed");
res = ESP_FAIL;
}
} else {
_jpg_buf_len = fb->len;
_jpg_buf = fb->buf;
}
}
}
if(res == ESP_OK){
size_t hlen = snprintf((char *)part_buf, 64, _STREAM_PART, _jpg_buf_len);
res = httpd_resp_send_chunk(req, (const char *)part_buf, hlen);
}
if(res == ESP_OK){
res = httpd_resp_send_chunk(req, (const char *)_jpg_buf, _jpg_buf_len);
}
if(res == ESP_OK){
res = httpd_resp_send_chunk(req, _STREAM_BOUNDARY, strlen(_STREAM_BOUNDARY));
}
if(fb){
esp_camera_fb_return(fb);
fb = NULL;
_jpg_buf = NULL;
} else if(_jpg_buf){
free(_jpg_buf);
_jpg_buf = NULL;
}
if(res != ESP_OK){
break;
}
//Serial.printf("MJPG: %uB\n",(uint32_t)(_jpg_buf_len));
}
return res;
}
void startCameraServer(){
httpd_config_t config = HTTPD_DEFAULT_CONFIG();
config.server_port = 80;
httpd_uri_t index_uri = {
.uri = "/",
.method = HTTP_GET,
.handler = stream_handler,
.user_ctx = NULL
};
if (httpd_start(&stream_httpd, &config) == ESP_OK) {
httpd_register_uri_handler(stream_httpd, &index_uri);
}
}
void setup() {
// WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector
Serial.begin(115200);
Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);
// Serial.setDebugOutput(false);
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_sccb_sda = SIOD_GPIO_NUM;
config.pin_sccb_scl = SIOC_GPIO_NUM;
config.pin_pwdn = PWDN_GPIO_NUM;
config.pin_reset = RESET_GPIO_NUM;
config.xclk_freq_hz = 20000000;
config.frame_size = FRAMESIZE_UXGA;
config.pixel_format = PIXFORMAT_JPEG; // for streaming
//config.pixel_format = PIXFORMAT_RGB565; // for face detection/recognition
config.grab_mode = CAMERA_GRAB_WHEN_EMPTY;
config.fb_location = CAMERA_FB_IN_PSRAM;
config.jpeg_quality = 12;
config.fb_count = 1;
// if PSRAM IC present, init with UXGA resolution and higher JPEG quality
// for larger pre-allocated frame buffer.
if(config.pixel_format == PIXFORMAT_JPEG){
if(psramFound()){
config.jpeg_quality = 10;
config.fb_count = 2;
config.grab_mode = CAMERA_GRAB_LATEST;
} else {
// Limit the frame size when PSRAM is not available
config.frame_size = FRAMESIZE_SVGA;
config.fb_location = CAMERA_FB_IN_DRAM;
}
} else {
// Best option for face detection/recognition
config.frame_size = FRAMESIZE_240X240;
#if CONFIG_IDF_TARGET_ESP32S3
config.fb_count = 2;
#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();
//drop down frame size for higher initial frame rate
//s->set_framesize(s, FRAMESIZE_SXGA); //Byte length sampling value:60000 #9 (High picture quality) 1280x1024
s->set_framesize(s, FRAMESIZE_SVGA); //Byte length sampling value:40000 #7 (Medium picture quality) 800x600
//s->set_framesize(s, FRAMESIZE_QVGA); //Byte length sampling value:10000 #4 (Poor picture quality) 320x240
s->set_vflip(s, 1); //Image orientation Settings (up and down)
s->set_hmirror(s, 1); //Image orientation Settings (left and right)
WiFi.setTxPower(WIFI_POWER_19_5dBm);
WiFi.mode(WIFI_AP);
WiFi.softAP(ssid, password, 5);
// WiFi.softAP(ssid, password);
Serial.print("\r\n");
startCameraServer();
Serial.print("\r\n");
Serial.print("Camera Ready! Use 'http://");
Serial.print(WiFi.softAPIP());
Serial.println("' to connect");
server.begin(); // Starting the server
delay(100);
}
void loop() {
delay(1);
}
Testergebnis #
Nach dem Hochladen des Programms wird der Bildeffekt auf der Webseite angezeigt. Zunächst muss das Endgerät mit dem vom Kameramodul bereitgestellten WLAN verbunden werden.

Hinweis!
Der WLAN-Name und das Passwort können im Programm individuell angepasst werden.

Die IP-Adresse des Kameramoduls im AP-Modus lautet: 192.168.4.1. Geben Sie dann die IP-Adresse in die Adressleiste des Terminalbrowsers ein, um auf die Webseite mit dem Kamerabild zuzugreifen. Indem Sie die Richtung der Kamera bewegen, können Sie den Live-Bildeffekt des Kameramoduls auf der Webseite sehen.

Relevante Unterlagen #
Angebot anfordern oder kaufen bei #
B2B-Geschäft: info@acebott.com