Índice:

Raspberry PI Multiple I2C Devices: 3 Passos
Raspberry PI Multiple I2C Devices: 3 Passos

Vídeo: Raspberry PI Multiple I2C Devices: 3 Passos

Vídeo: Raspberry PI Multiple I2C Devices: 3 Passos
Vídeo: I2C on the Raspberry Pi - HOW TO use I2C with Python 2024, Julho
Anonim
Dispositivos Raspberry PI Multiple I2C
Dispositivos Raspberry PI Multiple I2C
Dispositivos Raspberry PI Multiple I2C
Dispositivos Raspberry PI Multiple I2C

Frustrado porque você não pode usar múltiplos dos mesmos dispositivos I2C em seu projeto. Não há necessidade de usar multiplexadores lentos. O kernel raspbian mais recente suporta a criação de vários barramentos I2C usando pinos GPIO. Esta solução é super rápida.

Etapa 1: Alguns Comandos de Shell

Alguns Comandos de Shell
Alguns Comandos de Shell

Conecte um de seus dispositivos i2c enquanto seu raspberry pi está desligado, inicie seu raspberry pi e execute

sudo i2cdetect -y 1

Você verá uma tabela como na figura do anexo. Anexei um sensor de temperatura e pressão barométrica BMP280. O endereço i2c é 0x76 de acordo com a tabela. Observe este endereço.

Faça isso para todos os seus dispositivos i2c.

Etapa 2: Caso um: os dispositivos I2c têm o mesmo endereço

Caso um: os dispositivos I2c têm o mesmo endereço
Caso um: os dispositivos I2c têm o mesmo endereço

Esse sempre foi o caso problemático. Um barramento i2c pode lidar com vários dispositivos, mas eles devem ter endereços i2c diferentes. Alguns dispositivos i2c têm jumpers para definir outros endereços i2c, mas muitos não. Nesse caso, você pode usar um multiplexador i2c (hardware) para girar o SDA i2c (dados) e SCL (relógio) ou pode criar um barramento i2c adicional ou mais.

Vou criar dois ônibus adicionais, ônibus nl 3 e 4

Abra o cli e execute

cd / boot

sudo nano config.txt

Adicione a seguinte linha de código, de preferência na seção em que spi e i2c estão ativados.

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

Esta linha criará um barramento i2c adicional (barramento 4) no GPIO 23 como SDA e GPIO 24 como SCL (GPIO 23 e 24 é o padrão)

Adicione também a seguinte linha para criar o barramento i2c 3

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

GPIO 17 será o SDA e GPIO 27 será o SCL para o barramento 4 i2c.

Toque no controle X para sair.

Nota sobre a numeração e ordem do ônibus:

Nunca use os barramentos 0 e 2, ele é usado para outras coisas no tabuleiro, como eprom em chapéus, etc.

Para o lançamento de framboesa de abril de 2019:

Você deve sempre começar com o barramento mais alto (barramento 4, neste caso) em seu config.txt e prosseguir até o barramento mais baixo (barramento 3).

O ônibus mais baixo deve ser sempre o ônibus 3

Se você precisar de 5 ônibus extras, os ônibus devem bi na ordem de 7, 6, 5, 4, 3

Este problema no pedido de ônibus não estava lá quando este Instructable foi originalmente escrito. Parece que mudanças foram feitas no kernel.

Desligue seu PI, desligue-o. Conecte seus dispositivos i2c ao barramento 4 (SDA para GPIO 23 e SCL para GPIO 24) e o outro ao barramento i2c 3 (SDA para GPIO 17 e SCL para GPIO 27).

Ligue o pi.

Corre:

sudo i2cdetect -l (minúsculas L)

Você verá agora que os barramentos i2c 3 e 4 também estão listados. Também execute:

sudo i2cdetect -y 3

sudo i2cdetect -y 4

Agora você pode usar seu sensor em sua linguagem de programação. Lembre-se de especificar os barramentos i2c corretos.

Attach é um exemplo do popular sensor de temperatura e pressão BMP280. Nenhum multiplexador pode ler 2 BMP280s tão rápido.

Um exemplo de 2 sensores Sensirion SDP 810 também é anexado. Mais uma vez trabalhando muito mais rápido do que o multiplexador que usei no passado

Criei o código python para ler dois novos BMP388s da adafruit.

Também posso adicionar outros sensores no futuro a

Etapa 3: Caso 2: Endereços I2c diferentes

Simples. i2c é um ônibus. A finalidade do barramento é se comunicar com vários dispositivos. Conecte os dispositivos em paralelo ao mesmo barramento i2c. Você pode usar o ônibus um.

Corre:

sudo i2cdetect -y 1

Você verá os dispositivos listados.

Recomendado: