Inhoudsopgave:

Raspberry PI Meerdere I2C-apparaten - Ajarnpa
Raspberry PI Meerdere I2C-apparaten - Ajarnpa

Video: Raspberry PI Meerdere I2C-apparaten - Ajarnpa

Video: Raspberry PI Meerdere I2C-apparaten - Ajarnpa
Video: Verwendung von 2 oder mehr VL53L0X Laser-Distanzsensoren 2024, Juli-
Anonim
Raspberry PI Meerdere I2C-apparaten
Raspberry PI Meerdere I2C-apparaten
Raspberry PI Meerdere I2C-apparaten
Raspberry PI Meerdere I2C-apparaten

Gefrustreerd omdat je geen veelvouden van dezelfde I2C-apparaten in je project kunt gebruiken. Het is niet nodig om langzame multiplexers te gebruiken. De nieuwste raspbian-kernel ondersteunt het maken van meerdere I2C-bussen met behulp van GPIO-pinnen. Deze oplossing is supersnel.

Stap 1: Enkele Shell-opdrachten

Enkele Shell-opdrachten
Enkele Shell-opdrachten

Sluit een van je i2c-apparaten aan terwijl je raspberry pi uit staat, start je raspberry pi en start

sudo i2cdetect -y 1

U ziet een tabel zoals in de bijgevoegde afbeelding. Ik heb een BMP280 temperatuur- en luchtdruksensor bevestigd. Het i2c-adres is 0x76 volgens de tabel. Noteer dit adres.

Doe dit voor al je i2c-apparaten.

Stap 2: Case One: I2c-apparaten hebben hetzelfde adres

Case één: I2c-apparaten hebben hetzelfde adres
Case één: I2c-apparaten hebben hetzelfde adres

Dit was altijd het problematische geval. Een i2c-bus kan meerdere apparaten aan, maar ze moeten verschillende i2c-adressen hebben. Sommige i2c-apparaten hebben jumpers om andere i2c-adressen in te stellen, maar veel niet. In dit geval kunt u een i2c-multiplexer (hardware) gebruiken om de i2c SDA (Data) en SCL (Clock) te roteren of u kunt een extra i2c-bus of meer maken.

Ik maak nog twee bussen aan, nl bus 3 en 4

Open de cli en start

cd /boot

sudo nano config.txt

Voeg de volgende regel code toe, bij voorkeur in de sectie waar spi en i2c zijn ingeschakeld.

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

Deze lijn creëert een extra i2c-bus (bus 4) op GPIO 23 als SDA en GPIO 24 als SCL (GPIO 23 en 24 zijn standaard)

Voeg ook de volgende regel toe om i2c-bus 3. te maken

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

GPIO 17 wordt de SDA en GPIO 27 wordt de SCL voor i2c bus 4.

Tipe controle X om af te sluiten.

Opmerking over de busnummering en bestelling:

Gebruik nooit bus 0 en 2, het is te gebruiken voor andere dingen op het bord zoals eprom op hoeden enz.

Voor de raspbian-release van april 2019:

Je moet altijd beginnen met de hoogste bus (Bus 4 in dit geval) in je config.txt en doorwerken naar de laagste bus (bus 3).

De laagste bus moet altijd bus 3. zijn

Als je 5 extra bussen nodig hebt, moeten de bussen bi in de volgorde 7, 6, 5, 4, 3

Dit probleem met de busbestelling was er niet toen deze Instructable oorspronkelijk werd geschreven. Het lijkt erop dat er wijzigingen zijn aangebracht in de kernel.

Zet je PI uit, zet hem uit. Sluit uw i2c-apparaten aan op bus 4 (SDA naar GPIO 23 en SCL naar GPIO 24) en de andere op i2c-bus 3 (SDA naar GPIO 17 en SCL naar GPIO 27).

Zet de pi aan.

Loop:

sudo i2cdetect -l (Kleine letters L)

Je zult nu zien dat i2c bus 3 en 4 ook in de lijst staan. Voer ook uit:

sudo i2cdetect -y 3

sudo i2cdetect -y 4

Nu kunt u uw sensor in uw programmeertaal gebruiken. Vergeet niet om de juiste i2c-bussen op te geven.

Attach is een voorbeeld voor de populaire BMP280 temperatuur- en druksensor. Geen enkele multiplexer kan 2 BMP280's zo snel lezen.

Een voorbeeld van 2 Sensirion SDP 810 sensoren is ook bevestigd. Werkt weer veel sneller dan de multiplexer die ik in het verleden gebruikte

Ik heb python-code gemaakt om twee nieuwe BMP388's van adafruit te lezen.

Ik kan in de toekomst ook andere sensoren toevoegen aan

Stap 3: Case 2: Verschillende I2c-adressen

Eenvoudig. i2c is een bus. Een busdoel is om met meerdere apparaten te communiceren. Sluit de apparaten parallel aan op dezelfde i2c-bus. U kunt bus één gebruiken.

Loop:

sudo i2cdetect -y 1

U ziet de apparaten in de lijst.

Aanbevolen: