Inschakelen en controleren van I2C op de Raspberry Pi via de opdrachtregel voor uw eigen scripts

De meeste mensen weten dat je de I2C poort kunt inschakelen met raspi-config.

raspi-config biedt ook een niet-interactieve modus, waarin u de functionaliteit kunt sturen met behulp van opdrachtregelparameters.

Uitlezen van de huidige status van de I2C poort op de Raspberry Pi

Hier is hoe je de huidige status van de I2C poort kunt lezen:

sudo raspi-config nonint get_i2c

Dit commando zal terugkomen:

  • 1 als de poort is uitgeschakeld
  • 0 als de poort is ingeschakeld

Let op: in dit geval is de logica bash scripting! "0 betekent waar of geen fout, en alle andere getallen betekenen een foutcode". Dit had me eerst te pakken!

Opmerking: nonint staat voor "niet-interactief"

Inschakelen van I2C op de Raspberry Pi met één eenvoudig commando

Opnieuw kunnen we met raspi-config de toestand van de I2C poort instellen. Het gebruik van raspi-config heeft het voordeel dat het veel bijkomende dingen voor je regelt, en zou upwards compatibel moeten zijn. Achter de schermen zal raspi-config bijvoorbeeld /boot/config.txt voor je bewerken, en ook de device tree bijwerken.

Hier staat hoe u de I2C-poort kunt inschakelen:

sudo raspi-config nonint do_i2c 0

Nogmaals, merk op dat 0 betekent waar / op hier!

Hier staat hoe u de I2C-poort kunt uitschakelen:

sudo raspi-config nonint do_i2c 1

1 betekent "vals" of uit voor dit doel.

Controleren of I2C is ingeschakeld

raspi-config in niet-interactieve modus

zoals hierboven vermeld, kunt u de toestand van de I2C-poort lezen met

sudo raspi-config nonint get_i2c

afbeelding

De schermafbeelding toont de uitvoer wanneer de I2C poort is ingeschakeld (0 = true)

I2C apparaatknooppunt

Wanneer I2C is ingeschakeld op de Raspberry Pi, zult u ook een /dev node hiervoor zien:

ls /dev/i2*

/dev/i2c-1

Opmerking: op de eerste Raspberry Pi modellen was de I2C poort blootgesteld aan gebruikers I2C 0, dus zou men /dev/i2c-0 verwachten

afbeelding

De schermafbeelding toont dat het i2c-1 knooppunt bestaat in /dev

gpio readall

Hier is de uitvoer van

sudo gpio readall

afbeelding

Voor BCM 2 en 3, zie je "SDA1" (I2C data) en "SCL1" (I2C klok) onder Name. Ook de modus is ALT0, wat overeenkomt met de I2C functie op deze specifieke pennen (GPIO2, GPIO3).

Merk op dat BCM 2 en 3 de Broadcom nummering is, niet de GPIO pinout. De GPIO pin positie is de eerste kolom in "Physical" (pinnen 3 en 5).

(U kunt dit document raadplegen, blz. 102voor een overzicht van de verschillende GPIO pin modes als u geïnteresseerd bent)

lsmod

lsmod zal je I2C modules tonen die geladen zijn:

lsmod | grep i2c

i2c_bcm2835 16384 0
i2c_dev 20480 0

afbeelding

dus geen verschil als I2C is uitgeschakeld.

i2cdetect:

Een laatste test is om i2cdetect te draaien om het adresbereik te scannen. Voor moderne Pis moet je 1 specificeren als de poort:

sudo i2cdetect -y 1

dit zal een tabel weergeven van de huidig gedetecteerde I2C apparaten.

afbeelding

opmerking: omdat in mijn geval geen I2C-apparaten waren aangesloten, verschijnen er ook geen I2C-apparaten - deze uitvoer wordt verwacht.

Controleren of I2C is uitgeschakeld

raspi-config in niet-interactieve modus

zoals hierboven vermeld, kunt u de toestand van de I2C-poort lezen met

sudo raspi-config nonint get_i2c

