- ESP32 RC Cars, ESP32-CAM tabanlı uzaktan kumandalı bir kamera sistemi olup WebSocket üzerinden gerçek zamanlı video akışı ile motor ve servo kontrolünü birlikte gerçekleştirir
- Python sunucu uygulaması WebSocket iletişimini yönetir ve tarayıcıda ESP32 cihazının görüntüsünü izleyip kontrol etmeyi sağlayan bir web arayüzü sunar
- Başlıca özellikler; ESP32-CAM’in canlı video akışı, WebSocket komut tabanlı motor-servo kontrolü, kontrol komutu alınmadığında varsayılan duruma döndüren otomatik zaman aşımı ve çok istemcili video kanvasıdır
- Donanım olarak AI Thinker veya uyumlu bir ESP32-CAM, GPIO’ya bağlı motor ve servo, kararlı bir 5V güç kaynağı ve bir Wi‑Fi ağı gerekir; SD kart isteğe bağlıdır
- Kontrol komutları
MOTOR:<speed>, SERVO:<angle>, CONTROL:<speed>:<angle> biçimindedir; sunucu, birden fazla ESP32 istemcisinin video karelerini ızgara halinde yerleştirip web arayüzüne akıtır
Proje genel bakışı
- ESP32 RC Cars, ESP32 tabanlı uzaktan kumandalı bir kamera sistemi örneğidir
- ESP32-CAM gerçek zamanlı görüntüyü WebSocket ile iletir, motor ve servo ise WebSocket komutlarıyla kontrol edilir
- Python sunucu uygulaması WebSocket iletişimini yönetir ve web arayüzü üzerinden ESP32 cihazlarını görüp kontrol etmeyi mümkün kılar
- Demo videosu: https://youtu.be/OubYFXmvA1E
Başlıca özellikler
- ESP32-CAM’den web sunucusuna canlı video akışı gönderir
- WebSocket komutlarıyla motor ve servo uzaktan kontrol edilir
- Belirli bir süre boyunca kontrol komutu gelmezse motor ve servo otomatik olarak varsayılan durumlarına döner
- Sunucu, birden fazla istemcinin video beslemesini dinamik olarak kanvasa yerleştirir
Donanım ve malzemeler
- Gerekli donanım
- ESP32-CAM, AI Thinker modülü veya uyumlu kart
- Uygun GPIO pinlerine bağlı motor ve servo
- ESP32-CAM için kararlı bir 5V güç kaynağı
- İletişim için Wi‑Fi ağı
- Diğer işlevler için gerekirse isteğe bağlı SD kart
- Kullanılan malzemeler AliExpress’ten alınan kit bileşenleridir
- Araç şasisi
- Elektronik hız kontrolcüsü
- 30A sürümü kullanılmıştır ve BEC çıkışının 5V 3A olması, ESC ve servoyu çalıştırmak için yeterli akımı sağlıyor gibi görünmüştür
- Pil yuvası
- 2 adet 18650 3.6V hücre veya 7.4V pil paketi
- Her ikisi de kullanılmıştır; hücreler başka projelerde daha esnek kullanım sağlar
- ESP32-CAM
- Harici antenli model çok önemlidir ve 170 derece balık gözü kamera kullanılmıştır
- Bluetooth gamepad
- PS4 kontrolcüsü kullanılmıştır
Kablolama düzeni
- Araç şasisine dahil olan servonun 3 pinli JST adaptörü çıkarılıp ESP32’ye bağlanabilmesi için 4 pinli JST fişe taşınmıştır
- Servonun artı ve eksi uçları birleştirilmiş, krimpleme aracıyla 3 pinli dişi JST fiş eklenmiştir
- ESC’nin beyaz kontrol kablosu 4 pinli JST fişe ve 3 pinli dişi fişe bağlanmıştır
Yazılım yapısı
- ESP32 kodunda kullanılan kütüphaneler
WiFi.h: Wi‑Fi bağlantısı
ArduinoWebsockets.h: WebSocket iletişimi
esp_camera.h: ESP32-CAM kamera kontrolü
ServoControl.h, Esc.h: servo ve motor kontrolü
Arduino.h: standart Arduino işlevleri
- Python sunucu bağımlılıkları aşağıdaki komutla kurulur
sudo apt install python3-aiohttp python3-opencv python3-numpy
Yapılandırma ve çalıştırma
- ESP32 ürün yazılımı yapılandırması
secrets.h içinde Wi‑Fi kimlik bilgileri ve WebSocket sunucu URL’si ayarlanır
#define WIFI_SSID "YourWiFiSSID"
#define WIFI_PASSWORD "YourWiFiPassword"
#define WS_SERVER_URL "ws://YourServerIP:Port"
- Kamera GPIO pinleri AI Thinker ESP32-CAM kartı için önceden yapılandırılmıştır
- Gerekirse motor ve servo pinleri donanım kurulumuna göre değiştirilir
- Python sunucu yapılandırması
- Sunucu betiği, web arayüzü için
index.html dosyasıyla aynı dizine yerleştirilir
- Sunucu aşağıdaki komutla çalıştırılır
python3 app.py
Kullanım ve WebSocket komutları
- ESP32 kullanım adımları
- Sağlanan sketch, Arduino IDE veya uyumlu bir platform ile ESP32-CAM’e yüklenir
- Wi‑Fi ve WebSocket sunucusu bağlantısının başarılı olup olmadığını doğrulamak için seri çıktı kontrol edilir
- Sunucu kullanım adımları
- Python sunucu betiği çalıştırılır
- Tarayıcıda web arayüzü açılarak canlı video akışı izlenir
- WebSocket bağlantısı üzerinden kontrol komutları gönderilir
- Desteklenen komutlar
MOTOR:<speed>: motor hızını ayarlar, aralık -255 ile 255
SERVO:<angle>: servo açısını ayarlar, aralık 0 ile 180
CONTROL:<speed>:<angle>: motor hızı ve servo açısını aynı anda kontrol eder
Çalışma ayrıntıları ve sorun giderme
- ESP32 başlatma aşamaları
- Belirlenen Wi‑Fi ağına bağlanır
- ESP32-CAM, video akışına uygun şekilde yapılandırılır
- Sunucuyla WebSocket bağlantısı kurulur
- Zaman aşımı işleme, belirli bir süre kontrol komutu gelmezse motor hızını
0a ve servo açısını 90a döndürür
- Python sunucusu birden fazla ESP32 istemcisiyle WebSocket üzerinden iletişim kurar
- Sunucu, gelen video karelerini işler, bunları ızgara biçiminde dinamik olarak yerleştirir ve web arayüzüne akıtır
- Bağlantı sorunu varsa
secrets.h içindeki Wi‑Fi kimlik bilgilerini kontrol edin; WebSocket sunucusunun çalıştığından ve erişilebilir olduğundan emin olun
- Video akışıyla ilgili sorunlarda ESP32-CAM’in güç beslemesinin uygun olduğunu ve kamera başlatma ayarlarını kontrol edin
- Proje MIT License ile yayımlanmıştır
1 yorum
Hacker News yorumları
Eski bir HTC Magic telefonu kamera + Wi‑Fi vericisi olarak kullanıp, seri port ve level shifter ile Arduino’ya bağlayarak servo ve RGB LED’i kontrol etmiştim.
Bağlantı çok stabil değildi ama epey eğlenceliydi; belki artık projeyi yeni nesil mikrodenetleyicilerle canlandırmanın zamanı gelmiştir.
Projeyi beğendiyseniz, uzaktan geliştirici arayan birine önermeniz en büyük yardım olur.
Asıl işim Ruby on Rails geliştiriciliği, ama robotik işlerini de değerlendirebilirim.
Şu yazı okunmaya değer: https://www.reddit.com/r/esp32/comments/r7kqtt/esp32cam_supe...
Bazı tavsiyeleri uygulayana kadar kare hızı oldukça kötüydü.
0Ω direnci yeniden lehimlemek neredeyse bir macera gibiydi ama sonuçta doğru pine bağladım; sonuç şöyle görünüyor: https://imgur.com/a/LJflZ80
Kullandığım antenin bağlantısını README’ye ekledim.
Temel yazılım, Bluetooth kontrolcü kütüphanesiyle yaklaşık 20 satır C koduyla kolayca başlatılabiliyor.
Daha sonra kullanımı kolaylaştırmak için özellikler ekledim; iki paleti iki stick ile kontrol etmek düşük hızlarda iyi ama iki drone motoru kullanıp neredeyse 20 km/sa hıza çıktığı için başka bir kontrol biçimi gerekiyordu.
Sonunda DualShock kontrolcünün tetikleriyle devir sınırlı doğrudan palet kontrolü yaptım; yüksek hızlı sürüşte ise sol stick’in yukarı/aşağı hareketini gaz, sağ stick’in sağ/sol hareketini direksiyon olarak kullanıp normal bir RC araba gibi sürülmesini sağladım.
Temel aldığım aynı 3D baskı modelinin videosu; hız 00:50’den itibaren iyi görünüyor: https://www.youtube.com/watch?v=3Mv_tDY89Zw
RC yapımını pek bilmiyorum; genelde nasıl kontrol ediliyor? PS4 kontrolcüsünü doğrudan ESP’ye bağlamak mı?
Bu projenin gecikmesinin ne düzeyde olduğunu merak ediyorum.
FPV quadcopter’larda video tarafı ise ayrışmış durumda. Bazıları sinyal koptuğunda tamamen kesilip yeniden bağlanmak yerine kademeli olarak kötüleştiği için analog kullanıyor; bazıları ise 802.11 tabanlı iletişim kullanıyor ve pratikte oldukça rekabetçi.
Örneğin Walksnail Goggles video bağlantısında 802.11 kullanıyor; çok açık ya da iyi belgelenmiş olmasa da Chris Rosser’ın çalışmaları gibi içini kurcalayanlar var.
Bu tür kurulumların gecikmesi, hızlı rekabetçi quadcopter yarışları için bile yeterli görünüyor.
[0] https://www.expresslrs.org
Ve: https://github.com/gyrex/CrystalVideo
Kare hızı genel olarak ESP32’nin görüntüyü ne kadar hızlı yakalayabildiğiyle sınırlı gibi.
Python betiğinde FPS ölçtüğümde ESP32’lerden yaklaşık 50fps aldım; yakın zamanda evin dışında denemek için bir seyahat router’ı satın aldım.
Video akışına bakarak uzaktan kontrol mümkün mü? En büyük endişem, çoğu hızda engellerden kaçınmak için fazla yavaş olacak gibi görünmesi.
Zaman bulursam ikisini birleştirip arabayı kontrol ederken ekranda kamera akışını da izlemeyi düşünüyorum.
Numaralı gözlüğe ihtiyacı olmayan ya da kontakt lens kullanan biri için DJI O4 “lite” ve N3 gözlük kombinasyonu çok daha iyi bir seçenek.
Birkaç yıl önceki bir yazı olduğu için bugün benzer sonuçlar daha kolay ya da daha iyi bir yöntemle elde edilebilir: https://hackaday.com/2021/10/25/fast-indoor-robot-watches-ce...
Filmlerdeki Boston Dynamics robot köpeği ile Terminator karışımı görüntülerden tamamen farklılar; ancak mayın döşeme, mayın patlatma, cephenin bir yerinde saklanan askere az miktarda ikmal taşıma gibi daha az göze çarpan “sıkıcı” işlerde çok kullanışlılar.