Tutorial ESP32 44/55 - Server Web Kamera ESP32 Streaming Video Melalui Wifi CAM-2 | Kit ESP32 SunFounder
Dalam tutorial ini, kita akan membuat stasiun cuaca real-time menggunakan ESP32 dan ekstensi kameranya. Proyek ini akan memungkinkan ESP32 untuk menampilkan data cuaca seperti suhu dan kelembapan di layar LCD, sekaligus melakukan streaming video melalui Wi-Fi. Di akhir tutorial ini, Anda akan memiliki stasiun cuaca yang berfungsi penuh yang diperbarui setiap 10 detik, memberikan informasi cuaca yang berharga di ujung jari Anda. Untuk lebih jelasnya, lihat video (di video pada 00:00).
Penjelasan Perangkat Keras
Komponen utama dari proyek ini termasuk mikrokontroler ESP32, layar LCD, dan modul kamera. ESP32 adalah mikrokontroler yang kuat yang memiliki kemampuan Wi-Fi dan Bluetooth bawaan, memungkinkannya untuk terhubung ke internet dan berkomunikasi dengan perangkat lain. Modul kamera memungkinkan streaming video, sementara layar LCD menampilkan informasi cuaca kepada pengguna.
LCD yang digunakan dalam proyek ini adalah layar karakter 20x4, yang dapat menampilkan banyak informasi sekaligus. LCD terhubung ke ESP32 untuk menampilkan suhu, kelembapan, dan data cuaca lainnya yang diambil dari API online. ESP32 juga mencakup sistem manajemen baterai, memungkinkannya beroperasi secara nirkabel.
Detail Datasheet
| Produsen | Espressif |
|---|---|
| Nomor bagian | ESP32-WROOM-32 |
| Tegangan logika/IO | 3,3 V |
| Tegangan suplai | 3,0 - 3,6 V |
| Arus keluaran (per GPIO) | 12 mA |
| Arus puncak (per GPIO) | 40 mA |
| Panduan frekuensi PWM | 1 kHz |
| Ambang logika masukan | 0,3 * VDD hingga 0,7 * VDD |
| Penurunan tegangan / RDS(on) / saturasi | 0,1 V (khas) |
| Batas termal | 125 °C |
| Kemasan | QFN48 |
| Catatan / varian | Termasuk opsi PSRAM |
- Pastikan suplai daya yang tepat (3,0 - 3,6 V).
- Gunakan heat sink untuk aplikasi arus tinggi.
- Berhati-hatilah dengan batas arus GPIO (12 mA per pin).
- Hubungkan LCD dan kamera dengan benar untuk menghindari kesalahan komunikasi.
- Periksa kredensial Wi-Fi dan kunci API untuk masalah konektivitas.
Instruksi Pengkabelan
Untuk menghubungkan ESP32 dengan LCD dan modul kamera, mulailah dengan menghubungkan pin daya dan ground. Hubungkan pin ground ESP32 ke ground LCD dan kamera. Kemudian, hubungkan pin 5V ESP32 ke VCC LCD. Untuk kamera, hubungkan kabel coklat ke ground, kabel merah ke 5V, kabel kuning ke GPIO 21, dan kabel oranye ke GPIO 22. Pastikan koneksi aman untuk menghindari masalah selama pengoperasian.
Selanjutnya, hubungkan LCD ke pin GPIO yang sesuai. Pin spesifik dapat bervariasi tergantung pada pengaturan Anda, tetapi biasanya, Anda akan menghubungkan pin kontrol ke GPIO yang ditentukan pada ESP32. Pastikan untuk merujuk pada datasheet atau diagram pinout untuk model LCD spesifik Anda untuk mengonfirmasi pengkabelan yang benar. Setelah menyelesaikan koneksi ini, periksa kembali semua kabel untuk koneksi yang longgar atau salah.
Contoh Kode & Penjelasan
Dalam kode, pertama-tama kita menyertakan pustaka yang diperlukan untuk menangani fungsi kamera dan Wi-Fi. Pengidentifikasi penting dideklarasikan, termasuk ssid dan password untuk kredensial Wi-Fi. Konfigurasi untuk kamera diatur menggunakan struktur camera_config_t, di mana kita mendefinisikan berbagai parameter seperti format piksel dan ukuran bingkai.
const char* ssid = "SSID";
const char* password = "PASSWORD";
void setup() {
Serial.begin(115200);
camera_config_t config;
// ... (pengaturan konfigurasi)
esp_err_t err = esp_camera_init(&config);
// Periksa kesalahan
}
Cuplikan ini menginisialisasi kamera dan memeriksa kesalahan selama pengaturan. Jika kamera gagal diinisialisasi, pesan kesalahan dicetak ke monitor serial.
Selanjutnya, kita menangani koneksi Wi-Fi dan memulai server kamera. Loop koneksi berlanjut sampai koneksi Wi-Fi yang berhasil dibuat, yang sangat penting untuk mengambil data cuaca dari API.
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
startCameraServer();
Di bagian ini, kita memulai koneksi Wi-Fi dan mencetak titik ke monitor serial sampai koneksi dibuat. Setelah terhubung, server kamera dimulai, memungkinkan streaming video.
Kode lengkap akan dimuat di bawah artikel, di mana Anda dapat melihat bagaimana semua bagian menyatu.
Demonstrasi / Apa yang Diharapkan
Setelah semuanya terhubung dan kode diunggah, Anda dapat mengharapkan ESP32 untuk terhubung ke jaringan Wi-Fi dan mulai mengambil data cuaca setiap 10 detik. Pembacaan suhu dan kelembapan akan ditampilkan di layar LCD. Selain itu, kamera akan melakukan streaming video melalui Wi-Fi, yang dapat diakses melalui alamat IP lokal yang dicetak di monitor serial. Jika koneksi Wi-Fi gagal, ESP32 akan memberi tahu Anda melalui keluaran serial (di video pada 10:00).
Stempel Waktu Video
- 00:00 Mulai
- 1:42 Pengenalan ESP32-Cam
- 4:30 Kode Arduino dijelaskan
- 7:35 Memilih Papan ESP32 dan port COM di Arduino IDE
- 9:17 Demonstrasi
- 12:06 Demonstrasi di Ponsel
#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
Sumber daya & referensi
-
DokumentasiESP32 Tutorial 44/55 - SunFounder doc page for camera web serverdocs.sunfounder.com
Berkas📁
Tidak ada file tersedia.