ESP32 CAM

Da bereits viele GPIOs durch die Kamera bzw. die verbaute Blitz-LED belegt sind, stehen nur noch die folgenden GPIOs zur Verfügung.

GPIO Funktion genutzt für
0 Wird beim Booten zum Wechsel in den Flash-Modus benötigt. Auf LOW ziehen, um in den Flash-Modus zu gelangen. Flash / DIR M1
1 UART TX - Wird zum Flashen und für Debugging benötigt. Flash
2 Muss während des Starts LOW sein. Kann nur verwendet werden, wenn keine SD-Karte genutzt wird. DIR M2
3 UART RX - Wird zum Flashen und für Debugging benötigt. Flash
4 Ist durch Blitz-LED belegt. Könnte ggf. als Eingang verwendet werden. Blitz
12 Muss während des Starts auf LOW sein. Kann nur verwendet werden, wenn keine SD-Karte genutzt wird. PWM M1
13 nutzbar ohne SD-Karte PWM M2
14 nutzbar ohne SD-Karte I2C SDA
15 Muss während des Starts auf HIGH sein. Kann nur verwendet werden, wenn keine SD-Karte genutzt wird. I2C SCL
16 wow, einfach so nutzbar IR Receive

In der Tabelle ist bereits gut zu erkennen, dass die Anzahl der IOs stark eingeschränkt ist. Mit der oben genannten Konfiguration könnte der Roboter fahren und über I2C ein Display ansteuern und Abstandssensorik auslesen. Der IR Empfänger sollte direkt am uC angeschlossen sein (IR Receive), da dieser schnell abgefragt werden muss. Der IO für das Senden von IR Signalen fehlt bereits, müsste aber auch direkt am uC sein.
Mochte man weiterhin nur einen uC einsetzen, so müsste massiv von Port-Extendern für I2C gebrauch gemacht werden. Da diese relativ langsam sind, sollten „wichtige“ IOs direkt am uC angeschlossen sein.

Eine weitere Möglichkeit wäre einen zweiten uC als Port-Extender bzw. als Haupt-uC und den ESP32 Cam nur für die Kamera, BT und Wi-Fi Funktionalität zu verwenden. Preislich würde sich hier ein RP2040 anbieten. Diesen gibt es bei Ali-Express ab 2,65€ (auf Board). Somit könnte man auch eine relativ günstige Basisversion, ohne Fernsteuerung, realisieren.
Nachteil dieser Lösung ist, dass zwei uC programmiert bzw. die Schnittstelle zwischen diesen programmiert werden muss. Je nach SW-Architektur könnte das Hauptprogramm, welches auch durch die „Kinder“ erweitert wird, auf einem uC laufen (Master / Slave).

Siehe auch