• Erste Schritte
  • Hardware & GPIO
  • Projekte
  • Software
    • Webserver
  • Arduino & ESP8266
  • Hausautomatisierung
  • Sonstiges
    • News
Facebook Twitter YouTube
Tutorials for Raspberry Pi Tutorials for Raspberry Pi
  • Einstieg
    • Erste Schritte
      • Raspberry Pi 3 Einstieg - Starter KitWas brauche und wie starte ich? – Raspberry Pi Einstieg
    • Einrichtung
      • microsd_karte_menuRaspbian Betriebssystem auf eine SD Karte flashen – Einfach & Schnell
      • wlanbluetooth_menuWLAN und Bluetooth einrichten – Raspberry Pi 4
      • wifi_menuWLAN Stick installieren und einrichten – Alternative
      • bash_menuSSH Zugriff einrichten via Putty – Kommandozeilen Zugriff
      • rdp_menuRemotedesktop Verbindung aufbauen – Fernsteuerung
    • Einsteiger Projekte
      • Sinnvolles Raspberry Pi Zubehör
      • 15 Raspberry Pi Projekte für Anfänger
      • Ampelschaltung mit GPIOs
      • GPIOs mit Port Expander erweitern
      • Elektronischer Würfel
      • 13 tolle Projekte für Kinder und Jugendliche
      • Roboter selber bauen
      • In Visual Studio Code mit C++ programmieren
      • Wünsch dir ein Tutorial
    • Programmieren lernen
      • Teil 1: Einführung
      • Teil 2: GPIOs steuern
      • Teil 3: GUI erstellen
      • Teil 4: PWM
      • C# GUI Apps entwickeln
  • Hardware & GPIO
    • 50 der wichtigsten Raspberry Pi Sensoren und Module – Aufgelistet mit Links zu den TutorialsRaspberry Pi Sensoren
    • Beliebte Tutorials
      • Raspberry Pi Luftfeuchtigkeit/Temperatur SensorLuftfeuchtigkeit und Temperatur messen
      • Raspberry Pi WS2801B RGB LED Streifen anschließen und steuernWS2801 RGB LED Streifen anschließen und steuern
      • Raspberry Pi Funksteckdosen (433Mhz)Raspberry Pi Funksteckdosen (433Mhz)Funksteckdosen (433MHz) steuern
      • Raspberry Pi Relais ModulRaspberry Pi: Relais-Schalter per GPIO steuern
      • Raspberry Pi Servo MotorRaspberry Pi Servo Motor Steuerung
      • Amazon-Alexa-deutsch-auf-dem-Raspberry-Pi-installierenAmazon Alexa (Deutsch) auf dem installieren
      • Entfernung messen mit Ultraschallsensor HC-SR04 – Raspberry PiEntfernung messen mit Ultraschallsensor HC-SR04
      • 71-M-PU7vML.-S3L1500-Raspberry Pi’s über 433 MHz Funk kommunizieren
      • Raspberry Pi PIR Motion SensorBewegungsmelder PIR anschließen und steuern
      • Raspberry Pi USB Boot per Stick oder SSD Festplatte einrichtenUSB Boot per Stick oder SSD Festplatte
      • Analog
        • Raspberry Pi MCP3008 ADCMCP3008: Am Raspberry Pi analoge Signale auslesen
        • Raspberry Pi Gas Sensor MQ-2Raspberry Pi Gas Sensor (MQ-X) konfigurieren und auslesen
        • Raspberry Pi PulsmesserRaspberry Pi Pulsmesser: Herzfrequenz messen
        • Joystick am Raspberry Pi benutzen (mit MCP3008)Joystick am Raspberry Pi benutzen (mit MCP3008)
        • infrarot sharp distance senserInfrarot Abstandsmessung mit dem Raspberry Pi
        • Raspberry Pi Drehregler - Rotary EncoderKY040 Drehregler als Lautstärkeregler für den Raspberry Pi
        • Easpberry Pi Soil SensorBodenfeuchtigkeit mit dem Raspberry Pi messen
        • Raspberry Pi KeypadRaspberry Pi Keypad anschließen – Codeschloss
        • Raspberry Pi door sensorÜberwachung von Fenstern und Türen mit dem Raspberry Pi und Reed-Relais
        • Raspberry Pi Fotowiderstand HelligkeitssensorFotowiderstand (Helligkeitssensor) am Raspberry Pi
        • Raspberry Pi Waage selber bauen (mit Gewichtssensor HX711)Raspberry Pi Waage selber bauen (mit Gewichtssensor HX711)
      • Funk
        • 71-M-PU7vML.-S3L1500-Raspberry Pi’s über 433 MHz Funk kommunizieren lassen
        • Remote Control Raspberry Pi 433Mhz Radio TransmitterRaspberry Pi mit 433Mhz Funksender fernsteuern
        • Raspberry Pi Funksteckdosen (433Mhz)Raspberry Pi Funksteckdosen (433Mhz)Raspberry Pi Funksteckdosen (433MHz) steuern
        • Raspberry Pi MiFlora - Xiaomi Pflanzensensor in OpenHAB einbindenMiFlora – Xiaomi Pflanzensensor ins Smart Home einbinden
        • Raspberry Pi RFID RC522 TüröffnerRaspberry Pi RFID RC522 Tags auslesen (NFC)
        • Funkkommunikation zwischen Raspberry Pi's und Arduinos (2.4 GHz)Funkkommunikation (2.4 GHz): Arduino & Raspberry Pi
        • Raspberry Pi Radio ReceiverRaspberry Pi als Radioempfänger benutzen
        • Raspberry Pi Xbox 360 Wireless ControllerRaspberry Pi mittels Xbox 360 Controller steuern
        • Raspberry Pi GSM Modul - Huawei Internet SticksRaspberry Pi GSM Modul – Mobiles Internet
        • Raspberry Pi Bluetooth DatentransferRaspberry Pi Bluetooth Datentransfer zum Smartphone
      • Infrarot & Laser
        • Raspberry Pi Infrarot FernbedienungRaspberry Pi: Per IR Remote Befehle ausführen
        • infrarot sharp distance senserInfrarot Abstandsmessung mit dem Raspberry Pi
        • Raspberry Pi Laser Lichtschranke für weite DistanzenRaspberry Pi Laser Lichtschranke für weite Distanzen
        • Infrarot Raspberry Pi FernbedienungInfrarot Steuerung einrichten
        • Raspberry Pi Infrarot Lichtschranke bauen und Geschwindigkeit messenRaspberry Pi Infrarot Lichtschranke bauen
        • Raspberry Pi Fotowiderstand HelligkeitssensorFotowiderstand (Helligkeitssensor) am Raspberry Pi
      • Temperatur & Navigation
        • Raspberry Pi Luftfeuchtigkeit/Temperatur SensorRaspberry Pi: Luftfeuchtigkeit und Temperatur messen
        • Measuring Temperature with a Raspberry Pi Temperature Sensor (1-Wire)Raspberry Pi Temperatursensor (1-Wire): Temperatur messen
        • Raspberry Pi BMP180 SensorRaspberry Pi und I2C Luftdrucksensor BMP180
        • Raspberry Pi RTC Real Time ClockReal Time Clock Modul steuern
        • Rotation und Beschleunigung mit dem Raspberry Pi messenRotation und Beschleunigung mit dem Raspberry Pi messen
        • Raspberry Pi GPS ModulRaspberry Pi GPS Ortungs- / Navigationsgerät bauen
        • Raspberry Pi Kompass selber bauenRaspberry Pi Kompass selber bauen (HMC5883L)
        • Kontaktlosen Infrarot-Temperatursensor MLX90614 am Raspberry Pi auslesenMLX90614 – Kontaktlos Temperaturen messen
      • Displays
        • Raspberrry Pi HD44780 I2CHD44780 LCD Display per I2C ansteuern
        • Raspbery Pi LCD DisplayRaspberry Pi LCD Display: 16×2 Zeichen anzeigen
        • DisplayTipps & Tricks zum offiziellen 7″ Raspberry Pi Touchscreen
        • Raspberry Pi TouchscreenTestbericht zum 7″ Raspberry Pi Touchscreen Display
        • LCD Touch Display (3.2″) am Raspberry PiLCD Touch Display (3.2″) am Raspberry Pi
        • tft lcd touch displayRaspberry Pi LCD Touch Display Teil 2 – Anpassungen
        • Raspberry Pi LED MAX7219 Dot Matrix – ProjektübersichtRaspberry Pi LED Matrix – Projektübersicht
        • Raspberry Pi 7 Segment Anzeige Kathode mit MAX7219Raspberry Pi: 7 Segment Anzeigen mit MAX7219 steuern (Kathode)
        • 7 Segment Anzeige (Anode) mit MAX7219 MAX7221 und Raspberry Pi7 Segment Anzeige mit MAX7219 am Raspberry Pi (Anode)
        • Raspberry Pi Tablet Raspad TestberichtRaspberry Pi Tablet „Sunfounder RasPad“ Testbericht
      • Motoren & Sonstige
        • Raspberry Pi Stepper Motor Control with L293D / ULN2003ARaspberry Pi Schrittmotor ansteuern
        • Raspberry Pi Servo MotorRaspberry Pi Servo Motor Steuerung
        • Raspberry Pi PCA9685 mehrere Servos gleichzeitig steuernMehrere Servo Motoren per Raspberry Pi steuern
        • Raspberry Pi PIR Motion SensorBewegungsmelder PIR anschließen und steuern
        • How to use a Raspberry Pi Fingerprint Sensor for AuthenticationRaspberry Pi Fingerprint Sensor zur Authentifizierung nutzen
        • Raspberry Pi Akku AdapterRaspberry Pi mit Akkus/Batterien betreiben
        • Entfernung messen mit Ultraschallsensor HC-SR04 – Raspberry PiEntfernung messen mit Ultraschallsensor HC-SR04
        • Raspberry Pi WS2801B RGB LED Streifen anschließen und steuernWS2801 RGB LED Streifen anschließen und steuern
        • Raspberry Pi WS2812 RGB LED StripWS2812 RGB LED Streifen per Raspberry Pi steuern
        • Raspberry Pi Überwachungskamera LivestreamÜberwachungskamera Livestream einrichten
        • NoIRAufnahmen mit dem offiziellen Kamera Modul
        • Raspberry Pi Zero - establishing an Ethernet connection (ENC28J60)Raspberry Pi Zero – Ethernet Verbindung
  • Software
    • Webserver Installation
      • apache2_menu25Teil 1 – Apache2
      • php_menu25Teil 2 – PHP 5
      • mysql_menu25Teil 3 – MySQL
      • phpmyadmin_menu25Teil 4 – phpMyAdmin
      • ftp_menu25Teil 5 – FTP Server
      • dns_menu25Teil 6 – DNS Server via No-IP
      • home_menu25Homeverzeichnis ändern
      • share_25Samba Server: Dateien im Netzwerk teilen
      • nodejs_menu25Node.js Webserver installieren und GPIOs schalten
      • ssl_menu25SSL Zertifikat kostenlos mit Let’s Encrypt
      • wordpress_25Eigenen WordPress-Server einrichten
      • cloud-25Nextcloud auf dem Raspberry Pi installieren
    • Entertainment
      • led_menu25Raspberry Pi Ambilight für alle Geräte mit OSMC selber bauen
      • amazon_menu25Amazon Alexa (Deutsch) auf dem Raspberry Pi installieren
      • controller_25Raspberry Pi RetroPie – Spielekonsole selber bauen
      • kodi_menu25Mediencenter Raspbmc als SmartTV mit dem Raspberry Pi
      • android_25Android TV Box zum selber bauen
      • apple-2316234_640Raspberry Pi als AirPlay-Empfänger
      • jukebox_menu25Raspberry Pi als Jukebox (Spotify, Soundcloud, TuneIn, uvm.)
      • steam_25Steam Spiele streamen
      • minecraft_menu25Raspberry Pi Minecraft Server
      • youtube_25YouTube Live Streaming einrichten
      • qr-code-tutorials-raspberrypi.de_25Raspberry Pi QR / Barcode Scanner
    • Fernsteuerung
      • rdp_menuRaspberry Pi Remotedesktop Verbindung
      • ssh_menu25SSH Zugriff einrichten via Putty (Windows)
      • vnc_menu25Raspberry Pi mittels VNC fernsteuern
      • welcome_menu25SSH Terminal Begrüßung ändern
      • telegram1_menu25Telegram Messenger auf dem RaspberryPi
      • telegram2_menu25Mit Telegram Messenger Raspberry Pi steuern
      • bluet_menu25Raspberry Pi Bluetooth Datentransfer zum Smartphone
      • alexa_voice_25Eigenen Raspberry Pi Alexa Skill bauen
      • microphone_25Sprachsteuerung selber bauen
      • mqtt_25MQTT Broker/Client Funkkommunikation
      • mail_25Vom Raspberry Pi Emails senden
      • twitter_25Per Twitter Bot Nachrichten posten
    • Weitere
      • loggen_menu25Sensordaten mit ThingSpeak loggen und auswerten
      • mysql_datalogger25Per lokaler MySQL Datenbank zum Raspberry Pi Datenlogger
      • opencv_menu25OpenCV auf dem Raspberry Pi installieren
      • arduino_menu30tWiringPi installieren & Pinbelegung (Raspberry Pi)
      • radio_menu25Raspberry Pi als Radio Sendestation
      • win10_menu25Windows 10 IoT auf dem Raspberry Pi installieren
      • printer_25Drucker einrichten und per Knopfdruck Bilder drucken
      • gsm_menu25Raspberry Pi GSM Modul – Mobiles Internet (LTE, 3G, UMTS)
      • autostart_menu25Autostart: Programm automatisch starten lassen
      • machine-learning-25Raspberry Pi Machine Learning erlernen
  • Projekte
      • roboter_menu30tRoboter
        • Raspberry Pi Roboter ProjektRaspberry Pi Roboter Projektübersicht
        • Raspberry Pi Roboter Bausatz fertigTeil 1: Zusammenbau
        • Raspberry Pi Roboter - Linien folgenTeil 2: Linien folgen lassen
        • Raspberry Pi Roboter per Infrarot Fernbedienung steuernTeil 3: Per Infrarot Fernbedienung steuern
        • Raspberry Pi Roboter: Ultraschall AutopilotTeil 4: Automatisch Hindernissen ausweichen
        • Raspberry Pi Roboter der eigenen Stimme folgen lassenTeil 5: Der eigenen Stimme folgen lassen
        • Raspberry Pi Roboter mit Xbox 360 Controller fernsteuernTeil 6: Mit Xbox 360 Controller Roboter fernsteuern
        • Raspberry Pi Robot Arm 6DOF6-Gelenkigen Roboter Arm am Raspberry Pi betreiben (6 DOF)
      • led_menu30LED Matrix
        • Raspberry Pi LED MAX7219 Dot Matrix – ProjektübersichtMAX7219 LED Matrix – Projektübersicht
        • 8×8 LED Dot Matrix Parts8×8 LED Matrix – Zusammenbau und Installation
        • Raspberry Pi Bibliothek für mehrzeilige m x n MAX7219 LED MatrizenBibliothek für mehrzeilige m x n MAX7219 LED Matrizen
        • Graphiken auf mehrzeiligen Raspberry Pi LED Matrizen zeichnenGraphiken auf mehrzeiligen Raspberry Pi LED Matrizen zeichnen
        • Pong auf MAX7219 Matrizen spielen (mit Joystick) – Raspberry PiPong auf MAX7219 Matrizen spielen (mit Joystick)
        • Snake auf Raspberry Pi MAX7219 Matrizen spielenSnake auf Raspberry Pi MAX7219 Matrizen spielen
        • 7 Segment Anzeige (Anode) mit MAX7219 MAX7221 und Raspberry Pi7 Segment Anzeige (Anode) mit MAX7219/MAX7221
        • Raspberry Pi 7 Segment Anzeige Kathode mit MAX7219Raspberry Pi: 7 Segment Anzeigen mit MAX7219 steuern (Kathode)
      • wetterstation_menu30Wetterstation
        • Raspberry Pi Wetterstation mit OpenHAB 2 bauenEigene Raspberry Pi Wetterstation mit OpenHAB 2 bauen
        • Raspberry Pi Luftfeuchtigkeit/Temperatur SensorLuftfeuchtigkeit und Temperatur messen
        • raspberry_pi_thingspeak_daten_loggenSensordaten mit ThingSpeak loggen und auswerten
        • Raspberry Pi BMP180 SensorRaspberry Pi und I2C Luftdrucksensor BMP180
        • Measuring Temperature with a Raspberry Pi Temperature Sensor (1-Wire)Raspberry Pi Temperatursensor (1-Wire): Temperatur messen
        • ESP8266 NodeMCU Außenposten-Wetterstation für den Raspberry PiESP8266 Wetterstation Außenposten für den Raspberry Pi
        • Raspberry Pi Gas Sensor MQ-2Raspberry Pi Gas Sensor (MQ-X) konfigurieren und auslesen
      • arduino_menu30tArduino & ESP8266
        • ESP8266 Microcontroller BoardEinführung & Programmierung des ESP8266 NodeMCU Boards
        • Raspberry Pi + ESP8266 NodeMCU: Per WLAN Daten sendenRaspberry Pi + ESP8266 NodeMCU: Per WLAN Daten senden
        • ESP8266 NodeMCU Außenposten-Wetterstation für den Raspberry PiESP8266 Wetterstation Außenposten für den Raspberry Pi
        • Mit dem NodeMCU ESP8266 433MHz Funksteckdosen steuernMit dem NodeMCU ESP8266 433MHz Funksteckdosen steuern
        • ESP8266 NodeMCU HD44780 LCD Display per I2C steuernNodeMCU ESP8266: HD44780 LCD Display per I2C steuern
        • ESP8266 Grafikdisplay: Am SSD1306 OLED per I2C Bilder & Text anzeigen
        • ESP8266 Google Maps API RoutenplanerESP8266 Google Maps API Routenplaner auf LCD anzeigen
        • 2000px-Arduino_Logo.svgRaspberry Pi und Arduino – Einführung
        • arduino unoArduino und Raspberry Pi miteinander kommunizieren lassen
        • Funkkommunikation zwischen Raspberry Pi's und Arduinos (2.4 GHz)Funkkommunikation zwischen Raspberry Pi’s und Arduinos (2.4 GHz)
        • NodeMCU: ESP8266 mit Solarpanel und Akku mit Strom versorgenNodeMCU: ESP8266 mit Solarzelle und Akku mit Strom versorgen
        • ESP8266 Access Point: Günstigen Wlan Repeater selber bauenESP8266 Access Point: Günstigen Wlan Repeater selber bauen
      • Mini Projekte
        • Raspberry Pi Gewächshaus automatisch selber bauenAutomatisches Raspberry Pi Gewächshaus selber bauen
        • Eigene Raspberry Pi Gartenbewässerung mit Webseite bauenEigene Gartenbewässerung mit Webseite bauen
        • Raspberry Pi Radio StationRaspberry Pi als Radio Sendestation verwenden
        • Raspberry Pi Radio ReceiverRaspberry Pi als Radioempfänger benutzen (Autoradio, Car PC)
        • spotify-logo-primary-horizontal-dark-background-rgbRaspberry Pi als Jukebox (Spotify, Soundcloud, TuneIn, uvm.) – Online Radio
        • Raspberry Pi RetroPie Guide - SNES Classic Spielekonsole selber bauenRaspberry Pi RetroPie Guide – SNES Spielekonsole bauen
        • Android + Raspberry Pi: Funksteckdosen App BedienungRaspberry Pi + Android/iOS: Funksteckdosen per App schalten
        • Indirekte Deckenbeleuchtung selber bauen mit farbigem LED LichtIndirekte Deckenbeleuchtung selber bauen mit farbigem LED Licht
  • Sonstiges
    • Wünsch dir ein Tutorial
    • News
    • Reviews
      • Pi Cap – Kapazitives Raspberry Pi Erweiterungsboard
      • Raspberry Pi Tablet „Sunfounder RasPad“ – Testbericht & Einrichtung
      • Testbericht zum 7″ Raspberry Pi Touchscreen Display
      • CrowPi 2 Testbericht: Laptop & Lern-Kit für Kinder
      • Daten auf dem Wio Terminal LCD Screen anzeigen
    • Raspberry Pi Zero
      • Offizielles 5$ Raspberry Pi Zero Modul vorgestellt
      • Raspberry Pi Zero – Ethernet Verbindung herstellen (ENC28J60)
      • Raspberry Pi: WS2801 RGB LED Streifen anschließen und steuern
  • Hausautomation
    • OpenHAB
      • steckdose_25Sonoff S20 Wifi Steckdose steuern
      • wireless_25Funksteckdosen (433 MHz) schalten
      • schalter_25Relais steuern (Rollladen, Lichter, etc.)
      • wetterstation_menu30Wetterstation mit OpenHAB 2 bauen
      • ws28_25WS28xx RGB LED Streifen steuern
      • touchscreen_25Touchscreen Panel bei Näherung aktivieren
      • mqtt_25MQTT Datenabfrage: Raspberry Pi an ESP8266
      • spotify_25Remote Spotify Player im Smart Home
      • heizung_25eQ-3 Thermostat im Smart Home
    • Einführung
      • Raspberry Pi Smart Home OpenHAB installierenOpenHAB installieren & konfigurieren
      • Home Assistant auf dem Raspberry Pi – Erste Schritte
    • ESP8266 NodeMCU
      • esp8266_25Einführung & Programmierung
      • arduino_25ESP8266: Arduino IDE installieren
      • lcd_25NodeMCU HD44780 LCD
      • battery_25Batteriebetrieb via Deep-Sleep
      • wifi_menuPer WLAN Daten senden
      • wetterstation_menu30Wetterstation Außenposten
      • maps_25Google Maps Routenplaner
      • wireless_25NodeMCU Funksteckdosen steuern
      • mail_25Vom NodeMCU Emails versenden
      • rgb_25WS2812B LEDs am Smartphone steuern
      • solar_25ESP8266 Stromversorgung mit Solarzelle
    • Überwachung
      • Aufnahmen mit dem offiziellen Kamera Modul des Raspberry Pi
      • Raspberry Pi: Überwachungskamera Livestream einrichten
      • mailbox_25Briefkasten Sensor – Email Benachrichtigung bei neuer Post
      • Raspberry Pi Überwachungskamera mit Webcam betreiben
      • Überwachung von Fenstern und Türen mit dem Raspberry Pi und Reed-Relais
      • ESP32 Cam Livestream Tutorial für Kamera Modul
    • Raspberry Pi + Android: Benachrichtigungen von Bewegungsmelder
    • Raspberry Pi + Android/iOS: Funksteckdosen per App schalten
    • Raspberry Pi + Android: Schwenkbarer Kamera-Livestream
      • Smart Home
        • Amazon Alexa (Deutsch) auf dem Raspberry Pi installieren
        • Raspberry Pi Funksteckdosen (433MHz) steuern – Tutorial
        • Raspberry Pi Sprachsteuerung selber bauen (Hausautomatisierung)
  • Englisch
