Tabla de contenido:

Dispositivos I2C múltiples Raspberry PI: 3 pasos
Dispositivos I2C múltiples Raspberry PI: 3 pasos

Video: Dispositivos I2C múltiples Raspberry PI: 3 pasos

Video: Dispositivos I2C múltiples Raspberry PI: 3 pasos
Video: 🔵✅CODESYS 3.5 -COMUNICAR RASPBERRY CON PCA9685 VIA I2C // CONTROLAR MICRO SERVO 2024, Mes de julio
Anonim
Dispositivos I2C múltiples Raspberry PI
Dispositivos I2C múltiples Raspberry PI
Dispositivos I2C múltiples Raspberry PI
Dispositivos I2C múltiples Raspberry PI

Frustrado porque no puede usar múltiples dispositivos I2C en su proyecto. No es necesario utilizar multiplexores lentos. El último kernel raspbian admite la creación de múltiples buses I2C usando pines GPIO. Esta solución es súper rápida.

Paso 1: algunos comandos de concha

Algunos comandos de Shell
Algunos comandos de Shell

Conecte uno de sus dispositivos i2c mientras su raspberry pi está apagada, inicie su raspberry pi y ejecute

sudo i2cdetect -y 1

Verá una tabla como en la figura adjunta. He conectado un sensor de temperatura y presión barométrica BMP280. La dirección i2c es 0x76 según la tabla. Anote esta dirección.

Haga esto para todos sus dispositivos i2c.

Paso 2: Caso uno: Los dispositivos I2c tienen la misma dirección

Caso uno: los dispositivos I2c tienen la misma dirección
Caso uno: los dispositivos I2c tienen la misma dirección

Este fue siempre el caso problemático. Un bus i2c puede manejar varios dispositivos, pero deben tener diferentes direcciones i2c. Algunos dispositivos i2c tienen puentes para configurar otras direcciones i2c, pero muchos no. En este caso, puede usar un multiplexor i2c (hardware) para rotar el i2c SDA (datos) y SCL (reloj) o puede crear un bus i2c adicional o más.

Crearé dos buses adicionales, nl bus 3 y 4

Abre el cli y corre

cd / arranque

sudo nano config.txt

Agregue la siguiente línea de código, preferiblemente en la sección donde está habilitado spi e i2c.

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

Esta línea creará un bus i2c adicional (bus 4) en GPIO 23 como SDA y GPIO 24 como SCL (GPIO 23 y 24 son los predeterminados)

También agregue la siguiente línea para crear el bus i2c 3

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

GPIO 17 será el SDA y GPIO 27 será el SCL para el bus 4 i2c.

Toque el control X para salir.

Nota sobre la numeración y el orden de los buses:

Nunca use el bus 0 y 2, se usa para otras cosas en el tablero como eprom en sombreros, etc.

Para el lanzamiento de raspbian de abril de 2019:

Siempre debe comenzar con el bus más alto (Bus 4 en este caso) en su config.txt y continuar hasta el bus más bajo (bus 3).

El bus más bajo siempre debe ser el bus 3

Si necesita 5 autobuses adicionales, los autobuses deben bi en el orden de 7, 6, 5, 4, 3

Este problema en el pedido de autobús no estaba allí cuando se escribió originalmente este Instructable. Parece que se hicieron cambios en el kernel.

Apague su PI, apáguelo. Conecte sus dispositivos i2c al bus 4 (SDA a GPIO 23 y SCL a GPIO 24) y el otro al bus i2c 3 (SDA a GPIO 17 y SCL a GPIO 27).

Enciende el pi.

Correr:

sudo i2cdetect -l (minúscula L)

Ahora verá que los buses i2c 3 y 4 también aparecen en la lista. También ejecuta:

sudo i2cdetect -y 3

sudo i2cdetect -y 4

Ahora puede usar su sensor en su lenguaje de programación. Recuerde especificar los buses i2c correctos.

Attach es un ejemplo del popular sensor de temperatura y presión BMP280. Ningún multiplexor puede leer 2 BMP280 tan rápido.

También se adjunta un ejemplo de 2 sensores Sensirion SDP 810. Nuevamente trabajando mucho más rápido que el multiplexor que usé en el pasado.

Creé código Python para leer dos nuevos BMP388 de adafruit.

También puedo agregar otros sensores en el futuro a

Paso 3: Caso 2: Diferentes direcciones I2c

Sencillo. i2c es un autobús. El propósito de un bus es comunicarse con múltiples dispositivos. Conecte los dispositivos en paralelo al mismo bus i2c. Puedes usar el bus uno.

Correr:

sudo i2cdetect -y 1

Verá los dispositivos enumerados.

Recomendado: