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
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
Der Screenshot zeigt, dass der i2c-1-Knoten in /dev existiert
gpio readall
Hier ist die Ausgabe von
sudo gpio readall
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
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.
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
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
Der Screenshot zeigt, dass keine i2c-Knoten in /dev existieren.
gpio readall
Hier ist die Ausgabe von
sudo gpio readall
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
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
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