Cuprins:

Dispozitive multiple Raspberry PI I2C: 3 pași
Dispozitive multiple Raspberry PI I2C: 3 pași

Video: Dispozitive multiple Raspberry PI I2C: 3 pași

Video: Dispozitive multiple Raspberry PI I2C: 3 pași
Video: Lesson 32: MCP9808 High Accuracy I2C Temperature | Arduino Step By Step Course 2024, Noiembrie
Anonim
Dispozitive multiple Raspberry PI I2C
Dispozitive multiple Raspberry PI I2C
Dispozitive multiple Raspberry PI I2C
Dispozitive multiple Raspberry PI I2C

Frustrat pentru că nu puteți utiliza multipli ai aceluiași dispozitiv I2C în proiectul dvs. Nu este nevoie să folosiți multiplexoare lente. Cel mai recent kernel raspbian acceptă crearea mai multor autobuze I2C folosind pini GPIO. Această soluție este super rapidă.

Pasul 1: Unele comenzi Shell

Unele comenzi Shell
Unele comenzi Shell

Conectați unul dintre dispozitivele dvs. i2c în timp ce raspberry pi este activ, porniți raspberry pi și rulați

sudo i2cdetect -y 1

Veți vedea un tabel ca în figura atașată. Am atașat un senzor BMP280 de temperatură și presiune barometrică. Adresa i2c este 0x76 conform tabelului. Rețineți această adresă.

Faceți acest lucru pentru toate dispozitivele dvs. i2c.

Pasul 2: Primul caz: Dispozitivele I2c au aceeași adresă

Primul caz: Dispozitivele I2c au aceeași adresă
Primul caz: Dispozitivele I2c au aceeași adresă

Acesta a fost întotdeauna cazul problematic. O magistrală i2c poate gestiona mai multe dispozitive, dar acestea ar trebui să aibă adrese i2c diferite. Unele dispozitive i2c au jumperi pentru a seta alte adrese i2c, dar multe nu. În acest caz, puteți utiliza un multiplexor i2c (hardware) pentru a roti i2c SDA (date) și SCL (ceas) sau puteți crea o magistrală i2c suplimentară sau mai mult.

Voi crea două autobuze suplimentare, nl autobuzul 3 și 4

Deschideți cli și rulați

cd / boot

sudo nano config.txt

Adăugați următoarea linie de cod, de preferat în secțiunea în care sunt activate spi și i2c.

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

Această linie va crea o magistrală i2c suplimentară (magistrala 4) pe GPIO 23 ca SDA și GPIO 24 ca SCL (GPIO 23 și 24 este implicit)

Adăugați, de asemenea, următoarea linie pentru a crea magistrala i2c 3

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

GPIO 17 va fi SDA și GPIO 27 va fi SCL pentru i2c bus 4.

Tastați comanda X pentru a ieși.

Notă privind numerotarea și comanda autobuzului:

Nu folosiți niciodată autobuzele 0 și 2, este folosit pentru alte lucruri din tablă, cum ar fi eprom pe pălării etc.

Pentru lansarea raspbian din aprilie 2019:

Ar trebui să începeți întotdeauna cu cel mai înalt autobuz (autobuzul 4 în acest caz) din config.txt și să mergeți până la cel mai mic autobuz (autobuzul 3).

Cel mai mic autobuz trebuie să fie întotdeauna autobuzul 3

Dacă aveți nevoie de 5 autobuze suplimentare, autobuzele trebuie să fie în ordinea 7, 6, 5, 4, 3

Această problemă a comenzii cu autobuzul nu exista atunci când a fost scris inițial acest instructabil. Se pare că s-au făcut modificări la nucleu.

Opriți PI-ul, schimbați-l. Conectați dispozitivele i2c la magistrala 4 (SDA la GPIO 23 și SCL la GPIO 24) și cealaltă la magistrala i2c 3 (SDA la GPIO 17 și SCL la GPIO 27).

Porniți pi.

Alerga:

sudo i2cdetect -l (litere mici L)

Veți vedea acum că și autobuzele i2c 3 și 4 sunt listate. Rulați și:

sudo i2cdetect -y 3

sudo i2cdetect -y 4

Acum puteți utiliza senzorul în limbajul de programare. Nu uitați să specificați autobuzele i2c corecte.

Atașați este un exemplu pentru popularul senzor de temperatură și presiune BMP280. Niciun multiplexor nu poate citi 2 BMP280 atât de repede.

Un exemplu de 2 senzori Sensirion SDP 810 este, de asemenea, atașat. Din nou, lucrez mult mai repede decât multiplexorul pe care l-am folosit în trecut

Am creat codul python pentru a citi două BMP388 noi de la adafruit.

Pot adăuga și alți senzori pe viitor la

Pasul 3: Cazul 2: Adrese I2c diferite

Simplu. i2c este un autobuz. Un serviciu de autobuz trebuie să comunice cu mai multe dispozitive. Conectați dispozitivele paralele la aceeași magistrală i2c. Puteți folosi autobuzul unu.

Alerga:

sudo i2cdetect -y 1

Veți vedea dispozitivele listate.

Recomandat: