Raspberry Pi mit I2C Port Expander MCP23017 16 Relais schalten

5
7609
12 Relais with Extender_MCP23017
12 Relais with Extender_MCP23017

In diesem Beispiel haben wir einen Raspberry Pi 3 mit 3 Relaisboards über einen MCP23017 I2C Port Expander verbunden und schalten die Relais darüber.

Man kann so über einen MCP23017 16 Relais steuern. Über den I2C Port vom Raspberry Pi kann man bis zu 8 MCP23017 ansteuern (man kann dem MCP23017 8 verschiedene Adressen zuweisen). Somit könnte man ganz einfach 128 Relais steuern.

Achtung Raspberry Pi Strom:

Der Raspberry Pi hat nicht genügend Strom um 16 Relais zu schalten!! Man muss eine zusätzliche Stromversorgung anstecken. Wir haben ein zusätzliches Breadboard Netzteil angeschlossen.

Für die Steuerung der Relais mit dem Raspberry Pi über einen Port Expander MCP23017 muss am Raspberry Pi I2C aktiviert sein. Dies kann man die der raspi-config per Commandline machen oder über den Desktop Raspberry PI Configuration.

Raspberry Pi mit I2C
Raspberry Pi mit I2C

Weiters muss die Software WiringPi installiert sein. Ist im Normfall ebenfalls bereits bei aktuellen Images für den Raspberry PI installiert.

Der Schaltplan Raspberry Pi mit I2C Port Expander MCP23017 12 Relais.

Wir beschreiben hier nicht die genau Pinbelegung, welcher Pin von wo nach wo. Jeder kann sich selbst informieren, wenn er möchte, welcher Pin welche Funktion hat.
Zu beachten ist auch, dass diese Schaltung nur über sehr kurze Strecken funktioniert, da noch kein ULN2803 dazwischen haben. Diese Schaltung zeigen wir in einer anderen Anleitung.

12 Relais with Extender_MCP23017
12 Relais with Extender_MCP23017

Die Steuerung der Relais

Wenn sie die Kabel am Port Expander MCP23017 so angesteckt haben, wie auf unserm Plan, so hat der MCP23017 die Adresse 20.

Um zu überprüfen, ob der MCP23017 ansprechbar ist und er wirklich die Adresse 20 hat, geben sie diesen Befehl ein:

i2cdetect -y 1

 

i2cdetect -y 1
i2cdetect -y 1

Wie sie im Bild sehen, hat das System auf ein Gerät mit der Adresse 20 gefunden.

Es gibt nun verschiedene Möglichkeiten und Befehle um die neuen GPIO Ports über den MCP23017 anzusprechen.

Über die sehr komplizierte hexadezimal Code Ansteuerung
Beispiel:

i2cset -y 1 0x20 0x01 0x00   #alle Pins von GPB sind Output untere Seite

i2cset -y 1 0x20 0x00 0x00   #alle Pins von GPA sind Output obere Seite

Um genau zu wissen, welcher Hex-Code welchen Pin steuert, muss man auf dem Datenblatt vom Hersteller die einzelnen Hex-Codes ansehen. http://ww1.microchip.com/downloads/en/DeviceDoc/21952b.pdf

Wie welcher Pin zu Steueren ist findet man in der „SUMMARY OF REGISTERS ASSOCI

ATED WITH THE GPIO PORTS” Tabelle

Oder man steuert jeden einzelnen Pin mit einer Nummer durch dem gpio Befehl an.

Beispiel:

gpio -x mcp23017:100:0x20 mode 108 out

Erklärung:
mcp23017 = ist unser Port Expander MCP23017
100 = Die GPIOs beginnen bei der Nummer 100
0x20 = ist die Adresse von unserm MCP23017 (20)
mode = der Modus vom Pin wird bestimmt in oder out.
108 = ist die GPIO Nummer 8 am MCP23017 (der ganz links in der unteren Reihe)
out = ist ein Ausgang

gpio -x mcp23017:100:0x20 write 108 1

gpio -x mcp23017:100:0x20 write 108 0

Erklärung:
Diese beiden Befehle schalten den Pin 8 (108)

Häufigste Fehlerquelle ist die falsche GPIO Pin Nummer. Hier die Nummerierung.

Zu beachten ist, dies ist die Draufsicht so wie auf dem Breadboard! Der Schaltplan ist gespiegelt!

mcp23017-Pin-Belegung
mcp23017-Pin-Belegung

Die GPIO Pin Nummern beginnen bei 100, da wir dem mcp23017, welcher die Adresse 20 hat, die Startadresse 100 gegeben haben.

Würde man dem mcp23017 die Startadresse 200 zuweisen wie:

gpio -x mcp23017:200:0x20 write 208 0

So hätte der gleiche Pin, der zuerst die Nummer 108 hatte, hätte jetzt die Nummer 208.

I2C-Port-Expander-MCP23017
I2C-Port-Expander-MCP23017

Stabilität der Schaltung

Nach einigen Test kam es immer wieder zu einem Ausfall aller Relais. Besonders wenn man sehr schnell hintereinaner die Relais ein und ausschaltet. Plötzlich haben sich alle Relais abgeschaltet und mussten wieder auf OUT gestellt werden.
Ein weiterer Fehler war, wenn man die Stromzufuhr zur Lampe, welche über eines der Relais geschalten wurde, trennt und wieder angesteckt hat, viel plötzlich wieder die ganze Anlage aus.

Problem: Das verwendete Breadboard- Netzteil bringt keine konstante Spannung bei minimaler Schwankung der Stromzufuhr. Es handelte sich um ein 1 Euro- Breadboard- Netzteil.

Lösung: Die 5V Spannung kommt jetzt über ein externes Netzteil (ein PC ATX Netzteil). Damit läuft die Schaltung jetzt stabil.

Langzeittest: Leider fällt die Schaltung immer noch aus wenn 3 Relais-Boards angeschlossen sind. Mit 2 funktioniert es.

Erstellen der Programme mit Node-RED

Wer kein Programmierer ist, kann sich sehr einfach per Drag and Drop seine Programme und Schaltungen mit Node-RED erstellen. Node-RED ist ein Tool für das Internet der Dinge. Man kann damit so gut wie alles Programmieren und erstellen.

Man kann mit Node-RED verschiedene System verknüpfen und tolle Anwendungen erstellen. Node-RED ist bei den neuen Raspberry Images bereits installiert. Man muss es nur aktivieren.

Auch für MCP23017 I2C Port Expander kann damit Node-RED schaltungen Programmieren und auch gleich dazu die Weboberfläche zur bedienung erstellen.

Hier gibt es eine Anleitung für Node-RED und dem MCP23017 I2C Port Expander.

Die benötigten Einzelteile:

Affiliate Liks

Raspberry Pi 3

Breadboard

Relais

Breadboard Netzteil

Breadboardkabel

Port Expander MCP23017

(ULN2803)

 

5 KOMMENTARE

  1. Ich habe ein ähnliche Schaltung aufgebaut, allerdings mit MCP23018 (wegen Open Drain) und einem 16x aktive Low Relay Board. 15 Relays lassen sich (auch mit Belastung) problemlos Schalten und laufen seit Tagen stabil.
    Allerdings habe auch das Problem, dass die Kanäle bei Belastung eines Relais mit einer WW-Pumpe unmotiviert auf Input umschalten.
    Die Relais-Karte wird durch ein getrenntes Netzteil mit 12 V gespeist, daher können die ja wohl nicht auf den MCP23018 durchschlagen.
    Gibt es in der Sache irgendwelche neue Erkenntnisse?

    • ich habs gelöst. mit einem 470µF ELKO zwischen + und – vom MCP23017
      die zeit wirds zeigen ob das wirklich die lösung war. aber ich kann aktuell alles problemlos schalten was vorher unmöglich war

  2. Hi Jorge,
    ich hab 1:1 das gleiche Problem. Naja fast, ich verwende mcp23017.
    Relais Karten werden bei mir auch von einem externen Netzteil gespeist.

    Bist du schon weitergekommen?

  3. Der MCP23017 braucht einen Kondensator parallel zur Versorgungsspannung um längere Zeit stabil zu laufen. 470µF sind dafür deutlich zu viel und Elko ist sowieso eher ungeeignet für einen Abblockkondensator.
    100nF wären hier in etwa passend. Ich würde sogar noch einen 100Ohm Widerstand in Reihe setzen, dann hast du einen Tiefpass und bist bei großen Schwankungen besser gerüstet (z.B. Blitzschlag in der Nähe des Hauses).
    Lies mal hier nach:
    https://rn-wissen.de/wiki/index.php?title=Abblockkondensator#Welchen_Kondensatortyp_verwenden.3F
    MfG
    Michael

  4. Hallo
    Ich habe mir mit dem Raspberry pi 3 und 4 mcp23017 und 4 Relaiskarten mit je 16 Relais etwas gebaut. Es funktioniert soweit gut. Ich möchte die Mcp23017 über die GPIO steuern und werde nach den Angaben von oben nicht schlau. Wie muss ich das konfigurieren damit ich den Gpio direkt verwenden kann?

HINTERLASSEN SIE EINE ANTWORT

Please enter your comment!
Please enter your name here