Tutorials for Raspberry Pi Tutorials for Raspberry Pi
Home»Hardware & GPIO»Raspberry Pi GPIOs mittels I2C Port Expander erweitern – Teil 1

Raspberry Pi GPIOs mittels I2C Port Expander erweitern – Teil 1

Facebook Twitter LinkedIn Tumblr Email Reddit
Teilen
Facebook Twitter LinkedIn Email Tumblr Reddit Telegram WhatsApp

Wer mehrere oder ein größeres Projekt hat, wird schnell feststellen, dass die GPIO Pins des Raspberry’s schnell zu wenig werden. Für all jene wird in diesem Tutorial gezeigt, wie man mittels eines I2C Port Expander sehr einfach die GPIO Pins um ein vielfaches erhöhen kann.

 

In manchen Situationen kann es vorkommen, dass man mehr GPIO Pins benötigt, als es Ausgänge hat und man an die physikalischen Grenzen stößt. Doch dafür gibt es die sehr nützlichen Port Expander. Auf die Benutzung einer dieser gehen wir in diesem Beitrag näher ein.

 

Zubehör & Allgmeines

Für dieses Tutorial benötigst du folgendes Zubehör:

  • MCP23017
  • LEDs (am besten in verschiedenen Farben)
  • einen Taster
  • Widerstände
  • Breadboard
  • Jumper Kabel

 