afbeelding

De schermafbeelding toont de uitvoer wanneer de I2C poort is uitgeschakeld (1 = false)

I2C apparaatknooppunt

Als I2C op de Raspberry Pi is uitgeschakeld, zult u geen /dev node zien:

ls /dev/i2*

ls: geen toegang tot '/dev/i2*': No such file or directory

afbeelding

De schermafbeelding laat zien dat er geen i2c nodes bestaan in /dev.

gpio readall

Hier is de uitvoer van

sudo gpio readall

afbeelding

Voor BCM 2 en 3, ziet u "SDA1" (I2C data) en "SCL1" (I2C klok) onder Name.

In tegenstelling tot de ingeschakelde versie (zie hierboven) is de modus echter IN, de pen is nu een GPIO ingang.

Merk op dat BCM 2 en 3 de Broadcom nummering is, niet de GPIO pinout.

(U kunt dit document raadplegen, blz. 102voor een overzicht van de verschillende GPIO pin modes als u geïnteresseerd bent)

lsmod

lsmod zal je I2C modules tonen die geladen zijn:

lsmod | grep i2c

i2c_bcm2835 16384 0
i2c_dev 20480 0

afbeelding

dus geen verschil als I2C wordt ingeschakeld - u kan niet gebruik dit als een test.

i2cdetect:

Een laatste test is om i2cdetect te draaien om het adresbereik te scannen. Voor moderne Pis moet je 1 specificeren als de poort:

sudo i2cdetect -y 1

als I2C is uitgeschakeld, zal dit een fout geven:

Error: Kon bestand `/dev/i2c-1′ of `/dev/i2c/1′ niet openen: No such file or directory

afbeelding

Valkuilen & Problemen met de I2C poort, FAQ

Is een reboot nodig om de I2C poort in te schakelen?

Vanuit mijn perspectief is een reboot niet nodig. Ik heb gekeken naar de code van raspi-config, en ze vragen om reboot voor andere poorten (b.v. UART), maar niet voor de I2C poort.

Ook kunt u bij het dynamisch in- en uitschakelen van de I2C-status controleren of het apparaatknooppunt is gemaakt en het I2C-bereik kan worden gescand met i2cdetect zonder opnieuw te hoeven opstarten.

Als al het andere faalt, ga je gang en probeer opnieuw op te starten - het zou kunnen helpen met sommige andere voorwaarden.

zijn er meer mogelijkheden om raspi-config aan te sturen, voor b.v. de UART en SPI poorten, voor SSH, etc.?

Zeker - raspi-config ondersteunt een groot aantal verschillende opties in de niet-interactieve modus.

al deze commando's worden uitgevoerd met

raspi-config nonint

U kunt een kijkje nemen op de raspi-config broncodeof verwijzen naar dit nuttige bericht in het Raspberry Pi forum.

nogmaals, let op de (voor sommige ontwikkelaars verwarrende) conventie dat 0 = waar / aan en 1 = onwaar / uit

i2cdetect kan niet scannen

Als u de volgende foutmelding krijgt:

Error: Kon bestand `/dev/i2c-1′ of `/dev/i2c/1′ niet openen: No such file or directory

I2C is waarschijnlijk uitgeschakeld. Probeer het in te schakelen, met de how-to in dit artikel of met raspi-config, en probeer dan de I2C poort opnieuw te scannen.

U kunt de in dit artikel beschreven methoden gebruiken om de toestand van de I2C-poort op uw Raspberry Pi te controleren.

gpio readall kan type bord niet bepalen

als u dit bericht krijgt wanneer u gpio readall probeert uit te voeren op een Raspberry Pi 4:

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

Oeps - niet in staat om board type te bepalen... model: 17

U moet een nieuwere versie van wiringpi van de auteur installeren (deze staat nog niet in de upstream repositories). Dit artikel beschrijft hoe je het moet doen.

Hier is de korte versie:

cd /tmp

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

sudo dpkg -i wiringpi-latest.deb

afbeelding