Untuk projek kamera pertama, beli ESP32-S3 WROOM CAM dengan kamera OV5640: ia upload melalui satu kabel USB-C, dan memorinya yang lebih besar dan lebih laju serta terasnya yang lebih baharu mampu menampung frame rate yang lebih tinggi dan pemprosesan imej on-board. ESP32-CAM AI-Thinker klasik dengan OV2640 sesuai untuk projek yang lebih jimat, asalkan ia datang bersama programmer shield atau anda sudah ada adapter USB-to-serial.
Panduan ini berhenti setakat membuat pesanan: sebaik sahaja board sampai, panduan stream pertama ESP32-CAM membawanya dari kotak hingga ke video langsung. Kalau projek anda langsung tidak perlukan kamera, lihat ESP32 mana nak beli.
Apa beza ESP32-CAM klasik dan ESP32-S3 WROOM CAM?
ESP32-CAM klasik dan ESP32-S3 WROOM CAM menggunakan pemacu kamera dan contoh streaming yang sama. Bezanya terletak pada cara anda memprogramnya, memori di sebalik kamera, dan sensor yang ada di dalam kotak.
| ESP32-CAM AI-Thinker klasik | ESP32-S3 WROOM CAM | |
|---|---|---|
| Cip | ESP32, dwi-teras Xtensa LX6, 240 MHz | ESP32-S3, dwi-teras Xtensa LX7, 240 MHz, dengan arahan SIMD 128-bit |
| SRAM dalaman | 520 KB | 512 KB |
| PSRAM | 4 MB boleh guna, bas empat talian (quad) | 8 MB, bas lapan talian (octal) |
| Flash | 4 MB | 16 MB |
| Kamera dalam kotak | OV2640, 2 MP, sudah terpasang | OV5640, 5 MP, dibungkus berasingan |
| Frame terbesar | 1600 Γ 1200 | Sensor 2592 Γ 1944; 2560 Γ 1920 melalui pemacu esp32-camera |
| JPEG perkakasan dalam sensor | Ya | Ya |
| USB pada board kamera | Tiada; soket micro-USB terletak pada programmer shield ESP32-CAM-MB, yang dibekalkan bersama board kami | Dua USB-C (USB natif + bridge UART) |
| Kuasa masuk | 5 V melalui micro-USB pada shield atau pin 5V | 5 V melalui USB-C atau pin 5V |
| Header | 16 pin; hanya sedikit GPIO yang tinggal bebas apabila kamera dan slot microSD digunakan | Dua baris panjang, jalur header dibekalkan untuk disolder |
Apa yang ada dalam setiap kotak ESP32-CAM, dan kabel apa yang diperlukan?
Pilih SATU board kamera: ini pilihan alternatif, bukan satu kit
| Item | Price | Qty | |
|---|---|---|---|
ESP32-S3 WROOM CAM DEVELOPMENT BOARD OV5640 CAMERA MODULE WIFI BLUETOOTH DUAL USB-C IOT AIS3CAM56 | RM56.95 | ||
NodeMCU ESP32 CAM Wi-Fi Bluetooth Camera Board OV2640 / RHYX-M21-45 with CH340/CP2012 - OV2640 ESP32-CAMES32CAM | RM44.95 | Kehabisan stok |
Parts list
Ambil hanya apa yang diperlukan oleh laluan anda. Kabel CH340 adalah untuk board AI-Thinker tanpa shield yang anda sudah ada: ia flash melalui lima sambungan, dengan GPIO0 dipegang ke GND semasa upload (shield MB melakukannya dengan butang IO0). Ambil kabel data USB-C untuk board S3 atau kabel data micro-USB untuk shield MB; panjang 1.0 m ada pada halaman yang sama. Ia mesti kabel data: kabel cas sahaja boleh menghidupkan board tetapi tidak akan memunculkan COM port.
ESP32-S3 WROOM CAM ialah board hitam panjang dengan modul bertanda N16R8: flash 16 MB, PSRAM 8 MB. Ia datang sebagai kit, dengan OV5640 pada ribbon oren dan jalur header yang hanya perlu disolder kalau anda mahu guna breadboard atau pendawaian tambahan; kamera dan USB-C berfungsi tanpanya. ESP32-CAM dengan OV2640 klasik pula tiba sebagai susunan dua board: board kamera hitam duduk di atas programmer shield ESP32-CAM-MB, yang membawa soket micro-USB serta butang IO0 dan RST.
Kenapa pesanan ESP32-CAM pertama selalu tersangkut ketika upload?
Board ESP32-CAM AI-Thinker klasik tiada soket USB dan tiada cip USB-to-serial. ESP32 menerima firmware baharu melalui UART0, iaitu talian serial 3.3 V pada pin bertanda U0T dan U0R, yang tidak boleh dicucuk terus ke laptop, jadi mesti ada sesuatu yang menukar USB kepada serial. Cip itu juga mesti diberitahu untuk menerima firmware: semasa reset ia membaca GPIO0, LOW bermaksud tunggu firmware baharu, HIGH bermaksud jalankan apa yang ada dalam flash. Board tanpa shield memegang GPIO0 pada HIGH, jadi ia hanya akan boot program lamanya.
Jadi board tanpa shield yang dibeli di tempat lain tidak boleh diprogram sehingga anda menambah adapter USB-to-serial seperti kabel download CH340 kami, diwayar begini:
| Wayar adapter | Pin ESP32-CAM | Nota |
|---|---|---|
| 5 V (merah) | 5V |
Jangan sekali-kali ke pin 3.3V: 5 V di situ melangkau regulator dan terus sampai ke cip 3.3 V |
| GND (hitam) | GND |
|
| TX (hijau) | U0R (GPIO3) |
Transmit adapter pergi ke receive board |
| RX (putih) | U0T (GPIO1) |
Kalau upload tidak pernah bersambung, tukar TX dan RX; ia tidak merosakkan apa-apa |
| Wayar jumper female-to-female | GPIO0 ke pin GND yang kosong |
Pasang jumper, kemudian tekan RST (di bahagian bawah board) supaya cip membaca GPIO0 sebagai LOW, barulah upload; cabut jumper dan tekan RST sekali lagi untuk menjalankan program |
Kalau dibiarkan terpasang, jumper itu menghantar setiap reset kembali ke mod download, dan GPIO0 juga ialah talian clock kamera. ESP32 ialah cip 3.3 V, jadi ukur dahulu wayar TX kabel itu terhadap wayar hitam ketika kabel sudah dicucuk ke laptop tetapi belum diwayar ke board: talian UART berada pada HIGH ketika rehat, jadi bacaan itu ialah aras logiknya. Kalau hampir 5 V, turunkan voltannya: perintang 1 kΞ© secara siri dari TX ke U0R dan perintang 2 kΞ© dari U0R ke GND meninggalkan dua pertiga daripada 5 V, kira-kira 3.3 V.
ESP32-CAM OV2640 kami dihantar sudah terpasang pada programmer shield ESP32-CAM-MB, yang membekalkan tepat apa yang tiada pada board itu: cip USB-to-serial CH340 di belakang soket micro-USB, serta butang IO0 dan RST untuk mod download. Dengan satu kabel data micro-USB, ia boleh upload hampir sama seperti DevKit. Kalau upload tersangkut pada “Connecting…”, tahan IO0, tekan RST sekali, lepaskan IO0 dan upload semula; kalau sketch tidak bermula selepas itu, tekan RST. ESP32-S3 tidak perlukan adapter, shield atau jumper: pengawal USB Serial/JTAG terbina dalam cipnya berhubung terus dengan laptop dan meletakkan cip ke mod download dengan sendirinya. Kalau tiada port yang muncul, syak kabel dahulu; selepas itu, driver CH340 pada shield MB, atau port USB-C yang satu lagi pada S3 (ESP32 tak detect).

Adakah 5 MP pada OV5640 benar-benar nampak lebih tajam di skrin telefon?
Piksel tambahan OV5640 hanya kelihatan apabila anda zoom masuk atau mencetak gambar. Frame terbesar OV2640 ialah 1600 Γ 1200, iaitu 1.92 juta piksel; frame terbesar OV5640 ialah 2592 Γ 1944, iaitu 5.04 juta. Skrin telefon biasa lebih kurang 1080 piksel lebar, jadi pada lebar penuh, frame 1600 piksel sudah dikecilkan sepertiga dan frame 2592 piksel dikecilkan tiga perlima: kedua-duanya nampak sama. Zoom masuk dua kali ganda dan skrin hanya memaparkan separuh lebar frame. Daripada OV2640, itu bermakna 800 piksel diregangkan merentasi 1080, yang nampak kabur; daripada OV5640 pula 1296, masih lebih daripada yang diperlukan skrin. Itulah yang anda dapat daripada 5 MP: boleh membaca dail meter atau nombor plat daripada gambar pegun.
Video langsung jarang berjalan pada resolusi maksimum mana-mana sensor: saiz JPEG bertambah lebih kurang mengikut bilangan pikselnya, jadi 2592 Γ 1944 membawa kira-kira enam belas kali ganda data 640 Γ 480, dan Wi-Fi mesti menghantar setiap frame. Stream yang lancar berjalan pada VGA atau SVGA pada kedua-dua board.

Apa kelebihan PSRAM tambahan dan teras LX7 pada ESP32-S3?
Kelebihan sebenar ESP32-S3 WROOM CAM ialah komputer di sebalik kameranya. Memproses imej memerlukan piksel mentah, contohnya RGB565 pada 2 bait setiap piksel, dan satu frame 640 Γ 480 menjadi 640 Γ 480 Γ 2 = 614,400 bait: lebih besar daripada SRAM 512β520 KB pada kedua-dua cip, yang turut perlu menampung Wi-Fi dan program anda. Sebab itu pemacu esp32-camera meletakkan frame dalam PSRAM, iaitu cip RAM tambahan di dalam modul, untuk apa sahaja selain frame JPEG yang kecil.
Satu frame mentah 1600 Γ 1200 ialah 3.84 MB, hampir keseluruhan 4 MB pada board klasik, tanpa ruang untuk salinan kedua atau memori kerja model pengesanan; pada 8 MB milik S3, frame yang sama masih meninggalkan lebih separuh ruang kosong. Kelajuan pula datang daripada bas dan teras. Setiap frame dalam PSRAM ditulis sekali oleh kamera dan dibaca semula sekurang-kurangnya sekali untuk dihantar atau diproses, jadi kelajuan PSRAM menghadkan berapa banyak frame sesaat yang boleh dipindahkan dan diproses oleh cip, dan frame mentah jauh lebih berat daripada frame JPEG: JPEG VGA hanya puluhan kilobait, manakala frame yang sama dalam RGB565 ialah 614,400 bait. PSRAM S3 menggunakan lapan talian data dan bukannya empat, jadi setiap kitaran clock memindahkan dua kali ganda bit. Kedua-dua cip berjalan pada 240 MHz, tetapi arahan SIMD S3 memproses 16 bait dalam satu arahan, sedangkan teras LX6 ESP32 klasik mengerjakannya satu demi satu, dan penjejakan warna serta pengesanan muka mengulangi aritmetik itu untuk setiap piksel dalam setiap frame. Sebab itulah library vision ESP-DL keluaran Espressif menyasarkan S3, dan pada ESP32 klasik ia beralih kepada kod C biasa yang jauh lebih perlahan.
OV2640 atau RHYX-M21-45: varian kamera ESP32-CAM yang mana?
ESP32-CAM klasik kami juga ada dalam varian RHYX-M21-45, iaitu kamera yang dibina di sekeliling sensor GalaxyCore GC2145 tanpa pengekod JPEG. CameraWebServer men-stream MJPEG, iaitu jujukan pantas gambar JPEG. OV2640 memampatkan setiap frame di dalam sensor, jadi ESP32 hanya meneruskan gambar yang sudah siap; dengan GC2145 pula, sketch lalai meminta JPEG dan kamera gagal dimulakan sehingga anda menukarnya kepada RGB565 pada saiz frame yang kecil.
Selepas ditukar, CameraWebServer memang boleh stream semula, tetapi hanya dengan memampatkan setiap frame secara perisian pada ESP32, dan itu mengorbankan frame rate. Tugas sebenar varian RHYX ialah pemprosesan on-board yang memang memerlukan RGB565 mentah, seperti penjejakan warna atau line following; untuk stream ke telefon, pilih OV2640.
Bagaimana nak semak cip, PSRAM dan kamera yang sampai?
Pasang OV5640 pada board ESP32-S3 dahulu (langkah ribbon ada di bawah), kemudian biarkan sketch ini bertanya terus kepada perkakasan: ia mencetak cip, saiz PSRAM dan ID sensor, kemudian menangkap satu frame ujian. Pilih AI Thinker ESP32-CAM di Tools β Board untuk board klasik, atau ESP32S3 Dev Module dengan tetapan PSRAM dan USB daripada panduan stream pertama.
// Semakan ESP32-CAM yang baru sampai: cip apa, berapa PSRAM, sensor kamera apa
// Berfungsi pada ESP32-CAM AI-Thinker klasik dan ESP32-S3 WROOM CAM
#include "esp_camera.h"
#if defined(CONFIG_IDF_TARGET_ESP32S3)
// ESP32-S3 WROOM CAM (peta pin sama seperti CAMERA_MODEL_ESP32S3_EYE)
#define PWDN_PIN -1
#define RESET_PIN -1
#define XCLK_PIN 15
#define SIOD_PIN 4
#define SIOC_PIN 5
#define Y9_PIN 16
#define Y8_PIN 17
#define Y7_PIN 18
#define Y6_PIN 12
#define Y5_PIN 10
#define Y4_PIN 8
#define Y3_PIN 9
#define Y2_PIN 11
#define VSYNC_PIN 6
#define HREF_PIN 7
#define PCLK_PIN 13
#else
// ESP32-CAM AI-Thinker klasik (peta pin sama seperti CAMERA_MODEL_AI_THINKER)
#define PWDN_PIN 32
#define RESET_PIN -1
#define XCLK_PIN 0 // GPIO0 juga ialah pin mod boot
#define SIOD_PIN 26
#define SIOC_PIN 27
#define Y9_PIN 35
#define Y8_PIN 34
#define Y7_PIN 39
#define Y6_PIN 36
#define Y5_PIN 21
#define Y4_PIN 19
#define Y3_PIN 18
#define Y2_PIN 5
#define VSYNC_PIN 25
#define HREF_PIN 23
#define PCLK_PIN 22
#endif
void setup() {
Serial.begin(115200);
delay(1500);
Serial.printf("Chip: %s, %d cores\n", ESP.getChipModel(), ESP.getChipCores());
Serial.printf("PSRAM: %lu bytes\n", (unsigned long)ESP.getPsramSize());
camera_config_t config = {};
config.pin_pwdn = PWDN_PIN;
config.pin_reset = RESET_PIN;
config.pin_xclk = XCLK_PIN;
config.pin_sccb_sda = SIOD_PIN;
config.pin_sccb_scl = SIOC_PIN;
config.pin_d7 = Y9_PIN;
config.pin_d6 = Y8_PIN;
config.pin_d5 = Y7_PIN;
config.pin_d4 = Y6_PIN;
config.pin_d3 = Y5_PIN;
config.pin_d2 = Y4_PIN;
config.pin_d1 = Y3_PIN;
config.pin_d0 = Y2_PIN;
config.pin_vsync = VSYNC_PIN;
config.pin_href = HREF_PIN;
config.pin_pclk = PCLK_PIN;
config.xclk_freq_hz = 20000000;
config.ledc_timer = LEDC_TIMER_0;
config.ledc_channel = LEDC_CHANNEL_0;
// RGB565 pada 320x240: disokong oleh setiap sensor di sini, ada JPEG atau tidak
config.pixel_format = PIXFORMAT_RGB565;
config.frame_size = FRAMESIZE_QVGA;
config.fb_count = 1;
config.grab_mode = CAMERA_GRAB_LATEST;
config.fb_location = psramFound() ? CAMERA_FB_IN_PSRAM : CAMERA_FB_IN_DRAM;
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
Serial.printf("Camera init failed: 0x%x. Power off, re-seat the ribbon, check the 5 V supply.\n", (unsigned)err);
return;
}
sensor_t *s = esp_camera_sensor_get();
camera_sensor_info_t *info = esp_camera_sensor_get_info(&s->id);
if (info) {
Serial.printf("Sensor: %s (PID 0x%04x)\n", info->name, (unsigned)s->id.PID);
Serial.printf("Largest frame: %u x %u, hardware JPEG: %s\n",
(unsigned)resolution[info->max_size].width,
(unsigned)resolution[info->max_size].height,
info->support_jpeg ? "yes" : "NO");
} else {
Serial.printf("Unknown sensor, PID 0x%04x\n", (unsigned)s->id.PID);
}
camera_fb_t *fb = esp_camera_fb_get();
if (fb) {
// 320 x 240 piksel x 2 bait = 153600 bait untuk RGB565
Serial.printf("Test frame: %u x %u, %u bytes\n", (unsigned)fb->width, (unsigned)fb->height, (unsigned)fb->len);
esp_camera_fb_return(fb);
} else {
Serial.println("No frame captured: re-seat the ribbon and try again.");
}
}
void loop() {
}
Semakan ini mencetak sekali sahaja, semasa permulaan, jadi buka Serial Monitor pada 115200 baud dan kemudian tekan RST untuk menjalankannya semula. Board klasik melaporkan kira-kira 4 MB PSRAM dan OV2640 dengan JPEG “yes”; S3 pula kira-kira 8 MB dan OV5640, yang frame terbesarnya dicetak sebagai 2560 Γ 1920, iaitu preset terbesar pemacu yang muat dalam 2592 Γ 1944 sensor itu; GC2145 pula mencetak JPEG “NO”. Pada S3, “PSRAM: 0 bytes” bermaksud Tools β PSRAM belum ditetapkan kepada OPI PSRAM, bukan cipnya tiada. Frame ujian sepatutnya 153,600 bait: 320 Γ 240 Γ 2, aritmetik RGB565 yang sama seperti di atas. Kalau keluar “Camera init failed”, periksa ribbon dahulu.
Bolehkah modul kamera OV7670 menggantikan kamera ESP32-CAM?
Tidak boleh. Modul OV7670 yang sering muncul dalam carian kamera ialah sensor VGA semata-mata pada board biru dengan dua baris pin header male, 18 pin semuanya. Kedua-dua board kamera ESP32 menerima kamera melalui soket flat-ribbon (FPC) 24 pin, jadi ia tidak boleh dicucuk masuk, dan jumper pun tidak dapat mengatasinya: pada board klasik, talian data dan sync kamera disambung terus dari soket ke ESP32 dan tidak pernah sampai ke header. Walaupun diwayar dengan seberkas jumper ke board ESP32 biasa, OV7670 tiada pengekod JPEG dan maksimumnya hanya 640 Γ 480, jadi ESP32 terpaksa memampatkan setiap frame secara perisian sebelum boleh men-streamnya.
Tempat sebenar OV7670 ialah untuk belajar bagaimana antara muka kamera selari berfungsi pada board kelas Uno, yang RAM 2 KB-nya tidak mampu menyimpan frame VGA sebesar 614,400 bait, jadi piksel dihantar melalui serial baris demi baris, dengan perlahan. Pinnya 3.3 V, jadi output 5 V pada Uno perlukan pembahagi voltan perintang atau level shifter sebelum sampai kepadanya.
Bagaimana nak pasang ribbon ESP32-CAM tanpa merosakkannya?
OV5640 dalam kit S3 datang berasingan, jadi anda akan membuka penyambungnya pada hari pertama lagi; OV2640 pada board klasik datang sudah terpasang, tetapi peraturan yang sama terpakai setiap kali anda memasangnya semula. Latch berengsel pada penyambung FPC itulah yang membuat sambungan: apabila ditutup, ia menekan 24 jari emas ribbon pada sesentuh spring di dalam soket; apabila dibuka, ribbon hanya terletak di dalam slot. Kalau latch separuh tertutup, atau ribbon tidak masuk sepenuhnya, sesetengah talian kekal terputus, pemacu tidak dapat mengesan sensor, dan log melaporkan “Camera init failed”.
- Cabut kabel USB dahulu: ribbon yang tergelincir melintasi sesentuh yang berkuasa boleh membuat litar pintas antara pin bersebelahan, termasuk pin kuasa.
- Angkat bar latch yang berwarna gelap pada tepinya dengan kuku sehingga ia berdiri lebih kurang tegak. Ia berengsel, bukan untuk ditanggalkan; kalau dipaksa lebih jauh, engselnya akan patah.
- Lihat ke dalam slot: sesentuh logam terletak pada satu sisi. Masukkan ribbon lurus-lurus, dengan jari emas menghadap sesentuh itu, sehingga jari-jari emas itu hampir tenggelam sepenuhnya ke dalam slot.
- Tekan latch sehingga rata sambil memegang ribbon supaya kekal lurus.
Lipat kamera ke tempatnya dalam lengkung yang lembut, jangan sekali-kali sampai berlipat tajam: trek kuprum boleh retak pada lipatan tajam, dan trek yang retak boleh kelihatan sempurna walaupun satu isyarat sudah hilang.