Zu erst einmal der Aufbau der Mikrochips:

 

mcp23017_pinout-300x243

Wie man sieht sind die Unterschiede minimal, für dieses Tutorial ist es egal, welcher verwendet wird.

 

Vorbereitung

Eine kleine Erklärung der wichtigsten Pins:

  • GPA0-7 und GPB0-7 sind die GPIO Pins
  • A0, A1, A2 werden an + (3.3V) bzw. – (GND) angeschlossen und legen intern den Namen fest. Sind mehrere Port Expander angeschlossen, muss jeder dadurch eindeutig identifizierbar sein. Beim ersten I²C würde man alle an GND anschließen, beim nächsten A0 an 3.3V und die beiden anderen an GND. Beim dritten a! an 3.3V und die anderen zwei an GND usw. Es ist also mögich bis zu 2³ also 8 Port-Expander anzuschließen.
  • VDD (Pin 9) bekommt die Eingangsspannung (3.3V)
  • VSS (Pin 10) wird an GND angeschlossen
  • SCL (Pin 12) wird an den GPIO Pin 5 des Pi’s angeschlossen
  • SDA (Pin 13) wird  an den GPIO Pin 3 des Pi’s angeschlossen

Dementsprechend habe ich eine kleine Schaltung mit 3 LEDs gebaut (als Vorwiderstände 330Ω).

i2c_Steckplatine

(Den Taster benötigen wir erst in Teil 2 des Tutorials.)

Als erstes muss nun im Pi die Ntzung des I2C freigeschaltet werden.Am einfachsten geht dies mittels

sudo raspi-config

Unter „Advanced Options“ > „I2C“ wird es aktiviert.
Bei älteren Raspbian Versionen muss man zusätzlich eine Datei bearbeiten

sudo nano /etc/modules

und fügt an das Ende diese beiden Zeilen an:

i2c-bcm2708
i2c-dev

Mit STRG + O und STRG + X speichern und beenden.

 

Jetzt müssen die Module aus der Blacklist Datei genommen werden, da sie sonst nicht funktionieren.

sudo nano /etc/modprobe.d/raspi-blacklist.conf

und vor die beiden Einträge eine Raute # setzen.

#blacklist spi-bcm2708
#blacklist i2c-bcm2708

Erneut mit STRG + O und STRG + X speichern und beenden.

Damit wir den I2C nun auch ansprechen können, müssen wir noch ein paar Pakete installieren.

sudo apt-get install python-smbus i2c-tools

Anschließend den Pi noch herunterfahren, einige Sekunden warten und vom Strom trennen.

sudo shutdown now

Hardware testen

Nachdem alles angeschlossen ist und alle Verbindungen nochmals überprüft worden sind, starte den Pi und warte bis er hochgefahren ist.

Ich nutze einen Raspberry Pi Rev.2, daher teste ich es mit

sudo i2cdetect -y 1

Wer einen Pi Rev.1 hat, muss anstelle der 1 eine 0 eingeben.Die Ausgabe sieht folgendermaßen aus:

pi@raspberrypi ~ $ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Unter der Adresse 0x20 (hexadezimal) befindet sich also der I2C. Wäre A2 z.B. an 3.3V angeschlossen (A1 und A0 an GND), so wäre er unter der Adresse 0x24 ansprechbar. Das ist, wie bereits erwähnt, wichtig, wenn man mehrere Port Expander angeschlossen hat, um sie eindeutig ansprechen zu können.

Um die LEDs anzusprechen, müssen die Ports entweder als Input oder Output deklariert werden (Rev1 Benutzer bitte wieder anpassen).

sudo i2cset -y 1 0x20 0x01 0x00

Ich gebe ein paar Beispiele, die erläutern, wie der Befehl funktioniert:

i2cset -y 1 0x20 0x01 0x00   #alle Pins von GPB sind Output
i2cset -y 1 0x20 0x01 0x04   #GPB2 ist Input, der Rest von GPB Output (da 0x04 in binär 00000100)
i2cset -y 1 0x20 0x00 0x80   #GPA7 ist Input, der Rest von GPA Output

Als erstes wird also die Adresse angesprochen, die man mittels i2cdetect herausgefunden hat. Der zweite Wert ist in dieser Tabelle (aus dem Datenblatt):

register

Nachdem wir also die Richtung (IODIRB) angegeben haben (0 = Output, 1 = Input), wollen wir die drei LEDs leuchten lassen (Binär 00000111 = 0x07):

sudo i2cset -y 1 0x20 0x15 0x07

Würden wir die GPA Pins benutzen, stände statt 0x15 eben 0x14.
Damit die LEDs aufhören zu leuchten, müssen wir den Pegel der Pins wieder auf 0 setzen:

sudo i2cset -y 1 0x20 0x15 0x00

Im nächsten Tutorial schreiben wir ein Skript, dass automatisch auf die Pins zugreift und lesen Input Werte ein.

GPIO Erweiterung i2c MCP23017 mehr GPIO Pins port expander port extender python
Teilen Facebook Twitter Pinterest LinkedIn Tumblr Email
Vorheriger BeitragRaspberry Pi Temperatursensor (1-Wire): Temperatur messen
Nächster Beitrag Raspberry Pi GPIOs mittels I2C Port Expander erweitern – Teil 2

Ähnliche Beiträge

ESP32 TDS Sensor: Wasserqualität im Smart Home messen

ESP32 pH-Sensor – Automatische pH-Messung für Pool und Hydroponik

Home Assistant auf dem Raspberry Pi – Erste Schritte

Mit der Raspberry Pi REST API via Python alle GPIOs steuern

