1.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.
2.Features
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
3.Specifications
Parameter | 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 erreichen mA@5V | |
Moderm-sleep: Das Mindestniveau ist 20 mA@5V | |
Leichtschlaf: Der Mindestwert kann 6.7 erreichen mA@5V | |
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 |
4.Beispielcode
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.
(1)Schaltplan
(2)Beispielcode
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.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.
Andeuten
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.
6.Verwandte Ressourcen