Indholdsfortegnelse:

Hindbær PI Flere I2C -enheder: 3 trin
Hindbær PI Flere I2C -enheder: 3 trin

Video: Hindbær PI Flere I2C -enheder: 3 trin

Video: Hindbær PI Flere I2C -enheder: 3 trin
Video: День Стройки #Лайфхак #Ким #свс Азы Новичкам база знаний #theants Underground Kingdom 2024, November
Anonim
Hindbær PI Flere I2C -enheder
Hindbær PI Flere I2C -enheder
Hindbær PI Flere I2C -enheder
Hindbær PI Flere I2C -enheder

Frustreret, fordi du ikke kan bruge multipler af de samme I2C -enheder i dit projekt. Ingen grund til at bruge langsomme multiplexere. Den nyeste raspbian -kerne understøtter oprettelsen af flere I2C -busser ved hjælp af GPIO -pins. Denne løsning er super hurtig.

Trin 1: Nogle Shell -kommandoer

Nogle Shell -kommandoer
Nogle Shell -kommandoer

Tilslut en af dine i2c -enheder, mens din hindbærpi er af, start din hindbærpi og kør

sudo i2cdetect -y 1

Du vil se et bord som i vedhæftede figur. Jeg har vedhæftet en BMP280 temp og barometrisk tryk sensor. I2c -adressen er 0x76 ifølge tabellen. Bemærk denne adresse.

Gør dette for alle dine i2c -enheder.

Trin 2: Sag et: I2c -enheder har samme adresse

Sag et: I2c -enheder har samme adresse
Sag et: I2c -enheder har samme adresse

Dette var altid den problematiske sag. En i2c -bus kan håndtere flere enheder, men de skal have forskellige i2c -adresser. Nogle i2c -enheder har jumpere til at indstille andre i2c -adresser, men mange gør det ikke. I dette tilfælde kan du bruge en i2c -multiplexer (hardware) til at rotere i2c SDA (data) og SCL (ur), eller du kan oprette en ekstra i2c -bus eller mere.

Jeg vil oprette to ekstra busser, nl bus 3 og 4

Åbn cli og kør

cd /boot

sudo nano config.txt

Tilføj følgende kodelinje, helst i afsnittet, hvor spi og i2c er aktiveret.

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

Denne linje opretter en ekstra i2c -bus (bus 4) på GPIO 23 som SDA og GPIO 24 som SCL (GPIO 23 og 24 er standard)

Tilføj også følgende linje for at oprette i2c bus 3

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

GPIO 17 bliver SDA og GPIO 27 bliver SCL for i2c bus 4.

Rør kontrol X for at afslutte.

Bemærk om busnummerering og ordre:

Brug aldrig bus 0 og 2, den kan bruges til andre ting i tavlen som eprom på hatte osv

Til raspbian -udgivelsen i april 2019:

Du bør altid starte med den højeste bus (Bus 4 i dette tilfælde) i din config.txt og arbejde videre til den laveste bus (bus 3).

Den laveste bus skal altid være bus 3

Hvis du har brug for 5 ekstra busser, skal busserne have bi i størrelsesordenen 7, 6, 5, 4, 3

Dette problem om busordre var der ikke, da denne instruktionsbog oprindeligt blev skrevet. Det ser ud til, at der blev foretaget ændringer i kernen.

Luk din PI, sluk den. Tilslut dine i2c -enheder til bus 4 (SDA til GPIO 23 og SCL til GPIO 24) og den anden til i2c -bus 3 (SDA til GPIO 17 og SCL til GPIO 27).

Tænd for pi.

Løb:

sudo i2cdetect -l (små bogstaver L)

Du vil nu se, at i2c bus 3 og 4 også er angivet. Kør også:

sudo i2cdetect -y 3

sudo i2cdetect -y 4

Nu kan du bruge din sensor i dit programmeringssprog. Husk at angive de korrekte i2c -busser.

Attach er et eksempel på den populære BMP280 temperatur- og tryksensor. Ingen multiplexer kan læse 2 BMP280'er så hurtigt.

Et eksempel på 2 Sensirion SDP 810 sensorer er også vedhæftet. Igen arbejdede meget hurtigere end multiplexeren, jeg tidligere brugte

Jeg oprettede python -kode for at læse to nye BMP388'er fra adafruit.

Jeg kan også fremover tilføje andre sensorer til

Trin 3: Sag 2: Forskellige I2c -adresser

Enkel. i2c er en bus. Et busformål er at kommunikere med flere enheder. Tilslut enhederne parallelt med den samme i2c -bus. Du kan bruge bus en.

Løb:

sudo i2cdetect -y 1

Du vil se enhederne på listen.

Anbefalede: