ESP32 оқулығы 44/55 - ESP32 камера веб-сервері арқылы Wi-Fi CAM-2 арқылы бейне ағыны | SunFounder компаниясының ESP32 жиынтығы
Бұл оқулықта біз ESP32 және оның камера кеңейтімдерін пайдаланып, нақты уақыттағы ауа райы станциясын жасаймыз. Бұл жоба ESP32-ге температура мен ылғалдылық сияқты ауа райы деректерін LCD экранда көрсетуге, сонымен қатар Wi-Fi арқылы бейне ағынын жіберуге мүмкіндік береді. Осы оқулықтың соңында сізде әр 10 секунд сайын жаңаратын, құнды ауа райы ақпаратын қолыңыздың астында беретін толық функционалды ауа райы станциясы болады. Толық түсінік үшін бейнені қараңыз (бейнеде 00:00).
Аппараттық құрал түсіндірмесі
Бұл жобаның негізгі компоненттеріне ESP32 микроконтроллері, LCD дисплей және камера модулі кіреді. ESP32 - бұл кірістірілген Wi-Fi және Bluetooth мүмкіндіктері бар қуатты микроконтроллер, ол интернетке қосылып, басқа құрылғылармен байланысуға мүмкіндік береді. Камера модулі бейне ағынын қамтамасыз етеді, ал LCD дисплей пайдаланушыға ауа райы ақпаратын ұсынады.
Бұл жобада қолданылатын LCD - 20x4 таңбалы дисплей, ол бір уақытта айтарлықтай көп ақпаратты көрсете алады. Ол онлайн API-дан алынған температураны, ылғалдылықты және басқа ауа райы деректерін көрсету үшін ESP32-ге қосылған. ESP32 сонымен қатар батареяны басқару жүйесін қамтиды, бұл оған сымсыз жұмыс істеуге мүмкіндік береді.
Деректер парағының мәліметтері
| Өндіруші | Espressif |
|---|---|
| Бөлшек нөмірі | ESP32-WROOM-32 |
| Логика/IO кернеуі | 3.3 В |
| Қоректендіру кернеуі | 3.0 - 3.6 В |
| Шығыс тогы (әр GPIO) | 12 мА |
| Ең жоғары ток (әр GPIO) | 40 мА |
| PWM жиілігі бойынша нұсқау | 1 кГц |
| Кіріс логикалық шектері | 0.3 * VDD - 0.7 * VDD |
| Кернеу төмендеуі / RDS(on) / қанығу | 0.1 В (тип.) |
| Жылулық шектер | 125 °C |
| Қаптама | QFN48 |
| Ескертулер / нұсқалар | PSRAM опцияларын қамтиды |
- Тиісті қоректендіруді қамтамасыз етіңіз (3.0 - 3.6 В).
- Жоғары ток қолданылатын қолданбалар үшін жылу қабылдағыштарды пайдаланыңыз.
- GPIO ток шектеріне мұқият болыңыз (әр пинге 12 мА).
- LCD және камераны дұрыс қосыңыз, қате байланысты болдырмау үшін.
- Қосылым мәселелері үшін Wi-Fi тіркелгі деректерін және API кілттерін тексеріңіз.
Сым қосу нұсқаулары
ESP32-ні LCD және камера модулімен қосу үшін алдымен қуат және жерге қосу түйреуіштерін қосыңыз. ESP32-нің жерге қосу түйреуішін LCD және камераның жерге қосуына қосыңыз. Содан кейін ESP32-нің 5V түйреуішін LCD-дің VCC-іне қосыңыз. Камера үшін қоңыр сымды жерге, қызыл сымды 5V-ке, сары сымды GPIO 21-ге және қызғылт сары сымды GPIO 22-ге қосыңыз. Жұмыс кезінде ақауларды болдырмау үшін қосылымдардың сенімді екеніне көз жеткізіңіз.
Әрі қарай, LCD-ді тиісті GPIO түйреуіштеріне қосыңыз. Нақты түйреуіштер сіздің конфигурацияңызға байланысты өзгеруі мүмкін, бірақ әдетте басқару түйреуіштерін ESP32-дегі белгіленген GPIO-ға қосасыз. Дұрыс сым қосуды растау үшін нақты LCD моделіңіздің деректер парағына немесе түйреуіш схемасына жүгініңіз. Осы қосылымдарды аяқтағаннан кейін, барлық сымдарды бос немесе қате қосылымдарға тексеріңіз.
Код мысалдары және түсіндірме
Кодта біз алдымен камера мен Wi-Fi функцияларын өңдеу үшін қажетті кітапханаларды қосамыз. Негізгі идентификаторлар, соның ішінде Wi-Fi тіркелгі деректері үшін ssid және password жарияланады. Камера конфигурациясы camera_config_t құрылымы арқылы орнатылады, онда пиксель форматы мен кадр өлшемі сияқты әртүрлі параметрлерді анықтаймыз.
const char* ssid = "SSID";
const char* password = "PASSWORD";
void setup() {
Serial.begin(115200);
camera_config_t config;
// ... (конфигурация параметрлері)
esp_err_t err = esp_camera_init(&config);
// Қателерді тексеру
}
Бұл фрагмент камераны инициализациялайды және орнату кезінде қателерді тексереді. Егер камера инициализацияланбаса, қате туралы хабарлама сериялық мониторға басып шығарылады.
Әрі қарай, біз Wi-Fi қосылымын өңдейміз және камера серверін іске қосамыз. Қосылу циклі Wi-Fi қосылымы сәтті орнатылғанға дейін жалғасады, бұл API-дан ауа райы деректерін алу үшін өте маңызды.
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
startCameraServer();
Бұл бөлімде біз Wi-Fi қосылымын бастаймыз және қосылым орнатылғанға дейін сериялық мониторға нүктелерді басып шығарамыз. Қосылғаннан кейін камера сервері іске қосылады, бұл бейне ағынын жіберуге мүмкіндік береді.
Толық код мақаланың астында жүктеледі, онда барлық бөліктердің қалай біріктірілгенін көре аласыз.
Демонстрация / Не күтуге болады
Барлығы дұрыс қосылып, код жүктелгеннен кейін, ESP32 Wi-Fi желісіне қосылып, әр 10 секунд сайын ауа райы деректерін ала бастайды деп күтуге болады. Температура мен ылғалдылық көрсеткіштері LCD экранда көрсетіледі. Сонымен қатар, камера Wi-Fi арқылы бейне ағынын жібереді, оған сериялық мониторда басып шығарылған жергілікті IP мекенжайы арқылы қол жеткізуге болады. Егер Wi-Fi қосылымы сәтсіз болса, ESP32 сізді сериялық шығыс арқылы хабардар етеді (бейнеде 10:00).
Бейне уақыт белгілері
- 00:00 Басталуы
- 1:42 ESP32-Cam-ге кіріспе
- 4:30 Arduino коды түсіндірілді
- 7:35 Arduino IDE-де ESP32 тақтасын және COM портын таңдау
- 9:17 Демонстрация
- 12:06 Ұялы телефонда демонстрация
#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
Ресурстар мен сілтемелер
-
ҚұжаттамаESP32 Tutorial 44/55- SunFounder doc page for camera web serverdocs.sunfounder.com
Файлдар📁
Файлдар жоқ.