Aktivieren und Überprüfen von I2C auf dem Raspberry Pi über die Kommandozeile für eigene Skripte

Die meisten Leute wissen, dass man den I2C-Port mit raspi-config aktivieren kann.

raspi-config bietet auch einen nicht-interaktiven Modus, in dem Sie die Funktionalität des Programms über Kommandozeilenparameter steuern können.

Auslesen des aktuellen Zustands des I2C-Ports am Raspberry Pi

So lesen Sie den aktuellen Zustand des I2C-Ports aus:

sudo raspi-config nonint get_i2c

Dieser Befehl wird zurückgegeben:

  • 1, wenn der Anschluss deaktiviert ist
  • 0, wenn der Anschluss aktiviert ist

Achtung: In diesem Fall ist die Logik Bash-Scripting! "0 bedeutet wahr oder kein Fehler, und alle anderen Zahlen bedeuten einen Fehlercode". Das hat mich anfangs überrascht!

Hinweis: nonint steht für "nicht-interaktiv".

Aktivieren von I2C auf dem Raspberry Pi mit einem einfachen Befehl

Wiederum mit raspi-config können wir den Status des I2C-Ports einstellen. Die Verwendung von raspi-config hat den Vorteil, dass es viele zusätzliche Dinge für Sie erledigt und aufwärtskompatibel sein sollte. Hinter den Kulissen bearbeitet raspi-config zum Beispiel /boot/config.txt für Sie und aktualisiert auch den Gerätebaum.

So aktivieren Sie den I2C-Port:

sudo raspi-config nonint do_i2c 0

Auch hier ist zu beachten, dass 0 bedeutet hier wahr / ein!

So können Sie den I2C-Port deaktivieren:

sudo raspi-config nonint do_i2c 1

1 bedeutet für diesen Zweck "falsch" oder ausgeschaltet.

Prüfen, ob I2C aktiviert ist

raspi-config im nicht-interaktiven Modus

wie oben erwähnt, können Sie den Zustand des I2C-Ports mit

sudo raspi-config nonint get_i2c

Bild

Der Screenshot zeigt die Ausgabe, wenn der I2C-Port aktiviert ist (0 = true)

I2C-Geräteknoten

Wenn I2C auf dem Raspberry Pi aktiviert ist, sehen Sie auch einen /dev-Knoten für ihn:

ls /dev/i2*

/dev/i2c-1

Hinweis: Bei den ersten Raspberry Pi-Modellen war der I2C-Port, der den Benutzern zur Verfügung stand, I2C 0, man würde also /dev/i2c-0 erwarten

Bild

Der Screenshot zeigt, dass der i2c-1-Knoten in /dev existiert

gpio readall

Hier ist die Ausgabe von

sudo gpio readall

Bild

Für BCM 2 und 3 sehen Sie unter Name "SDA1" (I2C-Daten) und "SCL1" (I2C-Takt). Auch der Modus ist ALT0, was der I2C-Funktion an diesen speziellen Pins (GPIO2, GPIO3) entspricht.

Beachten Sie, dass BCM 2 und 3 die Broadcom-Nummerierung ist, nicht die GPIO-Pinbelegung. Die Position der GPIO-Pins ist die erste Spalte in "Physical" (Pins 3 und 5).

(Sie können sich auf dieses Dokument beziehen, Seite 102für einen Überblick über die verschiedenen GPIO-Pin-Modi, falls Sie daran interessiert sind)

lsmod

lsmod zeigt an, welche I2C-Module geladen sind:

lsmod | grep i2c

i2c_bcm2835 16384 0
i2c_dev 20480 0

Bild

Es macht also keinen Unterschied, wenn I2C deaktiviert ist.

i2cdetect:

Ein letzter Test besteht darin, i2cdetect auszuführen, um den Adressbereich zu scannen. Bei modernen Pis müssen Sie 1 als Port angeben:

sudo i2cdetect -y 1

wird eine Tabelle mit den aktuell erkannten I2C-Geräten ausgegeben.

Bild

Hinweis: Da in meinem Fall keine I2C-Geräte angeschlossen waren, werden keine I2C-Geräte angezeigt - diese Ausgabe wird erwartet.

Prüfen, ob I2C deaktiviert ist

raspi-config im nicht-interaktiven Modus

wie oben erwähnt, können Sie den Zustand des I2C-Ports mit

sudo raspi-config nonint get_i2c

Bild

Der Screenshot zeigt die Ausgabe, wenn der I2C-Port deaktiviert ist (1 = false)

I2C-Geräteknoten

