ESP32 Tutoriaal 44/55 - ESP32 Kamera Webbediener Video-stroom oor Wifi CAM-2 | SunFounder se ESP32-stel
In hierdie tutoriaal gaan ons 'n intydse weerstasie skep met behulp van die ESP32 en sy kamera-uitbreiding. Hierdie projek sal die ESP32 in staat stel om weersdata soos temperatuur en humiditeit op 'n LCD-skerm te vertoon, terwyl dit ook video oor Wi-Fi stroom. Teen die einde van hierdie tutoriaal sal jy 'n ten volle funksionele weerstasie hê wat elke 10 sekondes opdateer, wat waardevolle weersinligting by jou vingerpunte bied. Vir meer duidelikheid, verwys na die video (in video by 00:00).
Hardeware Verduidelik
Die hoofkomponente van hierdie projek sluit die ESP32-mikrobeheerder, 'n LCD-skerm en 'n kameramodule in. Die ESP32 is 'n kragtige mikrobeheerder wat ingeboude Wi-Fi- en Bluetooth-vermoëns het, wat dit toelaat om aan die internet te koppel en met ander toestelle te kommunikeer. Die kameramodule maak videostroming moontlik, terwyl die LCD-skerm weersinligting aan die gebruiker bied.
Die LCD wat in hierdie projek gebruik word, is 'n 20x4-karakter vertoning, wat 'n aansienlike hoeveelheid inligting op een slag kan wys. Dit is aan die ESP32 gekoppel om die temperatuur, humiditeit en ander weersdata wat van 'n aanlyn API verkry word, te vertoon. Die ESP32 sluit ook 'n batterybestuurstelsel in, wat dit toelaat om draadloos te werk.
Datablad Besonderhede
| Vervaardiger | Espressif |
|---|---|
| Deelnommer | ESP32-WROOM-32 |
| Logika/IO-spanning | 3.3 V |
| Toevoerspanning | 3.0 - 3.6 V |
| Uitsetstroom (per GPIO) | 12 mA |
| Piekstroom (per GPIO) | 40 mA |
| PWM-frekwensie riglyn | 1 kHz |
| Inset logika drempels | 0.3 * VDD tot 0.7 * VDD |
| Spanningsval / RDS(on) / versadiging | 0.1 V (tip.) |
| Termiese limiete | 125 °C |
| Pakket | QFN48 |
| Notas / variante | Sluit PSRAM-opsies in |
- Verseker behoorlike kragtoevoer (3.0 - 3.6 V).
- Gebruik hittesinks vir hoëstroomtoepassings.
- Wees versigtig met GPIO-stroomlimiete (12 mA per pen).
- Koppel die LCD en kamera behoorlik om miskommunikasie te vermy.
- Kontroleer Wi-Fi-geloofsbriewe en API-sleutels vir konnektiwiteitskwessies.
Bedradingsinstruksies
Om die ESP32 met die LCD en kameramodule te bedraad, begin deur die krag- en grondpenne te koppel. Koppel die grondpen van die ESP32 aan die grond van die LCD en kamera. Koppel dan die 5V-pen van die ESP32 aan die VCC van die LCD. Vir die kamera, koppel die bruin draad aan grond, die rooi draad aan 5V, die geel draad aan GPIO 21, en die oranje draad aan GPIO 22. Verseker dat die verbindings veilig is om enige probleme tydens werking te vermy.
Koppel volgende die LCD aan die toepaslike GPIO-penne. Die spesifieke penne kan wissel na gelang van jou opstelling, maar tipies sal jy die beheerpenne aan aangewese GPIO's op die ESP32 koppel. Maak seker dat jy na die datablad of penuitlegdiagram vir jou spesifieke LCD-model verwys om die korrekte bedrading te bevestig. Nadat jy hierdie verbindings voltooi het, kontroleer alle bedrading weer vir enige los of verkeerde verbindings.
Kode Voorbeelde & Deurloop
In die kode sluit ons eers die nodige biblioteke in vir die hantering van die kamera- en Wi-Fi-funksionaliteite. Die noodsaaklike identifiseerders word verklaar, insluitend ssid en password vir Wi-Fi-geloofsbriewe. Die konfigurasie vir die kamera word opgestel met behulp van die camera_config_t-struktuur, waar ons verskeie parameters soos pixelformaat en raamgrootte definieer.
const char* ssid = "SSID";
const char* password = "PASSWORD";
void setup() {
Serial.begin(115200);
camera_config_t config;
// ... (konfigurasie-instellings)
esp_err_t err = esp_camera_init(&config);
// Kontroleer vir foute
}
Hierdie uittreksel initialiseer die kamera en kontroleer vir enige foute tydens opstelling. As die kamera nie suksesvol initialiseer nie, word 'n foutboodskap op die seriële monitor gedruk.
Volgende hanteer ons die Wi-Fi-verbinding en begin die kamerabediener. Die verbindingslus gaan voort totdat 'n suksesvolle Wi-Fi-verbinding tot stand gebring is, wat noodsaaklik is vir die haal van weersdata van die API.
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
startCameraServer();
In hierdie afdeling begin ons die Wi-Fi-verbinding en druk kolletjies op die seriële monitor totdat die verbinding tot stand gebring is. Sodra dit gekoppel is, word die kamerabediener begin, wat videostroming moontlik maak.
Die volledige kode sal onder die artikel laai, waar jy kan sien hoe al die dele bymekaar kom.
Demonstrasie / Wat om te Verwags
Sodra alles bedraad is en die kode opgelaai is, kan jy verwag dat die ESP32 aan die Wi-Fi-netwerk sal koppel en elke 10 sekondes weersdata sal begin haal. Die temperatuur- en humiditeitlesings sal op die LCD-skerm vertoon word. Daarbenewens sal die kamera video oor Wi-Fi stroom, wat verkry kan word via die plaaslike IP-adres wat in die seriële monitor gedruk word. As die Wi-Fi-verbinding misluk, sal die ESP32 jou deur die seriële uitset in kennis stel (in video by 10:00).
Video Tydstempels
- 00:00 Begin
- 1:42 Inleiding tot die ESP32-Cam
- 4:30 Arduino-kode verduidelik
- 7:35 Kies ESP32-bord en COM-poort in Arduino IDE
- 9:17 Demonstrasie
- 12:06 Demonstrasie op Selfoon
#include "esp_camera.h"
#include <WiFi.h>
//
// WARNING!!! PSRAM IC required for UXGA resolution and high JPEG quality
// Ensure ESP32 Wrover Module or other board with PSRAM is selected
// Partial images will be transmitted if image exceeds buffer size
//
// You must select partition scheme from the board menu that has at least 3MB APP space.
// Face Recognition is DISABLED for ESP32 and ESP32-S2, because it takes up from 15
// seconds to process single frame. Face Detection is ENABLED if PSRAM is enabled as well
// ===================
// Select camera model
// ===================
//#define CAMERA_MODEL_WROVER_KIT // Has PSRAM
// #define CAMERA_MODEL_ESP_EYE // Has PSRAM
//#define CAMERA_MODEL_ESP32S3_EYE // Has PSRAM
//#define CAMERA_MODEL_M5STACK_PSRAM // Has PSRAM
//#define CAMERA_MODEL_M5STACK_V2_PSRAM // M5Camera version B Has PSRAM
//#define CAMERA_MODEL_M5STACK_WIDE // Has PSRAM
//#define CAMERA_MODEL_M5STACK_ESP32CAM // No PSRAM
//#define CAMERA_MODEL_M5STACK_UNITCAM // No PSRAM
#define CAMERA_MODEL_AI_THINKER // Has PSRAM
//#define CAMERA_MODEL_TTGO_T_JOURNAL // No PSRAM
//#define CAMERA_MODEL_XIAO_ESP32S3 // Has PSRAM
// ** Espressif Internal Boards **
//#define CAMERA_MODEL_ESP32_CAM_BOARD
//#define CAMERA_MODEL_ESP32S2_CAM_BOARD
//#define CAMERA_MODEL_ESP32S3_CAM_LCD
#include "camera_pins.h"
// Replace the next variables with your SSID/Password combination
const char* ssid = "SSID";
const char* password = "PASSWORD";
void startCameraServer();
void setupLedFlash(int pin);
void setup() {
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_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
}
#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
if(config.pixel_format == PIXFORMAT_JPEG){
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 defined(CAMERA_MODEL_ESP32S3_EYE)
s->set_vflip(s, 1);
#endif
// Setup LED FLash if LED pin is defined in camera_pins.h
#if defined(LED_GPIO_NUM)
setupLedFlash(LED_GPIO_NUM);
#endif
WiFi.begin(ssid, password);
WiFi.setSleep(false);
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() {
// Do nothing. Everything is done in another task by the web server
delay(10000);
}
Common Course Links
Common Course Files
Hulpbronne en verwysings
-
DokumentasieESP32 Tutorial 44/55 - SunFounder doc page for camera web serverdocs.sunfounder.com
Lêers📁
Geen lêers beskikbaar.