Raspberry PI više I2C uređaja: 3 koraka
Raspberry PI više I2C uređaja: 3 koraka
Raspberry PI više I2C uređaja
Raspberry PI više I2C uređaja
Raspberry PI više I2C uređaja
Raspberry PI više I2C uređaja

Frustrirano jer ne možete koristiti više istih I2C uređaja u svom projektu. Nema potrebe za upotrebom sporih multipleksera. Najnovije raspbian kernel podržava stvaranje više I2C sabirnica koristeći GPIO pinove. Ovo rješenje je super brzo.

Korak 1: Neke naredbe ljuske

Neke naredbe ljuske
Neke naredbe ljuske

Povežite jedan od svojih i2c uređaja dok je vaš malina pi, pokrenite malinu pi i pokrenite

sudo i2cdetect -y 1

Vidjet ćete tablicu kao na priloženoj slici. Priložio sam senzor temperature i barometarskog pritiska BMP280. I2c adresa je 0x76 prema tablici. Zapamtite ovu adresu.

Učinite to za sve svoje i2c uređaje.

Korak 2: Prvi slučaj: I2c uređaji imaju istu adresu

Prvi slučaj: I2c uređaji imaju istu adresu
Prvi slučaj: I2c uređaji imaju istu adresu

Ovo je uvijek bio problematičan slučaj. Sabirnica i2c može rukovati s više uređaja, ali oni bi trebali imati različite i2c adrese. Neki i2c uređaji imaju kratkospojnike za postavljanje drugih i2c adresa, ali mnogi nemaju. U ovom slučaju možete koristiti i2c multiplekser (hardver) za rotiranje i2c SDA (podaci) i SCL (sat) ili možete stvoriti dodatnu i2c sabirnicu ili više.

Napravit ću dvije dodatne magistrale, nl sabirnice 3 i 4

Otvorite cli i pokrenite

cd /boot

sudo nano config.txt

Dodajte sljedeći red koda, po mogućnosti u odjeljak u kojem su omogućeni spi i i2c.

dtoverlay = i2c-gpio, sabirnica = 4, i2c_gpio_delay_us = 1, i2c_gpio_sda = 23, i2c_gpio_scl = 24

Ova linija će stvoriti dodatnu i2c sabirnicu (sabirnica 4) na GPIO 23 kao SDA i GPIO 24 kao SCL (GPIO 23 i 24 su zadane vrijednosti)

Dodajte i sljedeći redak za kreiranje i2c sabirnice 3

dtoverlay = i2c-gpio, sabirnica = 3, i2c_gpio_delay_us = 1, i2c_gpio_sda = 17, i2c_gpio_scl = 27

GPIO 17 bit će SDA, a GPIO 27 SCL za i2c sabirnicu 4.

Tipkom X za izlaz.

Napomena o numeraciji i redoslijedu sabirnica:

Nikada ne koristite sabirnice 0 i 2, koristi se za druge stvari na ploči, poput eproma na šeširima itd

Za raspbansko izdanje u aprilu 2019.:

Uvijek biste trebali početi s najvišom sabirnicom (u ovom slučaju sabirnica 4) u vašem config.txt -u i raditi do najniže sabirnice (sabirnica 3).

Najniži autobus mora uvijek biti autobus 3

Ako vam je potrebno 5 dodatnih autobusa, autobusi bi trebali biti bi u redoslijedu 7, 6, 5, 4, 3

Ovo pitanje o naručivanju autobusa nije postojalo kada je ovaj Instructable izvorno napisan. Čini se da su u kernelu napravljene promjene.

Isključite svoj PI, isključite ga. Povežite svoje i2c uređaje na sabirnicu 4 (SDA na GPIO 23 i SCL na GPIO 24), a drugu na i2c sabirnicu 3 (SDA na GPIO 17 i SCL na GPIO 27).

Uključite pi.

Trčanje:

sudo i2cdetect -l (mala slova L)

Sada ćete vidjeti da su i2c sabirnice 3 i 4 također navedene. Takođe pokrenite:

sudo i2cdetect -y 3

sudo i2cdetect -y 4

Sada možete koristiti svoj senzor u svom programskom jeziku. Ne zaboravite navesti ispravne sabirnice i2c.

Attach je primjer popularnog BMP280 osjetnika temperature i pritiska. Nijedan multiplekser ne može pročitati 2 BMP280 tako brzo.

U prilogu je i primjer 2 senzora Sensirion SDP 810. Opet radi mnogo brže od multipleksera koji sam koristio u prošlosti

Napravio sam python kod za čitanje dva nova BMP388 iz adafruit -a.

U budućnosti mogu dodati i druge senzore na

Korak 3: Slučaj 2: Različite I2c adrese

Jednostavno. i2c je autobus. Vlasnik sabirnice treba komunicirati s više uređaja. Spojite uređaje paralelno na istu i2c sabirnicu. Možete koristiti autobus jedan.

Trčanje:

sudo i2cdetect -y 1

Vidjet ćete navedene uređaje.

Preporučuje se: