Forum: Mikrocontroller und Digitale Elektronik GPIO-Mangel am ESP8266


von Ben B. (fataldiskerror)


Lesenswert?

Moin liebes Forum,

in der Hoffnung auf eine konstruktive (und Heimwerker-gerechte) Debatte 
wollte ich mal mein Problem schildern.

Ich baue mit meinem Sohn (13) eine Steuerung für RGB-LED-Streifen. Die 
hat er am Bett, am Schreibtisch und am selbstgebauten Kopfhörer-Halter. 
Als erster Low-Tech-Entwurf sind alle 3 LED-Steifen zusammengeschlossen, 
werden über Transistoren versorgt, welche wiederum von einem Arduino 
Nano mit PWM angesteuert werden. Dazu gibt es 3 Potis für R, G und B und 
schon lehrt das Kind auch etwas über Farblehre ;-) Soweit ist alles ganz 
toll!

Nun wollen wir einen Schritt weiter gehen, und alle Steifen einzeln 
ansteuern. Das wäre mit 9 Potis auch möglich, aber langweilig. Daher die 
Idee eines "RGB-Controllers". USPs (Unique Selling Points):
- Kindgerecht ~13 (!!!)
- ein kleines Display zur Menü-Führung
- ein Rotary-Encoder zur Steuerung/Navigation in den Menüs
- eine "Vorschau"-LED (==RGB-PWM)
- 3xRGB-PWM für die Treiber-Transistoren der LED-Streifen
- WLAN für Webinterface / Android App

Beim Display dachte ich erst an so ein 128*64 OLED-Ding, aber das ist 
bloß einfarbig und macht die Navigation schwierig. Ich habe kurzerhand 
ein kleines TFT 1,3"(240*240) bzw 0,96"(160*80) besorgt. Welches zum 
Einsatz kommt weiß ich noch nicht. Schnittstelle: SPI (I²C habe ich in 
der Größe nicht für wenige Euros gefunden)

Der Rotary-Encoder (mit Klick-Funktion) braucht 3 Pins am µC.

Die PWM habe ich über so einen Servo-Controller (PCA9685) gemacht. Über 
I²C kann ich da bis zu 16 PWM-Kanäle steuern. Bei 4*3=12 Kanälen passt 
das (3 Streifen + 1 Vorschau-LED á 3 Kanäle).

Bei Wlan ist der ESP8266 natürlich dirkt im Kopf. Er ist günstig und ein 
paar ESP-12-E Module liegen noch in meiner Schublade.

Einzeln funktioniert jede Komponente ganz hervorragend am ESP. Das 
Problem ist: der ESP hat zu wenig (nutzbare) GPIOs, um alles 
gleichzeitig anzuschließen. Soweit meine "Fakten", ab hier beginnt der 
zu diskutierende Bereich - bitte nicht den ganzen Aufbau kritisieren und 
durch andere Komponenten ersetzen wollen - es ist und bleibt ein 
Arduino/ESP-Projekt in der Arduino IDE für und mit meinem Sohn. Ich kann 
und möchte nicht auf PIC oder FPGAs oder sonstwas umsteigen; das wäre 
nicht kindgerecht.

Nun gibt es mit dem MCP23017 einen 16-Bit Port-Expander über I²C, der 
aber "unglaublich teuer" (~5€ mit Versand aus China für den nackten 
Chip; beim großen A noch teurer) ist. Gestolpert bin ich auch noch über 
den PCF8574, ebenfalls I²C, 8-Bit Port-Expander. Der ist als 
Breakout-Board recht günstig. Wobei ich aber nicht weiß, ob bei beiden 
Chips überhaupt ein Breakout-Board nötig ist, da die externe Beschaltung 
recht spartanisch zu sein scheint... Bei beiden Varianten weiß ich auch 
nicht (da mangelnde Erfahrung), ob ich diese Ports dann für SPI nutzen 
könnte, um das TFT anzuschließen... Hier wäre eure Erfahrung Gold wert!

Als weitere Idee schwebt mir vor, den derzeit verbauten Arduino Nano mit 
dem Display und dem Rotary-Encoder für das "Frontend" zu nutzen und 
diesen dann über I²C oder so mit dem Hauptprogramm auf dem ESP 
kommunizieren zu lassen. Klingt irgendwie auch nicht schlecht...

Was meint ihr? Habe ich etwas grundlegend übersehen oder habt ihr DEN 
(kostengünstigen) Chip schlechthin, der meinen Port-Mangel beseitigt?

Ach, und ich werde wohl eh 3,3V und 5V haben und auch Pegelwandler 
nutzen können, falls das jemand anmerken möchte. Alles vorhanden ;-)

Dank & Gruß
Ben

von Chris (Gast)


Lesenswert?

