- ESP32 RC Cars adalah sistem kamera kendali jarak jauh berbasis ESP32-CAM yang menggabungkan streaming video real-time dan kontrol motor·servo melalui WebSocket
- Aplikasi server Python mengelola komunikasi WebSocket dan menyediakan antarmuka web untuk melihat video dari perangkat ESP32 serta mengendalikannya lewat browser
- Fitur utamanya mencakup streaming video langsung dari ESP32-CAM, kontrol motor·servo berbasis perintah WebSocket, timeout otomatis yang mengembalikan perangkat ke status default saat tidak ada perintah kontrol, serta kanvas video multi-klien
- Perangkat keras yang dibutuhkan adalah AI Thinker atau ESP32-CAM kompatibel, motor·servo yang terhubung ke GPIO, catu daya 5V yang stabil, dan jaringan Wi‑Fi; kartu SD bersifat opsional
- Perintah kontrol menggunakan format
MOTOR:<speed>, SERVO:<angle>, CONTROL:<speed>:<angle>, dan server menata frame video dari beberapa klien ESP32 dalam bentuk grid lalu menyiarkannya ke antarmuka web
Gambaran proyek
- ESP32 RC Cars adalah contoh sistem kamera kendali jarak jauh berbasis ESP32
- ESP32-CAM mengirim video real-time melalui WebSocket, dan motor serta servo dikendalikan dengan perintah WebSocket
- Aplikasi server Python mengelola komunikasi WebSocket dan memungkinkan perangkat ESP32 dilihat serta dikendalikan dari antarmuka web
- Video demo: https://youtu.be/OubYFXmvA1E
Fitur utama
- Mengirim streaming video langsung dari ESP32-CAM ke server web
- Mengendalikan motor dan servo dari jarak jauh melalui perintah WebSocket
- Jika tidak ada perintah kontrol selama jangka waktu tertentu, motor dan servo otomatis kembali ke status default
- Server menempatkan feed video dari beberapa klien secara dinamis ke dalam kanvas
Perangkat keras dan bahan
- Perangkat keras yang diperlukan
- ESP32-CAM, modul AI Thinker, atau board yang kompatibel
- Motor dan servo yang terhubung ke pin GPIO yang sesuai
- Catu daya 5V yang stabil untuk ESP32-CAM
- Jaringan Wi‑Fi untuk komunikasi
- Kartu SD opsional jika diperlukan untuk fungsi lain
- Bahan yang digunakan adalah komponen kit yang dibeli dari AliExpress
- Sasis mobil
- Electronic speed controller
- Menggunakan versi 30A, dan output BEC 5V 3A tampak cukup untuk menyediakan arus bagi ESC dan servo
- Dudukan baterai
- 2 sel 18650 3.6V atau paket baterai 7.4V
- Keduanya pernah digunakan, dan sel lebih fleksibel untuk dipakai di proyek lain
- ESP32-CAM
- Model dengan antena eksternal sangat penting, dan digunakan kamera fisheye 170 derajat
- Bluetooth Gamepad
- Menggunakan kontroler PS4
Skema pengkabelan
- Adaptor JST 3-pin pada servo yang disertakan di sasis mobil dilepas, lalu dipindahkan ke plug JST 4-pin agar bisa dihubungkan ke ESP32
- Kabel positif dan negatif servo disambungkan, lalu ditambahkan plug JST betina 3-pin menggunakan alat crimping
- Kabel kontrol putih dari ESC dihubungkan ke plug JST 4-pin dan plug betina 3-pin
Susunan perangkat lunak
- Library yang digunakan dalam kode ESP32
WiFi.h: koneksi Wi‑Fi
ArduinoWebsockets.h: komunikasi WebSocket
esp_camera.h: kontrol kamera ESP32-CAM
ServoControl.h, Esc.h: kontrol servo dan motor
Arduino.h: fungsi Arduino standar
- Dependensi server Python diinstal dengan perintah berikut
sudo apt install python3-aiohttp python3-opencv python3-numpy
Konfigurasi dan menjalankan
- Konfigurasi firmware ESP32
- Atur kredensial Wi‑Fi dan URL server WebSocket di
secrets.h
#define WIFI_SSID "YourWiFiSSID"
#define WIFI_PASSWORD "YourWiFiPassword"
#define WS_SERVER_URL "ws://YourServerIP:Port"
- Pin GPIO kamera sudah dikonfigurasi sebelumnya untuk board AI Thinker ESP32-CAM
- Jika perlu, ubah pin motor dan servo agar sesuai dengan konfigurasi perangkat keras
- Konfigurasi server Python
- Letakkan skrip server di direktori yang sama dengan file
index.html untuk antarmuka web
- Jalankan server dengan perintah berikut
python3 app.py
Cara penggunaan dan perintah WebSocket
- Prosedur penggunaan ESP32
- Unggah sketch yang disediakan ke ESP32-CAM menggunakan Arduino IDE atau platform kompatibel
- Periksa output serial untuk memastikan koneksi ke Wi‑Fi dan server WebSocket berhasil
- Prosedur penggunaan server
- Jalankan skrip server Python
- Buka antarmuka web di browser untuk melihat streaming video langsung
- Kirim perintah kontrol melalui koneksi WebSocket
- Perintah yang didukung
MOTOR:<speed>: mengatur kecepatan motor, rentang -255 sampai 255
SERVO:<angle>: mengatur sudut servo, rentang 0 sampai 180
CONTROL:<speed>:<angle>: mengendalikan kecepatan motor dan sudut servo secara bersamaan
Detail operasi dan pemecahan masalah
- Tahap inisialisasi ESP32
- Terhubung ke jaringan Wi‑Fi yang ditentukan
- Mengonfigurasi ESP32-CAM untuk streaming video
- Membangun koneksi WebSocket dengan server
- Penanganan timeout mengembalikan kecepatan motor ke
0 dan sudut servo ke 90 saat tidak ada perintah kontrol selama jangka waktu tertentu
- Server Python berkomunikasi dengan beberapa klien ESP32 melalui WebSocket
- Server memproses frame video yang masuk, menatanya secara dinamis dalam bentuk grid, lalu menyiarkannya ke antarmuka web
- Jika ada masalah koneksi, periksa kredensial Wi‑Fi di
secrets.h, lalu pastikan server WebSocket berjalan dan dapat diakses
- Jika ada masalah pada stream video, periksa apakah catu daya ESP32-CAM memadai dan apakah konfigurasi inisialisasi kamera sudah benar
- Proyek ini dirilis dengan MIT License
1 komentar
Komentar Hacker News
Saya memakai ponsel HTC Magic lama sebagai kamera + pemancar Wi-Fi, lalu menghubungkannya ke Arduino lewat port serial dan level shifter untuk mengendalikan servo dan LED RGB.
Koneksinya tidak terlalu stabil, tetapi cukup menyenangkan, dan mungkin sekarang saatnya menghidupkan kembali proyek ini dengan generasi mikrokontroler berikutnya.
Jika Anda menyukai proyek ini, bantuan terbesar adalah mengenalkannya kepada orang yang sedang mencari developer remote.
Pekerjaan utama saya adalah developer Ruby on Rails, tetapi saya juga bisa mempertimbangkan pekerjaan di bidang robotika.
Artikel ini layak dibaca: https://www.reddit.com/r/esp32/comments/r7kqtt/esp32cam_supe...
Sebelum menerapkan beberapa saran, frame rate-nya cukup buruk.
Menyolder ulang resistor 0Ω terasa hampir seperti petualangan, tetapi akhirnya tersambung ke pin yang benar, dan hasilnya seperti ini: https://imgur.com/a/LJflZ80
Saya sudah menambahkan tautan antena yang digunakan ke README.
Software dasarnya bisa dimulai dengan mudah, sekitar 20 baris kode C jika memakai library controller Bluetooth.
Setelah itu saya menambahkan fitur agar lebih mudah dikendalikan. Cara mengontrol dua track dengan dua stik memang oke pada kecepatan rendah, tetapi karena memakai dua motor drone dan bisa melaju hampir 20km/h, saya butuh skema kontrol lain.
Pada akhirnya, saya membuat kontrol track langsung dengan pembatas RPM memakai trigger di controller DualShock, dan untuk melaju cepat saya memakai stik kiri atas/bawah sebagai akselerasi serta stik kanan kiri/kanan sebagai kemudi, sehingga bisa dikendarai seperti mobil RC biasa.
Ini video dari model 3D print yang sama yang saya jadikan basis; kecepatannya terlihat jelas mulai 00:50: https://www.youtube.com/watch?v=3Mv_tDY89Zw
Saya tidak begitu paham pembuatan RC; biasanya dikendalikan seperti apa? Apakah controller PS4 dihubungkan langsung ke ESP?
Saya penasaran berapa latensi proyek ini.
Sementara itu, video pada quadcopter FPV terpisah. Sebagian orang memakai analog karena saat sinyal melemah kualitasnya memburuk secara bertahap, bukan putus total lalu tersambung ulang; sebagian lain memakai komunikasi berbasis 802.11, yang sebenarnya cukup kompetitif.
Misalnya, Walksnail Goggles memakai 802.11 untuk link video, dan meski tidak terlalu terbuka atau terdokumentasi dengan baik, ada juga orang-orang yang membedah bagian dalamnya seperti dalam karya Chris Rosser.
Latensi konfigurasi seperti ini tampaknya cukup baik bahkan untuk balap quadcopter cepat yang kompetitif.
[0] https://www.expresslrs.org
Dan: https://github.com/gyrex/CrystalVideo
Frame rate tampaknya terutama dibatasi oleh seberapa cepat ESP32 bisa menangkap gambar.
Saat mengukur FPS dengan skrip Python, saya menerima sekitar 50fps dari ESP32, dan baru-baru ini saya membeli router perjalanan untuk mencobanya di luar rumah.
Apakah bisa dikendalikan jarak jauh sambil melihat feed video? Kekhawatiran terbesar saya adalah feed itu mungkin terlalu lambat untuk menghindari rintangan pada sebagian besar kecepatan.
Kalau ada waktu, saya ingin menggabungkan keduanya agar bisa mengendalikan mobil sambil melihat feed kamera di display.
Bagi orang yang tidak perlu kacamata minus/plus atau memakai lensa kontak, kombinasi DJI O4 ‘lite’ dan goggles N3 adalah pilihan yang jauh lebih baik.
Karena artikelnya dari beberapa tahun lalu, sekarang mungkin ada cara yang lebih mudah atau lebih baik untuk mendapatkan hasil serupa: https://hackaday.com/2021/10/25/fast-indoor-robot-watches-ce...
Bentuknya sama sekali tidak seperti campuran anjing robot Boston Dynamics dan Terminator di film, tetapi sangat berguna untuk pekerjaan “membosankan” yang kurang mencolok, seperti memasang ranjau, meledakkan ranjau, atau mengantar sedikit perbekalan kepada prajurit yang bersembunyi di suatu tempat di garis depan.