Innholdsfortegnelse:
Video: Bringebær PI Flere I2C -enheter: 3 trinn
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
Frustrert fordi du ikke kan bruke flere av de samme I2C -enhetene i prosjektet ditt. Du trenger ikke å bruke sakte multiplexere. Den siste raspbian -kjernen støtter opprettelsen av flere I2C -busser ved hjelp av GPIO -pins. Denne løsningen er superrask.
Trinn 1: Noen Shell -kommandoer
Koble til en av i2c -enhetene dine mens bringebærpi er av, start bringebærpien og kjør
sudo i2cdetect -y 1
Du vil se et bord som i vedleggsfiguren. Jeg har festet en BMP280 temp og barometrisk trykksensor. I2c -adressen er 0x76 i henhold til tabellen. Legg merke til denne adressen.
Gjør dette for alle i2c -enhetene dine.
Trinn 2: Sak 1: I2c -enheter har samme adresse
Dette var alltid den problematiske saken. En i2c -buss kan håndtere flere enheter, men de bør ha forskjellige i2c -adresser. Noen i2c -enheter har hoppere for å angi andre i2c -adresser, men mange gjør det ikke. I dette tilfellet kan du bruke en i2c multiplexer (maskinvare) til å rotere i2c SDA (Data) og SCL (Clock), eller du kan opprette en ekstra i2c -buss eller mer.
Jeg skal lage to tilleggsbusser, nl buss 3 og 4
Åpne cli og kjør
cd /oppstart
sudo nano config.txt
Legg til følgende kodelinje, helst i delen der spi og i2c er aktivert.
dtoverlay = i2c-gpio, buss = 4, i2c_gpio_delay_us = 1, i2c_gpio_sda = 23, i2c_gpio_scl = 24
Denne linjen vil opprette en ekstra i2c -buss (buss 4) på GPIO 23 som SDA og GPIO 24 som SCL (GPIO 23 og 24 er standard)
Legg også til følgende linje for å lage i2c -buss 3
dtoverlay = i2c-gpio, buss = 3, i2c_gpio_delay_us = 1, i2c_gpio_sda = 17, i2c_gpio_scl = 27
GPIO 17 vil være SDA og GPIO 27 vil være SCL for i2c buss 4.
Rør kontroll X for å gå ut.
Merknad om bussnummerering og rekkefølge:
Bruk aldri buss 0 og 2, den er bruk for andre ting i brettet som eprom på hatter osv
For raspbian -utgivelsen i april 2019:
Du bør alltid starte med den høyeste bussen (buss 4 i dette tilfellet) i config.txt og gå videre til den laveste bussen (buss 3).
Den laveste bussen må alltid være buss 3
Hvis du trenger 5 ekstra busser, må bussene være i størrelsesorden 7, 6, 5, 4, 3
Dette problemet om bussordre var ikke der da denne instruksjonsboken opprinnelig ble skrevet. Det virker som om det ble gjort endringer i kjernen.
Slå av PI -en, slå den av. Koble i2c -enhetene dine til buss 4 (SDA til GPIO 23 og SCL til GPIO 24) og den andre til i2c -buss 3 (SDA til GPIO 17 og SCL til GPIO 27).
Slå på pi.
Løpe:
sudo i2cdetect -l (liten bokstav L)
Du vil nå se at i2c buss 3 og 4 også er oppført. Kjør også:
sudo i2cdetect -y 3
sudo i2cdetect -y 4
Nå kan du bruke sensoren din i programmeringsspråket. Husk å angi riktige i2c -busser.
Attach er et eksempel på den populære BMP280 temperatur- og trykksensoren. Ingen multiplexer kan lese 2 BMP280 -er så fort.
Et eksempel på 2 Sensirion SDP 810 sensorer er også vedlagt. Jobber igjen mye raskere enn multiplexeren jeg brukte tidligere
Jeg opprettet python -kode for å lese to nye BMP388 fra adafruit.
Jeg kan også legge til andre sensorer i fremtiden på
Trinn 3: Sak 2: forskjellige I2c -adresser
Enkel. i2c er en buss. En bussformål er å kommunisere med flere enheter. Koble enhetene parallelt med den samme i2c -bussen. Du kan bruke buss en.
Løpe:
sudo i2cdetect -y 1
Du vil se enhetene oppført.