Neben den Port Extendern hat TI zum Beispiel mit dem TLC59116 einen LED 
Treiber für I2C. Oder warum nimmst du nicht gleich WS2812 LEDs? Die 
brauchen nur einen Pin für die Daten und werden in Reihe verschaltet.

von Ein Kommentar (Gast)


Lesenswert?

Ähmm... du verbringst Monate mit so einem Projekt. Aber 5€ sind dir zu 
viel - da suchst du lieber stundenlang nach einer anderen Lösung? Das 
lohnt sich doch nicht.

Außerdem, ganz egal, wie lange du dich informiert und wie du dich 
entscheidest - die Hälfte der gekauften Komponenten landet in der Kiste 
für zukünftige Projekte.

von Frank K. (fchk)


Lesenswert?

Wenn Du Pinmangel hast, wäre doch ein Arduino Mega 2560 als 5V-System 
oder ein Arduino Due als 3.3V System die passende Wahl. Da hast Du dann 
genug Pins, um ganz ohne IO-Expander auszukommen. Der ESP wäre dann nur 
noch WLAN-Gateway.

https://store.arduino.cc/products/arduino-mega-2560-rev3
https://store.arduino.cc/collections/boards/products/arduino-due

fchk

von Brain 2.0 (Gast)


Lesenswert?

Ben B. schrieb:
> Bei beiden Varianten weiß ich auch
> nicht (da mangelnde Erfahrung), ob ich diese Ports dann für SPI nutzen
> könnte, um das TFT anzuschließen... Hier wäre eure Erfahrung Gold wert!

Wieso SPI ?
Du möchtest aus den I2C-Expandern einen SPI-Port machen ?
Das geht nicht.
SPI ist eine Hardware Schnittstelle des Controllers.
Du kannst doch SPI für das Display und I2C für den Expander nutzen. Wo 
ist da dein Problem?

von Wolfgang (Gast)


Lesenswert?

Ben B. schrieb:
> Einzeln funktioniert jede Komponente ganz hervorragend am ESP. Das
> Problem ist: der ESP hat zu wenig (nutzbare) GPIOs, um alles
> gleichzeitig anzuschließen.

Vielleicht fehlt es nur am richtigen Anschlusskonzept.
Was willst du, nachdem du keine 9 Potis (oder besser Drehencoder ?) 
werden sollen, alles anschließen?

von Ben B. (fataldiskerror)


Lesenswert?

Chris schrieb:
> Neben den Port Extendern hat TI zum Beispiel mit dem TLC59116 einen LED
> Treiber für I2C. Oder warum nimmst du nicht gleich WS2812 LEDs? Die
> brauchen nur einen Pin für die Daten und werden in Reihe verschaltet.

Weil es die LED-Streifen schon gibt und sie verbaut sind ;-)

Ein Kommentar schrieb:
> Ähmm... du verbringst Monate mit so einem Projekt. Aber 5€ sind dir zu
> viel - da suchst du lieber stundenlang nach einer anderen Lösung? Das
> lohnt sich doch nicht.
>
> Außerdem, ganz egal, wie lange du dich informiert und wie du dich
> entscheidest - die Hälfte der gekauften Komponenten landet in der Kiste
> für zukünftige Projekte.

Du hast im Grunde vollkommen Recht. Ich kann es nicht beschwören, aber 
ich war der Meinung, vor 2-3 Wochen da eher Preise um die 20€ gesehen zu 
haben... Als ich eben die Preise nochmal angeschaut hatte dachte ich 
auch so für mich "hmmm, warum habe ich die 5€ nicht ausgegeben???"

Bleibt die Frage: Könnte ich die Ports dann für SPI nutzen? also 
sozusagen SPI over I²C ;-)

Frank K. schrieb:
> Wenn Du Pinmangel hast, wäre doch ein Arduino Mega 2560 als 5V-System
> oder ein Arduino Due als 3.3V System die passende Wahl. Da hast Du dann
> genug Pins, um ganz ohne IO-Expander auszukommen. Der ESP wäre dann nur
> noch WLAN-Gateway.
>
> https://store.arduino.cc/products/arduino-mega-2560-rev3
> https://store.arduino.cc/collections/boards/products/arduino-due
>
> fchk

Auch eine interessante Idee! Danke!

von Stefan F. (Gast)


Lesenswert?

Dein ESP8266 hat I²C und SPI. Alles andere kannst du über Portexpander 
daran anschließen. Wenn die 5€ kosten dann ist das halt so, dafür war 
der Mikrocontroller billig.

Klar kann man das Programm auch auf zwei Mikrocontroller-Board 
verteilen. Das wird aber weder einfacher noch billiger. Schreibe dir die 
vor- und Nachteile auf und schlafe nochmal eine Nach darüber.

Ich nehme an, dass die meisten hier auf einen ESP32 wechseln würden, 
wenn sie mehr Pins brauchen und keine Portexpander verwenden wollen.

