Digitale Pins werden gefühlt immer genau dann knapp, wenn ein Projekt gerade Spaß macht. Relais, Ventile, Taster, LEDs, und plötzlich wird aus einem ESP ein Puzzle aus Kompromissen. Genau dafür ist der MCP23017 gedacht: ein I2C GPIO Expander, der dir 16 zusätzliche digitale Ein und Ausgänge liefert. Und das Beste: Du brauchst dafür am ESP nur SDA und SCL.
Wenn du erst das Video schauen willst, hier ist die passende Stelle. Danach kannst du hier im Beitrag in Ruhe Details nachlesen und dir den Beispiel Code kopieren.
Was ist der MCP23017 genau
Der MCP23017 ist ein 16 Bit I O Expander für den I2C Bus. Jeder der 16 Pins kann einzeln als Eingang oder Ausgang konfiguriert werden. Intern sind die Pins in zwei Ports aufgeteilt: Port A und Port B, jeweils 8 Pins.
- ✅ 16 digitale GPIOs zusätzlich über I2C, statt noch einen größeren ESP zu erzwingen
- ✅ Pro Pin frei wählbar: Input oder Output
- ✅ Zwei Ports: GPA0 bis GPA7 und GPB0 bis GPB7
- ✅ Bis zu 8 Chips an einem I2C Bus per A0 A1 A2 Adresspins
- 📌 Zwei Interrupt Pins INTA und INTB sind am Chip vorhanden
Wichtig: Der MCP23017 ist für digitale Signale gedacht. Für schnelles Dimmen oder zeitkritische Signale ist er nicht die erste Wahl.
Pin Mapping in ESPHome: Nummern 0 bis 15
In ESPHome sprichst du die Pins am MCP nicht als GPA3 oder GPB2 an, sondern über number.
Port A ist 0 bis 7. Port B ist 8 bis 15.
| ESPHome number | MCP Pin | Port |
|---|---|---|
| 0 | GPA0 | A |
| 1 | GPA1 | A |
| 2 | GPA2 | A |
| 3 | GPA3 | A |
| 4 | GPA4 | A |
| 5 | GPA5 | A |
| 6 | GPA6 | A |
| 7 | GPA7 | A |
| 8 | GPB0 | B |
| 9 | GPB1 | B |
| 10 | GPB2 | B |
| 11 | GPB3 | B |
| 12 | GPB4 | B |
| 13 | GPB5 | B |
| 14 | GPB6 | B |
| 15 | GPB7 | B |
I2C Adresse: 0x20 bis 0x27
Die I2C Adresse wird über die drei Hardware Adresspins A2, A1 und A0 festgelegt. Damit sind 8 mögliche Adressen verfügbar, also bis zu 8 MCP23017 an einem I2C Bus. Standard ist 0x20, wenn A0 bis A2 auf GND liegen.
| A2 | A1 | A0 | Adresse |
|---|---|---|---|
| 0 | 0 | 0 | 0x20 |
| 0 | 0 | 1 | 0x21 |
| 0 | 1 | 0 | 0x22 |
| 0 | 1 | 1 | 0x23 |
| 1 | 0 | 0 | 0x24 |
| 1 | 0 | 1 | 0x25 |
| 1 | 1 | 0 | 0x26 |
| 1 | 1 | 1 | 0x27 |

