ESP32 Tutorijal 44/55 - ESP32 Kamera Web Server Video Stream Preko Wifi CAM-2 | SunFounder's ESP32 komplet
U ovom tutorijalu ćemo kreirati vremensku stanicu u realnom vremenu koristeći ESP32 i njegov kamerom dodatak. Ovaj projekat će omogućiti ESP32 da prikazuje vremenske podatke kao što su temperatura i vlažnost na LCD ekranu, dok također streama video preko Wi-Fi-ja. Do kraja ovog tutorijala, imat ćete potpuno funkcionalnu vremensku stanicu koja se ažurira svakih 10 sekundi, pružajući vam vrijedne vremenske informacije na dohvat ruke. Za više jasnoće, pogledajte video (u videu na 00:00).
Objašnjenje hardvera
Glavne komponente ovog projekta uključuju ESP32 mikrokontroler, LCD ekran i kameru modul. ESP32 je moćan mikrokontroler koji ima ugrađene Wi-Fi i Bluetooth mogućnosti, omogućavajući mu da se poveže na internet i komunicira s drugim uređajima. Kamera modul omogućava video streaming, dok LCD ekran prikazuje vremenske informacije korisniku.
LCD korišten u ovom projektu je 20x4 karaktera ekran, koji može prikazati značajnu količinu informacija odjednom. Povezan je na ESP32 za prikaz temperature, vlažnosti i drugih vremenskih podataka preuzetih s online API-ja. ESP32 također uključuje sistem za upravljanje baterijom, omogućavajući mu da radi bežično.
Detalji iz tehničke specifikacije
| Proizvođač | Espressif |
|---|---|
| Broj dijela | ESP32-WROOM-32 |
| Logički/IO napon | 3.3 V |
| Napon napajanja | 3.0 - 3.6 V |
| Izlazna struja (po GPIO) | 12 mA |
| Vršna struja (po GPIO) | 40 mA |
| Smjernice za PWM frekvenciju | 1 kHz |
| Ulazni logički pragovi | 0.3 * VDD do 0.7 * VDD |
| Pad napona / RDS(on) / zasićenje | 0.1 V (tip.) |
| Termička ograničenja | 125 °C |
| Paket | QFN48 |
| Napomene / varijante | Uključuje PSRAM opcije |
- Osigurajte odgovarajuće napajanje (3.0 - 3.6 V).
- Koristite hladnjake za aplikacije s visokom strujom.
- Budite oprezni s GPIO strujnim ograničenjima (12 mA po pinu).
- Povežite LCD i kameru pravilno kako biste izbjegli pogrešnu komunikaciju.
- Provjerite Wi-Fi vjerodajnice i API ključeve za probleme s povezivanjem.
Upute za povezivanje
Da biste povezali ESP32 s LCD i kamerom modulom, počnite spajanjem pinova za napajanje i uzemljenje. Spojite pin za uzemljenje ESP32 na uzemljenje LCD-a i kamere. Zatim spojite 5V pin ESP32 na VCC LCD-a. Za kameru, spojite smeđu žicu na uzemljenje, crvenu žicu na 5V, žutu žicu na GPIO 21, a narandžastu žicu na GPIO 22. Osigurajte da su veze sigurne kako biste izbjegli bilo kakve probleme tokom rada.
Zatim povežite LCD na odgovarajuće GPIO pinove. Specifični pinovi mogu varirati ovisno o vašoj postavci, ali obično ćete spojiti kontrolne pinove na određene GPIO pinove na ESP32. Obavezno pogledajte tehničku specifikaciju ili dijagram pinova za vaš specifični LCD model kako biste potvrdili ispravno povezivanje. Nakon što završite ove veze, provjerite sve žice za bilo kakve labave ili pogrešne veze.
Primjeri koda i objašnjenje
U kodu prvo uključujemo potrebne biblioteke za upravljanje kamerom i Wi-Fi funkcijama. Bitni identifikatori su deklarirani, uključujući ssid i password za Wi-Fi vjerodajnice. Konfiguracija za kameru je postavljena koristeći camera_config_t strukturu, gdje definiramo različite parametre kao što su format piksela i veličina okvira.
const char* ssid = "SSID";
const char* password = "PASSWORD";
void setup() {
Serial.begin(115200);
camera_config_t config;
// ... (postavke konfiguracije)
esp_err_t err = esp_camera_init(&config);
// Provjera grešaka
}
Ovaj isječak inicijalizira kameru i provjerava bilo kakve greške tokom postavljanja. Ako kamera ne uspije da se inicijalizira, poruka o grešci se ispisuje na serijski monitor.
Zatim rješavamo Wi-Fi vezu i pokrećemo kameru server. Petlja za povezivanje se nastavlja dok se ne uspostavi uspješna Wi-Fi veza, što je ključno za preuzimanje vremenskih podataka s API-ja.
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
startCameraServer();
U ovom dijelu pokrećemo Wi-Fi vezu i ispisujemo tačke na serijski monitor dok se veza ne uspostavi. Jednom kada je veza uspostavljena, kamerin server se pokreće, omogućavajući video streaming.
Kompletan kod će se učitati ispod članka, gdje možete vidjeti kako se svi dijelovi spajaju zajedno.
Demonstracija / Šta očekivati
Jednom kada je sve povezano i kod je uploadan, možete očekivati da će se ESP32 povezati na Wi-Fi mrežu i početi preuzimati vremenske podatke svakih 10 sekundi. Očitavanja temperature i vlažnosti će biti prikazana na LCD ekranu. Dodatno, kamera će streamati video preko Wi-Fi-ja, kojem se može pristupiti putem lokalne IP adrese ispisane u serijskom monitoru. Ako Wi-Fi veza ne uspije, ESP32 će vas obavijestiti putem serijskog izlaza (u videu na 10:00).
Vremenske oznake videa
- 00:00 Početak
- 1:42 Uvod u ESP32-Cam
- 4:30 Objašnjen Arduino kod
- 7:35 Odabir ESP32 ploče i COM porta u Arduino IDE-u
- 9:17 Demonstracija
- 12:06 Demonstracija na mobilnom telefonu
#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
Resursi i reference
-
DokumentacijaESP32 Tutorial 44/55 - SunFounder doc page for camera web serverdocs.sunfounder.com
Datoteke📁
Nema dostupnih datoteka.