Berapa voltan yang diperlukan ESP32-CAM?
Kedua-dua board kamera ESP32 berjalan pada 5 V, melalui soket USB atau pin 5V, dan regulator on-board menghasilkan 3.3 V untuk cip. Board klasik juga ada pin 3.3V, tetapi pin itu memintas regulator, jadi apa sahaja yang membekalkannya mesti mampu mengekalkan 3.3 V dengan sendirinya melalui setiap lonjakan arus.
Permulaan kamera itulah yang mendedahkan bekalan kuasa yang lemah. Sensor dihidupkan tepat ketika kebanyakan sketch menghidupkan Wi-Fi, yang letusan pancarannya menarik beberapa ratus miliampere. Rintangan kabel yang nipis menukar setiap letusan arus itu kepada susutan voltan, dan port yang lemah merosot lagi di atasnya; sebaik sahaja susutan itu sampai ke cip, pengesan brownout me-reset board, reset itu memulakan semula kamera, dan voltan susut lagi: gelung reboot dengan “Brownout detector was triggered” dalam log. Gunakan kabel data yang pendek dan port USB terus atau adapter 5 V yang elok; panduan power supply ESP32 menerangkan pilihan bateri dan penyelesaian penuhnya.
ESP32-CAM mana yang patut anda pesan?
Projek kamera pertama, tiada adapter USB-to-serial di meja kerja, atau dikejar deadline: ambil ESP32-S3 WROOM CAM. Ia juga menang untuk pemprosesan on-board.
Sudah ada adapter, atau mahu laluan paling jimat: board AI-Thinker klasik dengan OV2640 masih sesuai. Board kami datang di atas programmer shield-nya, jadi adapter itu tidak wajib.
Kesilapan biasa yang kami lihat
Memesan ESP32-CAM tanpa shield dan menyangka ada port USB. Kabel tiada tempat untuk dicucuk dan projek terpaksa menunggu adapter. Pastikan listing menyebut programmer shield atau MB, atau pesan sahaja S3.
Membeli OV7670 kerana ia muncul dalam carian “modul kamera”. Ia komponen dari kelas yang berbeza: header pin dan bukannya ribbon, dan tiada JPEG.
Sibuk membetulkan kod apabila board reset sebaik sahaja kamera dimulakan. Itu masalah kuasa; betulkan kabel dan bekalan kuasa dahulu.
FAQ
Board ESP32-CAM mana yang terbaik untuk pemula?
ESP32-S3 WROOM CAM: satu kabel USB-C, tiada adapter atau jumper boot, dan PSRAM 8 MB untuk frame yang lebih besar dan pemprosesan on-board.
Boleh tak program ESP32-CAM tanpa programmer?
Tidak untuk board AI-Thinker klasik, yang tiada USB. Gunakan shield ESP32-CAM-MB (board kami dihantar bersamanya) atau adapter USB-to-serial beserta jumper GPIO0 ke GND. S3 pula ada USB natif.
Apa beza OV2640 dan OV5640?
1600 Γ 1200 (2 MP) berbanding 2592 Γ 1944 (5 MP), kedua-duanya dengan JPEG perkakasan. Di telefon, kedua-duanya nampak sama sehingga anda zoom masuk.
Berapa voltan operasi ESP32-CAM?
5 V ke soket USB atau pin 5V; regulator di atas board menghasilkan 3.3 V.
Boleh tak guna OV7670 dengan ESP32-CAM?
Tidak boleh: ia ada pin header dan bukannya ribbon 24 pin, dan tiada pengekod JPEG.
Kemas kini terakhir Oktober 2026. Tersangkut? Chat dengan kami di WhatsApp.



ESP32-S3 WROOM CAM DEVELOPMENT BOARD OV5640 CAMERA MODULE WIFI BLUETOOTH DUAL USB-C IOT AI
NodeMCU ESP32 CAM Wi-Fi Bluetooth Camera Board OV2640 / RHYX-M21-45 with CH340/CP2012 - OV2640 ESP32-CAM
CH340G USB to TTL UART Serial Converter Download Cable for Arduino Programming ESP8266 NodeMCU Development Board
Data Cable Type-A Type-C MicroUSB Type-B 0.5m 1m 30cm 0.3m 100cm Data Transfer Upload Code - TYPE-A TO TYPE-C CABLE (0.5M)
Data Cable Type-A Type-C MicroUSB Type-B 0.5m 1m 30cm 0.3m 100cm Data Transfer Upload Code - MicroUSB CABLE (0.5M)