60 Kommentare

  1. Rogon am 28. April 2015 12:17

    Guten Tach,
    sehr schönes Tutorial! Kompliment!
    Da ich leider nur sehr begrenzte Kenntnisse im Bereich Elektronik besitze, habe ich da eine Frage:

    sudo i2cset -y 1 (1) 0x20 (2) 0x15 (3)0x07

    (zur besseren Orientierung habe ich die Zahlen in den Klammern hinzugefügt)
    Also (1) gibt die Adresse des Slave an (zu finden mit „sudo i2cdetect -y 1“)
    (2) ist die „HEX“-Adresse der Zeile, die aussagt, was passieren soll (15=OLATB ==>Zustand der B-Pins soll verändert werden).
    (3) in welchem Zustand die Pins, nach dem Kommando sind ( 07 in HEX-Rechner => 111 = 00000111 => GPB 0 – GBP 2 auf High, GBP 3 – GBP 7 auf LOW)

    So, wie ich das gerade schreibe, und dabei nochmal dein Tutorial lesen, klingt das irgenwie logisch(für mich). Eventuell sitze ich auch einfach nur lange genug dran, um mir mein Geschreibsel schön zu reden 😉
    Kannst Du mir bitte sagen, ob ich richtig stehe und das Licht an geht, oder nicht?
    Vlt. könntest Du dem Tutorial noch ein paar mehr Beispiele hinzufügen, damit so Knalltüten wie ich, das noch besser verstehen?

    Danke, und schöne Grüße,
    Rogon….

    Antworten
    • Felix am 28. April 2015 14:00

      Hi Rogon,
      vielen Dank für das Lob 🙂
      ja deine Ausführung stimmt soweit. Was ist noch genau unklar? Waren die 3 Beispiele nicht hilfreich? Verbesserungsvorschläge sind immer willkommen.

      LG Felix

      Antworten
  2. Rogon am 28. April 2015 14:26

    Hallo Felix,
    zunächst einmal vielen Dank, für die schnelle Antwort.

    —!!!Heureka!!!—

    Unklar ist eigentlich nichts, ich habs dann ja doch verstanden.
    Bei der Elektrik ist bei mir so:
    Ich sitze in einem dunkeln Raum. Jemand gibt mir einen Würfel in die Hand, und erst wenn er das Licht anschaltet, glaube ich auch wirklich, dass es ein Würfel ist.
    Also Unsicherheit auf Grund völliger Unkenntnis.
    Deine Tutorials sind super! Kurz, knapp und knackig und am Ende funktioniert es sogar auch noch 😉
    Vergiss bitte die Bemerkung mit den zusätzlichen Beispielen…
    Zu leicht soll man es auch nicht machen, ein bisschen muss der Grips schon arbeiten.
    Werde, aus Freude, jetzt erstmal ne Runde mit den LED´s blinken 😉
    Nochmals vielen Dank für Deine Hilfe. Keep on running…
    LG Rogon…

    Antworten
    • Felix am 28. April 2015 17:50

      Hi Rogon,
      nochmal danke für das Lob! Freut mich, dass es dir gefällt.
      Sollte bei irgendeinem Tutorial etwas unklar sein, schreib es in die Kommentare oder mir per Mail. Ich versuche so schnell es geht zu antworten.

      LG Felix

      Antworten
  3. Erik am 13. Mai 2015 12:53

    Hallo,

    ich habe das Problem, dass der Chip im Pi nur ganz kurz sichtbar ist. Wenn ich versuche zu schreiben kommt nur Error: Write failed
    wenn ich im 0,5s Takt den Befehl sudo i2cdetect -y 1 ausführe wird nur in 10s einmal die 20 in der „Tabelle“ angezeigt, ansonsten wieder nur die — .
    Ich habe schon überprüft, ob nicht ein Kurzschluss oder manche Pins ausversehen verbunden werden, aber das ist nicht der Fall. Habe auch den Chip ausgewechselt, jedoch bleibt das Problem bestehen
    Was mache ich hier falsch? :/

    Antworten
    • Felix am 13. Mai 2015 13:08

      Wenn du den IC schon gewechselst hast, kann man einen Defekt davon ausschließen. Es muss also entweder an der Verkabelung oder am Pi.
      Du könntest z.B. nochmal ein sauberes Image probieren, vielleicht hast du etwas installiert, was Konflikte verursacht.

      Antworten
    • David am 1. Juni 2020 21:26

      Das Problem hatte ich auch.
      In meinem Fall musste ich einfach ganz fest auf den Chip drücken (obwohl er meiner Meinung nach bereits richtig drin war).
      Ich benutze ein Breadboard, aber die Beinchen von dem Chip sind halt kürzer als gewöhnliche Kabel, daher muss man da wohl einfach fest drücken.

      Jetzt funktioniert es jedenfalls. 🙂

      Antworten
      • David am 2. Juni 2020 0:43

        Ok, ich ziehe das mit dem Wackelkontakt zurück.
        Es ist wie beim Kommentar von Stefan: Die RESET-Leitung muss auf VDD stehen, sonst kommt es manchmal spontan zu einem Reset und es klappt dann nichts mehr!

        In der Anleitung des Microchips ist die Signalrichtung der RESET-Leitung falsch eingezeichnet (der Pfeil müsste in Richtung des Microchips zeigen). Im beschreibenden Text dazu im Datenblatt ist es aber richtig (must be externally biased).

  4. bjarne am 3. Oktober 2015 19:39

    hallo,
    bei mi funktioniert es nicht. Er zeigt mir keinen angeschlossen IC an in der Tabelle.
    habe alles genauso wie gesagt gemacht.
    bitte um Hilfe^^

    Antworten
  5. Holger am 10. Januar 2016 9:12

    Moin moin, also ich muss die ganzen Tutorials hier auch mal loben und den Verfasser. Ich vermute mal das Felix derjenige ist der hier immer schnellstmöglich alle Fragen beantwortet und die Tuts einstellt. Vielen Dank dafür.
    Ich hätte allerdings auch mal wieder eine Frage zu der Schaltung. Wie kann ich einen einzelnen PIN wieder auf 0 setzen? Mit 0x20 0x15 0x08 kann ich PIN 4 direkt auf 1 setzen, aber wie kann ich den jetzt wieder 0 setzen ohne die anderen PINs der Bank anzusprechen? Mit 0x20 0x15 0x00 werden ja alle pins auf 0 gesetzt.
    Gruß
    Holger

    Antworten
    • Felix am 10. Januar 2016 13:56

      Hallo Holger,
      vielen Dank für die lieben Worte 🙂
      Es gibt zwei Möglichkeiten: Entweder du schreibst eine Funktion, der du einen Pin und den Zustand angibst, allerdings diese deren Zustände vorher ausließt (falls Output) und entsprechend wieder setzt. Dann änderst du nur den Wert des Pins, der angegeben wurde und setzt die ganze Reihe.
      Der „einfachere“ Weg ist eine Bibliothek zu nehmen, wie z.B. diese hier: https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library
      Ich vermute, dass die dortigen Funktionen ebenfalls alle Ports gleichzeitig ansprechen, aber eben die Werte vorher auslesen.

      mcp = Adafruit_MCP23017(busnum = 1, address = 0x20, num_gpios = 16)
      mcp.config(0, mcp.OUTPUT)
      mcp.config(1, mcp.OUTPUT)
      mcp.config(2, mcp.OUTPUT)
      mcp.output(0, 1)  # Pin 0 High
      Antworten
    • Holger am 10. Januar 2016 17:40

      Hi Felix, danke für den Tip. Ich denke ich werde es selbst auslesen und dann neu schreiben. Habe ich gerade schon einmal versucht und hatte die Befürchtung, dass es bei den Pins wo es keine Änderung gibt, eine kurze Unterbrechung gibt. Augenscheinlich ist dies aber nicht so. Gemessen habe ich es allerdings noch nicht 😀
      Gruß
      Holger

      Antworten
  6. Manuel am 26. Januar 2016 19:01

    Hallo,

    ich habe da auch ein Problem. Und zwar lief bis gestern noch alles reibungslos. Nun habe ich heute 2 weitere Boards angeschlossen und seit dem kann ich keinen i2c Port mehr schalten. Er lässt sich zwar über Putty schalten aber das Relay Board reagiert nicht. Hast du eine Idee woran es liegen könnte?

    Das ist der Code mit dem ich es vorhin nochmal versucht habe:
    i2cset -y 1 0x20 0x12 0xFF
    Er soll alle Port A Pins des ersten Boards einschalten.

    Hoffe du kannst mir helfen.
    Ansonsten ein sehr gutes Tutorial 😉 Alles sehr gut erklärt !!! TOP-Arbeit!
    Danke für deine Hilfe und das Tutorial.

    Antworten
    • Felix am 26. Januar 2016 19:04

      Hallo Manuel,
      da du die Adressen manuell einstellen musst (Binär durch Anschluss an Plus/Minus), müssen diese natürlich für alle drei unterschiedlich sein (Pins A0, A1, A2). Hast du das beachtet? Im Beispiel sind alle 3 auf Minus, d.h. binär 000 (=dezimal 0). Du solltest einen auf 001 (=dezimal 1) und einen auf 010 (=dezimal 2) setzen.
      LG Felix

      Antworten
    • Manuel am 26. Januar 2016 19:41

      Hi Felix,

      danke für deine schnelle Antwort. Ich habe allerdings das 16 Port I2C Board:
      https://www.pi-supply.com/product/quick2wire-raspberry-pi-i2c-mcp23017-port-expander-board-kit/

      und habe dazu dieses Relay Board:
      http://www.avc-shop.de/epages/64272905.sf/de_DE/?ObjectPath=/Shops/64272905/Products/RELM-16

      Aber wieso funktioniert es auf einmal nicht mehr wenn es doch vorher einwandfrei funktioniert hat.

      LG,
      Manuel

      Antworten
      • Felix am 26. Januar 2016 19:44

        Solange du nur einen angeschlossen hast klappt es, aber sobald du mehrere dran hast nicht mehr? Wahrscheinlich weil sie die gleiche Adresse haben, was nicht sein darf. Sind auf dem Board die Dipschalter für die Adressierung?
        Edit: Kurz ins Datenblatt geschaut und ja, das sollte die Adressierung sein.

  7. Sebastian am 18. Februar 2016 11:50

    HI! Danke für das Tutorial! Wenn ich das jetzt richtig verstehe müsste ich wenn ich diese Art von Pin Erweiterung benutze auf Dauer alles auf Platinen löten, richtig? Kennst du evtl. noch andere Möglichkeiten die vll. ähnlich klein sind aber ohne Löten auskommen?
    Viele Grüße, Sebastian

    Antworten
    • Felix am 18. Februar 2016 13:08

      Hi Sebastian,
      ich löte eigentlich nur, wenn ich sicher bin, dass es dauerhaft so bleiben soll.
      Fürs experimentieren benutze ich kleine oder große Breadboards.

      Antworten
  8. swen am 11. März 2016 16:49

    hallo wenn ich das ganze probiere mit
    sudo i2cdetect -y 1
    bekomme ich eine fehlermeldung:
    Error: No i2c-bus specified!
    Usage: i2cdetect [-y] [-a] [-q|-r] I2CBUS [FIRST LAST]
    i2cdetect -F I2CBUS
    i2cdetect -l
    I2CBUS is an integer or an I2C bus name
    If provided, FIRST and LAST limit the probing range.

    was mache ich nur falsch? hbe alles schritt für schrit so gemacht 🙁

    Antworten
    • Felix am 11. März 2016 20:37

      Hast du auch in der raspi-config I2C freigeschaltet?

      Antworten
  9. Jonas am 26. April 2016 15:19

    Also bei mir scheint das i2cdetect nicht zu funktionieren. Die Ausgabe mit -y 1 bzw. 2,3 ist „error Could not open file. … no such file or directory „

    Antworten
    • Felix am 26. April 2016 18:06

      Welches Raspberry Pi Modell hast du und wofür soll 2,3 stehen? Klingt sehr danach, dass die Installation nicht (vollständig) geklappt hat.

      Antworten
  10. chris am 28. April 2016 16:36

    Ich habe auch diese meldung. habe den pi2

    habe aber eig alles befolgt was hier steht, wie kann ich den Fehler finden?

    Error: No i2c-bus specified!
    Usage: i2cdetect [-y] [-a] [-q|-r] I2CBUS [FIRST LAST]
    i2cdetect -F I2CBUS
    i2cdetect -l
    I2CBUS is an integer or an I2C bus name
    If provided, FIRST and LAST limit the probing range.

    Antworten
    • Felix am 28. April 2016 16:40

      Welchen Befehl hast du eingegeben?
      Schau dir auch das mal an: https://www.raspberrypi.org/forums/viewtopic.php?t=74763

      Antworten
  11. chris am 28. April 2016 16:46

    ich habe „sudo i2cdetect -y0“ sowie mit „-y1“ getestet.
    meine blacklist ist komplett leer, keine einträge.
    i2c tools auf auf neuster version.
    python-smbus auf neuster version.
    die datei /etc/modules hat in den letzten beiden zeilen den diese befehle „i2c-bcm2708
    i2c-dev“

    Antworten
    • Felix am 28. April 2016 16:47

      Dazwischen muss ein Leerzeichen: sudo i2cdetect -y 1

      Antworten
    • chris am 28. April 2016 16:49

      leerzeichen war vorhanden

      Antworten
    • chris am 28. April 2016 16:50

      doch nicht^^
      es geht

      Antworten
  12. chris am 28. April 2016 16:49

    unter lsmod
    ist i2c_dev sowie i2c_bcm2708 geladen.
    spi_bcm2708 ist nicht geladen, aner benötige ich auch nicht oder

    Antworten
  13. SgtIgram am 17. Juni 2016 23:16

    howdy-ho
    das tutorial ist jetzt zwar schon ein wenig älter.. aber obwohl ich es haarklein befolgt habe und sogar exakt den selben expander-chip verwende, habe ich nur probleme..

    auffällig hierbei ist folgendes:
    – beim i2cdetect tauchen „UU“s auf.. nach recherchen handelt es sich hier um reservierte adressbereiche die allerdings nicht mit dem 0x20 kollidiern..
    – durchschnittlich jedes dritte mal beim verwenden eines der i2c befehle, gibts probleme.. soll heißen.. beim i2c detect wird der 0x20’er nichtmehr gefunden.. oder beim setzen der pins, oder setzen als input/output wird nen error beim write rausgehaun

    – hin und wieder wirkt es auch so beim setzen der pins.. als wäre dort ein kurzer.. sowohl die powerLED am PI als auch eine kontroll LED die ich angebracht habe, ist für den bruchteil einer sekunde aus.. allerdings für so kurze zeit das das board normal weiterläuft und alles..

    – voller zuversicht hatte ich natürlich direkt 2 chips verkabelt.. die adresse war(wenn es mal angezeigt wurd) 0x22.. wenn ich raten müsste würde ich sagen das 0x21 der erste ist.. und 0x22 der zweite.. während 0x20 vlt. sogar beide gleichzeitig anspricht??

    da ich echt am verzweifeln bin(da es bei etlichen anderen leuten scheinbar problemlos funktioniert) und mir nicht ein chip nach dem andern(oder das PI selbst) zerschießen will.. brauch ich also echt unterstützung und wäre extrem dankbar..

    Antworten
    • Felix am 17. Juni 2016 23:24

      Hey,
      kannst du einen Wackelkontakt ausschließen? Das Problem sagt mir in der Form leider nichts, ich selbst hatte es noch nicht und bisher wohl auch keiner der das Tutorial befolgt hat.
      Die Adresse (0x20) gibst du – wie im Tutorial beschrieben – mit den drei A0-A2 Kontakten an. Möchtest du einen Chip mit der Adresse 0x22 ansprechen, so muss A0 und A2 an GND aber A1 an 3.3V.
      Ich würde dir wirklich gerne besser helfen, aber das klingt sehr merkwürdig. Klappen denn andere I2C Anwendungen bei dir (gibt einige Tutorials hier mit I2C)?

      Antworten
    • SgtIgram am 18. Juni 2016 15:15

      das mit der pin adressierung hab ich soweit schon verstanden.. und der 0x22 wurd ja auch angezeigt als ich , wie beschrieben , voller zuversicht direkt zwei chips angestöpselt habe..

      wackelkontakt kann ich ziemlich gut ausschließen.. zudem ich das problem(mit dem das er mal angezeigt wird und mal nicht) auch habe wenn ich definitiv außer reichweite bin um an dem raspi irgendwas zu bewegen..

      ich würde das ganze gerne mit fotos mit dir abgleichen.. in skype/steam heiß ich ebenfalls „sgtigram“.. ansonsten kannst du mich gern mal unter der hinterlegten email anschreiben

      grüße
      – sgtigram

      Antworten
  14. Tim am 23. Juni 2016 16:54

    Erstmal muss ich sagen dass das Tutorial großartig ist allerdings verstehe ich nicht wie ich 4 Expander anschließen kann. Könntest du oder wer anderes mir das nochmal erklären? Eventuell mit einem Bild der Schaltung?

    Antworten
    • Felix am 23. Juni 2016 16:58

      Du hast doch die Pins A0, A1 und A2. Jeder dieser Pins kann entweder Zustand AN oder Zustand AUS haben (=ein Bit). Wir haben also 2^3 = 8 Möglichkeiten eine Nummer zu vergeben, sprich du kannst bis zu 8 Expandern eine eindeutige Nummer zuweisen.
      Schau dir am besten mal das Binärsystem genauer an.

      Antworten
    • Tim am 24. Juni 2016 22:36

      Okay, das habe ich verstanden aber der Pi hat ja nur 2 I2C Anschlüsse, dann ist es doch nicht möglich 4 Expander anzuschließen. Sorry, wenn ich das nicht verstehe aber ich kenne mich damit nicht wirklich aus…

      Antworten
  15. Michael am 14. Juli 2016 13:13

    Der I2C ist ein Bussystem. Alle Expander hören also immer zu, reagieren aber nur auf ihre Adresse. D.h., dass alle Expander quasi parallel angeschlossen werden.

    Antworten
  16. Karl am 15. Januar 2017 18:57

    Vielen Dank für die ausführliche Beschreibung! Funktioniert fehlerlos.

    Für die Besitzer des Raspi 3 ist es noch einfacher: In den Einstellungen – I2C aktivieren.
    Dazu noch ein Tip falls Python (3) den Import des smbus Moduls verweigert:
    sudo apt-get install python3-smbus

    Eine Frage habe ich noch:
    Sollte man an den Ausgängen zum Schalten von 8 Relais (Relaiskarte) noch ein ULN2003 anhängen oder schafft das die 5V Leitung des Raspi’s ?

    Antworten
    • Felix am 15. Januar 2017 21:24

      Müsstest du mal schauen, wie viel Strom das 8er Relais braucht. Mit gutem Netzteil kann der Pi einige Hundert mA über den 5V Anschluss abgeben.

      Antworten
  17. Andre am 17. Januar 2017 9:01

    Hallo Felix,
    Danke für den tollen Artikel, via einer I2C Verbindung kann ich also max. 8 MCP23017 Bausteine ansteuern, die ich durch A0, A1, A2 adressiere.
    Ich möchte mehrere MCP23017 auf einer Leiterplatte unterbringen. Auf der einen Seite in Verbindung mit dem Raspberry über den I2C, GND, und 3,3 V Anschluss, auf der anderen Seite via Anschlußklemmen zum Schalten von Relais.
    Hast Du oder hat jemand einen Tipp, wie ein Platinenentwurf für 2 oder 1 MCP23017 auf einer Platine aussehen muß. Wie wäre ein kreuzungsfreier Entwurf oder gibt es so etwas zum Kaufen.
    Vielen Dank, André

    Antworten
  18. Aaron Schulz am 24. Februar 2017 23:40

    Hey, als erstes Kompliment für die vielen Ideen und Anregungen auf dieser Website. Ich habe mich hier mal querbeet durchgelesen aber eine Sache habe ich noch nicht explizit gefunden: Wie schließe ich andere Geräte an den Pi an, die mehr Spannung brauchen als die GPIOs zur verfügung stellen? Da geht die eigentliche Stromversorgung nicht mehr über die GPIOs sondern über eine externe Quelle, zB Batterien und ich weiß nicht wie man die mit dem Pi verbindet. Und/oder gibt es sonst eine möglichkeit, solche Motoren mit einer Powerbank zu verbinden, zwecks einfacherer Lagerung?
    Gruß, Aaron

    Antworten
    • Felix am 25. Februar 2017 2:31

      Hi Aaron,
      wenn mehr Strom bzw. Spannung gebraucht wird, muss natürlich eine externe Quelle genutzt werden.
      Bei Motoren kannst du auf Treiber Boards / ICs zurückgreifen, welche es sehr einfach machen: Raspberry Pi Schrittmotor ansteuern mit L293D / ULN2003A

      Antworten
  19. Alex am 27. April 2017 20:47

    Hey Felix,
    erstmal vielen vielen Dank und zwar für alle deine Tutorials.
    Ich sag mal leise mein kleines Projekt baue ich quasi auf deinen Tutorials auf ;-).

    So nun habe ich aber ebenfalls eine kleine Frage:
    Ich möchte gerne das KeyPad (4×4) via dem MCP betreiben.
    In deiner KeyPad Datei / Script wird via GPIO die jeweiligen Eingänge auf pull up bzw. down gelegt.
    Abwechselnd für row und für col um festzustellen welche Taste betätigt wird.

    Nun ich wollte jetzt nicht die ganze KeyPad Datei umschreiben.

    Gibt es einen einfachen Ansatz das via MCP zu realisieren?
    Vielen Dank schon mal für deine Mühen und nochmals Vielen Vielen Dank für die Tutorials.

    Gruß

    Alex

    Antworten
    • Alex am 27. April 2017 21:08

      Hallo Felix,

      Also ich habe nun, wie manch anderer, ebenfalls meine Gedanken weiter schweifen lassen.
      Ich würde sagen das es vermutlich mit bus.write_byte_data(DEVICE,GPIOA,1) [aus Tutorial 2 erweitert] klappen könnte …..

      Liege ich damit falsch ?!?

      Antworten
      • Felix am 27. April 2017 21:24

        Ja, du kannst mit read und write ja die zusätzlichen Pins auslesen und beschreiben. Das müsstest du allerdings im Code der Keypad Matrix anpassen.
        PS: Danke für das Lob 🙂

  20. Michael am 9. Juni 2017 15:56

    Hi Felix

    wie auch alle die Anderen eine super Beschreibung. Es funktioniert bei mir auch so wie du beschrieben hast, nur nach einiger Zeit kann ich den MCP nicht mehr ansprechen und er hat die gesetzten Bits vergessen? Ich habe die Verkabelung mehrfach kontrolliert. Wenn ich den Raspi neu starte geht alles wieder und dann nach eine halben Stunde oder so geht nix mehr.
    Hast du eine Idee. PS ich habe schon 2 mal den MCP gewechselt.

    Antworten
  21. David am 12. September 2017 14:51

    Hallo,

    erstmal vielen Dank für die tolle Anleitung.
    Eine Frage bezüglich der 3,3V Versorgung. Der MCP23017 kann ja auch problemlos an einem Arduino mit 5V betrieben werden. Wenn ich nun gerne 5V Ausgangssignal am Pi hätte könnt ich den MCP23017 doch einfach mit 5V statt 3,3V versorgen.
    Damit der I2C Bus am Pi dann nicht zu viel Spannung vom MCP23017 bekommt kommt vor dem Pi ein Pegelwandler in den I2C-Bus. (z.B. der hier: http://bit.ly/2xXZEiN )

    Funktioniert das so ohne das etwas kaputt geht?

    Antworten
    • Felix am 13. September 2017 21:37

      Solange die GPIOs max. 3.3V abbekommen, ist das möglich.

      Antworten
  22. Skipper am 6. November 2017 11:42

    Hallo Felix…

    Kann man die Pins des Expanders auch noch anders ansprechen als mit den Hex Adressen?
    Ich hab da so verständnisprobleme..
    Mein Ziel ist es (um einbeispiel zu nennen) eine Reihe von Relais / Schützen anzusteuern & über nen Eingang abzufragen ob das betreffende Element tatsächlich geschaltet hat (könnte ja auch defekt sein)
    Ich versuche also sowas wie
    if GPA00 == high -> GPB00 = high
    if GPA01 == high -> GPB01 = high

    (alle GPAxx sind Eingänge, alle GPBxx sind Ausgänge..)

    In dem Beispiel ist ein Schalter am Eingang GPA00, die Spule eines Relais an GPB00 (natürlich über nen Transistor), ein schliesserkontakt des ersten Relais am Eingang GPA01
    Eine weitere Spule eines anderen Relais an GPB01
    Dazwischen dann noch diverse Zeitfunktionen etc…
    Und so weiter…
    Mein Problem ist nun das Relais Nr.1 auf keinen Fall abfallen darf auch nicht wenn Relais 73 noch geschaltet werden muss…

    Ich hoffe ich könnte das einigermaßen verständlich rüberbringen…

    Gruß Skipper

    Antworten
    • Felix am 6. November 2017 12:11

      Die grundsätzliche Kommunikation findet über die Hex Adressen stat. Es gibt allerdings auf Github o.ä. auch Bibliotheken, die ein Mapping vornehmen, was es ein wenig einfacher zu schreiben macht. Vielleicht ist das etwas für dich?

      Antworten
      • Skipper am 8. November 2017 8:48

        Hallo Felix,

        Das könnte tatsächlich helfen..
        Welche Bibliotheken sind das denn?

        LG Skipper

      • Felix am 8. November 2017 12:08

        Kann dir keine konkreten nennen (benutze sie nicht), aber weiß, dass es auf Github einige dazu gibt (in verschiedenen Sprachen). Einfach mal stöbern.

  23. Stefan am 14. Dezember 2017 16:35

    Hallo, klasse Anleitung! Im Text fehlt leider der Hinweis, dass die Reset-Leitung auf 5V (bzw. Vdd) liegen sollte (im Schaltplan ist es korrekt). Hat mich eine gute Stunde gekostet… 😉

    Antworten
  24. Andy am 18. Februar 2018 2:36

    Ich habe bereits eine Z-Wave Karte an den oben genannten Pins angesteckt. Läuft eine I2C Karte paralell zum Z-Wave Modul oder kann ich mir die Anschaffung sparen?

    Antworten
  25. Matteo am 18. Juli 2018 16:57

    Hi! Ich komme derzeit immer mehr bei dem Thema Raspi und den tollen Möglichkeiten des Raspis an. Warum gibt es sowas nicht schon länger. Deine Seite ist auch super, ich habe hier schon einige Ideen gesammelt und Verständnis über die Gesamtzusammenhänge bekommen; deutlich besser als durch das ein oder andere Buch, das ich mir schon bestellt habe.
    Bei einer Fragestellung komme ich trotz umfangereicher Recherche noch nicht so ganz geistig mit, ich hoffe, Du kannst mir einen Tipp geben. In der Frage von Philipp vom 02.12.2016 wurde das schon einmal leicht angedeutet.
    Grundsätzlich war die Idee, einen Raspi mit FHEM zentral im Keller hängen zu haben und diverse Sensoren im Haus zu verteilen (Fenster-/Türkontakte, Bewegungsmelder, Abstandssensoren, Feuchte, Temp etc.), und sie per Verkabelung am Raspi zusammenzuführen. Da ich die Anzahl der Sensoren und ankommenden Kabel noch nicht genau benennen kann, möchte ich den Raspi entsprechend vorbereiten und dann nciht unbedingt jeden GPIO-Pin belegen, sondern vorbereitend eine „externe“ Lösung mit einer Platine zu schaffen, die daneben hängt und die die einzelnen Kabel bündelt.
    Ich habe nun deiner Antwort vom 03.12.2016 entnommen, ich kann einfach einen oder mehrere I2C-PortExpander wie MCP23017nehmen kann, entsprechend der in dem Tutorial https://tutorials-raspberrypi.de/gpios-mittels-i2c-port-expander-erweitern beschriebenen Anschlusschema anbinden kann? Kann ich damit dann in das FHEM rein? Oder habe ich da was wichtiges vergessen oder gar eine etwas zu naive Vorstellung?

    Grüße. Matteo

    Antworten
  26. Reinhold am 23. September 2018 17:35

    Guten Tag, erstmal Daumen hoch für deine Anleitung.
    Ich habe mir einen PCF8574T Port Expander geholt und möchte gerne darüber ein Relaismodul
    mit 8 Relais schalten.
    Ich bin deiner Anleitung gefolgt, bis „i2cset -y 1 0x20 0x01 0x00“
    Ich habe die Pins P0-P7 an allen 8 Relais angeklemmt.
    wie bekomme ich es jetzt hin, damit ich durch ein i2cset Befehl P0-P7 einzelnd ein und aus schalten
    kann.

    Antworten
  27. Aro am 14. Oktober 2018 14:24

    Die Porterweiterung über I2C wird allgemein verwendet. Aber für 8, 16 oder 24 zusätzliche Ausgänge ist das doch eine teure Variante. Diese IC sind ab 1 Euro zu haben und für die Änderung eines Pins müssen viele Daten übertragen werden. Das sind ja nicht nur die Nutzdaten sondern auch die Gerätenummer und die Registeradresse.
    Schieberegister wie 74HC595 die für 5 Cent zu kriegen sind erfüllen den Zweck genau so.

    Antworten
    • flu am 6. März 2019 15:51

      Hi Aro,

      dann schreibe uns doch einfach ein kleines Tut, so dass wir alle etwas davon haben, statt nur zu schreiben, es ginge auch.
      Die Frage ist nämlich WIE geht es auch. Ich denke, die Schieberegister werden softwareseitig nicht wie die ICs angesprochen und muss dann nicht immer das gesamte Register übergeben werden, wenn man einen State ändern will? Was ist nun der Vorteil gegenüber den ICs, ech nur der Preis? Bei großen Projekten ist das ganz sicher ein Argument, abe bei Homeandwendungen ist das bestimmt zu vernachlässigen, oder?

      Danke.

      Antworten
  28. Jörg am 4. Dezember 2019 19:20

    Guten Tag,

    habe jetzt auch mal drei Fragen an Felix:
    1. Bis zu welchem Strom kann man den 3,3V-Ausgang (Pin 1) des PI belasten? Habe dazu keine Spezifikation finden können (immer nur zu den einzelnen GPIOs)
    Plane hier eine komplexere Steuerung mit 2 (oder sogar 3) 23017, 40LEDs (SMD, 2mA mit Rv=750Ohm) und ein paar Eingängen.
    2. Wofür sind die anderen Register beim MCP23017?
    3. Kann man beim MCP23017 auch eine Interrupt-Stuerung realisieren, wie Du sie im Projekt „Raspberry Pi Ampelschaltung mit GPIO“ in einem Kommentar verlinkt hast (add_event_detect)? Oder muß ich die entsprechenden Eingangssignale dann über „echte“ GPIOs vom PI realisieren?

    Antworten
  29. Malu am 23. Mai 2020 18:21

    Hallo,

    auch ich danke dir erst einmal für deine Mühe.
    Ist wirklich interessant hier.

    Aber ich habe hier leider ein Problem.
    Ich habe 3 MCP23017 gesteckt und verkabelt. Diverse LED dazu mit NPNs verkabelt.

    Über i2cdetect -y 1 finde ich 20, 21 und 22.
    Ein sudo i2cset 0x20 0x00 0x00 bringt mir jedoch nur ein: Error: Write failed

    Was könnte da los sein?

    Ich habe 2 gleiche Pi hier und bei beiden habe ich das Problem. Es ist eine frische Installation drauf ohne irgendwelchen SchnickSchnack.

    Antworten
    • Jörg am 13. April 2021 12:16

      Hallo Malu,

      ich weis nicht, ob Deine Frage noch aktuell ist. Ich vermute mal, das bei Deinem „sudo i2cset 0x20 0x00 0x00“ das „-y 1“ fehlt: „sudo i2cset -y 1 0x20 0x00 0x00“

      Antworten

Hinterlasse einen Kommentar Antwort abbrechen

Mit Xbox 360 Controller Raspberry Pi Roboter fernsteuern (Teil 6)

Raspberry Pi Roboter der eigenen Stimme folgen lassen (Teil 5)

8×8 LED Dot Matrix – Zusammenbau und Installation (Raspberry Pi)

ESP8266 Grafikdisplay: Am SSD1306 OLED per I2C Bilder & Text anzeigen

NodeMCU ESP8266: HD44780 LCD Display per I2C steuern

Mit dem NodeMCU ESP8266 433MHz Funksteckdosen steuern

Blog abonnieren

Abboniere Raspberry Pi Tutorials, um kein Tutorial mehr zu verpassen!

Tutorials for Raspberry Pi
Facebook Twitter YouTube
  • Kontakt & Impressum
  • Unterstützen
  • Datenschutz

Tippe den Suchbegriff oben ein und drücke Enter, um danach zu suchen. Drücke Esc, um abzubrechen.