Wenn I2C auf dem Raspberry Pi deaktiviert ist, sehen Sie keinen /dev-Knoten für ihn:

ls /dev/i2*

ls: kann nicht auf '/dev/i2*' zugreifen: Keine solche Datei oder Verzeichnis

Bild

Der Screenshot zeigt, dass keine i2c-Knoten in /dev existieren.

gpio readall

Hier ist die Ausgabe von

sudo gpio readall

Bild

Für BCM 2 und 3 sehen Sie unter Name "SDA1" (I2C-Daten) und "SCL1" (I2C-Takt).

Im Gegensatz zur aktivierten Version (siehe oben) ist der Modus jedoch IN, der Pin ist nun ein GPIO-Eingang.

Beachten Sie, dass BCM 2 und 3 die Broadcom-Nummerierung ist, nicht die GPIO-Pinbelegung.

(Sie können sich auf dieses Dokument beziehen, Seite 102für einen Überblick über die verschiedenen GPIO-Pin-Modi, falls Sie daran interessiert sind)

lsmod

lsmod zeigt an, welche I2C-Module geladen sind:

lsmod | grep i2c

i2c_bcm2835 16384 0
i2c_dev 20480 0

Bild

Es macht also keinen Unterschied, ob I2C aktiviert ist - Sie kann nicht verwenden Sie dies als Test.

i2cdetect:

Ein letzter Test besteht darin, i2cdetect auszuführen, um den Adressbereich zu scannen. Bei modernen Pis müssen Sie 1 als Port angeben:

sudo i2cdetect -y 1

wenn I2C deaktiviert ist, wird ein Fehler angezeigt:

Fehler: Die Datei `/dev/i2c-1′ oder `/dev/i2c/1′ konnte nicht geöffnet werden: Keine solche Datei oder Verzeichnis

Bild

Fallstricke und Probleme mit dem I2C-Port, FAQ

Ist ein Neustart erforderlich, um den I2C-Port zu aktivieren?

Aus meiner Sicht ist ein Neustart nicht notwendig. Ich habe mir den Code von raspi-config angesehen, und sie fragen nach einem Neustart für andere Ports (z.B. UART), aber nicht für den I2C-Port.

Wenn Sie den I2C-Status dynamisch ein- und ausschalten, können Sie außerdem überprüfen, ob der Geräteknoten erstellt wurde und der I2C-Bereich mit i2cdetect ohne Neustart gescannt werden kann.

Wenn alles andere fehlschlägt, sollten Sie dennoch einen Neustart versuchen - das könnte bei einigen anderen Bedingungen helfen.

gibt es weitere Möglichkeiten, raspi-config zu steuern, z.B. für die UART- und SPI-Ports, für SSH, etc.

Sicher - raspi-config unterstützt im nicht-interaktiven Modus eine breite Palette verschiedener Optionen.

alle diese Befehle werden mit

raspi-config nonint

Sie können einen Blick auf die raspi-config-Quellcode, oder siehe dieser nützliche Beitrag im Raspberry Pi-Forum.

auch hier gilt die (für manche Entwickler verwirrende) Konvention, dass 0 = wahr / ein und 1 = falsch / aus ist

i2cdetect kann nicht scannen

Wenn Sie den folgenden Fehler erhalten:

Fehler: Die Datei `/dev/i2c-1′ oder `/dev/i2c/1′ konnte nicht geöffnet werden: Keine solche Datei oder Verzeichnis

I2C ist höchstwahrscheinlich deaktiviert. Versuchen Sie, es mit der Anleitung in diesem Artikel oder mit raspi-config zu aktivieren, und versuchen Sie dann, den I2C-Port erneut zu scannen.

Sie können die in diesem Artikel vorgestellten Methoden verwenden, um den Zustand des I2C-Ports Ihres Raspberry Pi zu überprüfen.

gpio readall kann den Kartentyp nicht bestimmen

wenn Sie diese Meldung erhalten, wenn Sie versuchen, gpio readall auf einem Raspberry Pi 4 auszuführen:

13:01:19 pi@Avalon:/dev $ sudo gpio readall

Ups - kann den Kartentyp nicht bestimmen... Modell: 17

Sie müssen eine neuere Version von wiringpi vom Autor installieren (sie ist noch nicht in den Upstream-Repositories). Dieser Artikel beschreibt, wie man es macht.

Hier ist die Kurzfassung:

cd /tmp

wget https://project-downloads.drogon.net/wiringpi-latest.deb

sudo dpkg -i wiringpi-latest.deb

Bild