von Brain 2.0 (Gast)


Lesenswert?

Ben B. schrieb:
> Bleibt die Frage: Könnte ich die Ports dann für SPI nutzen? also
> sozusagen SPI over I²C ;-)

Das hatte ich dir schon beantwortet.
Aber gern nochmal, nein das geht nicht.

von Ben B. (fataldiskerror)


Lesenswert?

Brain 2.0 schrieb:
> Das hatte ich dir schon beantwortet.
> Aber gern nochmal, nein das geht nicht.

Jau, danke! Ich hatte angefangen auf verschiedene Kommentare 
gleichzeitig zu antworten und wurde dann irl noch einmal rausgezogen, 
daher hatte ich deinen Kommentar noch nicht gelesen, als ich meine 
(Nach-)Frage geschrieben hatte.

Ich hatte ganz naiv überlegt, ob es wohl sowas wie Software-SPI geben 
könnte, daher die konkrete Nachfrage. Aber ich merke selbst, dass solche 
Ideen das ganze nur unnötig verkomplizieren. Daher: alles klar, habs 
kapiert ;-) Danke!

von Stefan F. (Gast)


Lesenswert?

Ben B. schrieb:
> Ich hatte ganz naiv überlegt, ob es wohl sowas wie Software-SPI geben
> könnte

Ja schon aber viel langsamer. Über den Portexpander sogar sehr langsam.

von Brain 2.0 (Gast)


Lesenswert?

Soft SPI gibt es. Aber ob du da den I2C-Expander zu verwenden kannst, 
bin ich nicht sicher.
Ich würde davon absehen und ganz gewöhnlich Hardware SPI vom ESP nehmen 
und dazu I2C für den Expander. Das funktioniert sicher.

von Ben B. (fataldiskerror)


Lesenswert?

Stefan ⛄ F. schrieb:
> Dein ESP8266 hat I²C und SPI. Alles andere kannst du über Portexpander
> daran anschließen. Wenn die 5€ kosten dann ist das halt so, dafür war
> der Mikrocontroller billig.

Das stimmt wohl. Wie gesagt, ich hatte irgendwie im Kopf, dass ich den 
Chip neulich für 20€ gesehen hätte und das hätte ich etwas arg teuer 
gefunden. Als ich vorhin den Preis von 5€ rausgesucht hatte, habe ich 
nicht recht nachgedacht, als ich das Preis-Argument gebracht hatte.

> Klar kann man das Programm auch auf zwei Mikrocontroller-Board
> verteilen. Das wird aber weder einfacher noch billiger. Schreibe dir die
> vor- und Nachteile auf und schlafe nochmal eine Nach darüber.

Jo, mit all den  guten Ratschlägen hier komme ich bestimmt zu einer 
guten Lösung!

> Ich nehme an, dass die meisten hier auf einen ESP32 wechseln würden,
> wenn sie mehr Pins brauchen und keine Portexpander verwenden wollen.

Einen ESP32 habe ich in der Tat noch in der Bastelkiste... Könnte 
letzten Endes die einfachste möglichkeit sein. Ich bin da auch ein 
bißchen verbohrt, da der ESP8266 mit seinen GPIOs und was bei Boot 
high/low sein muss ja etwas speziell ist. SPI und i²C gleichzeitig 
sollte ja gehen, wenn GPIO15 (==CS für SPI) mit 4k7 oder so auf low 
liegt. Ich hatte nur den Rotary-Encoder nicht mehr unterbringen können, 
weil 0, 2 und 16 sich da so anstellen...

von Ben B. (fataldiskerror)


Lesenswert?

Ich danke euch allen! Das waren schnelle, hilfreiche Kommentare und 
Ideen! Gute Kritik mag ich und stoppt diesen Scheuklappen-Blick, bei dem 
man ein Problem so unbedingt auf eine Art lösen will, dass man die 
anderen Lösungen nicht sieht. Ich versuche jetzt letzten Endes wohl mal 
den Portexpander und parallel den ESP32, bevor ich meinen Sohn wieder 
dazu hole (nur um selbst noch ein bißchen mehr zu lernen ;-) )

Viele Grüße und einen schönen Feiertag!
Ben

von K. S. (the_yrr)


Lesenswert?

kannst du nicht den uart deaktivieren und gpio 1,2,3 für den encoder 
benutzen? falls du den uart benötigst, sollte der encoder nicht stören, 
solange er nicht betätigt wird.

2 pin für iic, 4 für spi (clock, data, chip select, register select)
macht in summe genau 9 pins.


alternativ wäre esp32 wahrscheinlich das einfachste, oder halt doch ein 
iic display (oder ein spi led treiber, spart aber dank zusätzlichem CS 
nur einen pin)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.