Innehållsförteckning:

Hallon PI Flera I2C -enheter: 3 steg
Hallon PI Flera I2C -enheter: 3 steg

Video: Hallon PI Flera I2C -enheter: 3 steg

Video: Hallon PI Flera I2C -enheter: 3 steg
Video: Введение в LCD2004 ЖК-дисплей с модулем I2C для Arduino 2024, Juli
Anonim
Hallon PI Flera I2C -enheter
Hallon PI Flera I2C -enheter
Hallon PI Flera I2C -enheter
Hallon PI Flera I2C -enheter

Frustrerad eftersom du inte kan använda multiplar av samma I2C -enheter i ditt projekt. Du behöver inte använda långsamma multiplexer. Den senaste raspbian -kärnan stöder skapandet av flera I2C -bussar med GPIO -pins. Denna lösning är supersnabb.

Steg 1: Några Shell -kommandon

Några Shell -kommandon
Några Shell -kommandon

Anslut en av dina i2c -enheter medan din hallonpi är av, starta din hallonpi och kör

sudo i2cdetect -y 1

Du kommer att se en tabell som i bifogade figur. Jag har kopplat en BMP280 temp och barometrisk trycksensor. I2c -adressen är 0x76 enligt tabellen. Notera den här adressen.

Gör detta för alla dina i2c -enheter.

Steg 2: Fall ett: I2c -enheter har samma adress

Fall ett: I2c -enheter har samma adress
Fall ett: I2c -enheter har samma adress

Detta var alltid det problematiska fallet. En i2c -buss kan hantera flera enheter, men de bör ha olika i2c -adresser. Vissa i2c -enheter har hoppare för att ställa in andra i2c -adresser, men många gör det inte. I det här fallet kan du använda en i2c -multiplexer (hårdvara) för att rotera i2c SDA (Data) och SCL (Clock) eller så kan du skapa en extra i2c -buss eller mer.

Jag kommer att skapa två extra bussar, nl buss 3 och 4

Öppna cli och kör

cd /boot

sudo nano config.txt

Lägg till följande kodrad, helst i avsnittet där spi och i2c är aktiverat.

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

Denna linje skapar en extra i2c -buss (buss 4) på GPIO 23 som SDA och GPIO 24 som SCL (GPIO 23 och 24 är standard)

Lägg också till följande rad för att skapa i2c -buss 3

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

GPIO 17 blir SDA och GPIO 27 blir SCL för i2c -buss 4.

Rör kontroll X för att gå ur.

Anmärkning om bussnumreringen och ordningen:

Använd aldrig buss 0 och 2, den kan användas för andra saker i tavlan som eprom på hattar etc.

För raspbian -utgåvan i april 2019:

Du bör alltid börja med den högsta bussen (buss 4 i detta fall) i din config.txt och gå vidare till den lägsta bussen (buss 3).

Den lägsta bussen måste alltid vara buss 3

Om du behöver 5 extra bussar måste bussarna vara i storleksordningen 7, 6, 5, 4, 3

Denna fråga om bussorder fanns inte när denna instruktionsbok ursprungligen skrevs. Det verkar som om ändringar gjordes i kärnan.

Stäng av din PI, slå på den. Anslut dina i2c -enheter till buss 4 (SDA till GPIO 23 och SCL till GPIO 24) och den andra till i2c -buss 3 (SDA till GPIO 17 och SCL till GPIO 27).

Slå på pi.

Springa:

sudo i2cdetect -l (gemener L)

Du kommer nu att se att i2c buss 3 och 4 också är listad. Kör också:

sudo i2cdetect -y 3

sudo i2cdetect -y 4

Nu kan du använda din sensor i ditt programmeringsspråk. Kom ihåg att ange rätt i2c -bussar.

Attach är ett exempel på den populära BMP280 temperatur- och trycksensorn. Ingen multiplexer kan läsa 2 BMP280s så snabbt.

Ett exempel på 2 Sensirion SDP 810 -sensorer är också bifogat. Återigen fungerar mycket snabbare än multiplexern jag använde tidigare

Jag skapade pythonkod för att läsa två nya BMP388 från adafruit.

Jag kan också lägga till andra sensorer i framtiden till

Steg 3: Fall 2: Olika I2c -adresser

Enkel. i2c är en buss. En buss är avsedd att kommunicera med flera enheter. Anslut enheterna parallellt med samma i2c -buss. Du kan använda buss ett.

Springa:

sudo i2cdetect -y 1

Du kommer att se enheterna listade.

Rekommenderad: