Habilitação e verificação do I2C no Raspberry Pi usando a linha de comando para seus próprios scripts

A maioria das pessoas sabe que você pode habilitar a porta I2C usando o raspi-config.

raspi-config também oferece um modo não-interativo, onde você pode conduzir a sua funcionalidade usando parâmetros de linha de comando para ele.

Leitura do estado actual do porto I2C na Raspberry Pi

Aqui está como ler o estado actual do porto I2C:

sudo raspi-config nonint get_i2c

Este comando vai voltar:

  • 1 se o porto estiver desactivado
  • 0 se a porta estiver habilitada

Atenção: neste caso, a lógica é esmagar o script! "0 significa verdadeiro ou nenhum erro, e todos os outros números significam um código de erro". Isto apanhou-me no início!

Nota: nonint significa "non-interactive" (não interativo).

Habilitando o I2C no Raspberry Pi usando um simples comando

Usando novamente o raspi-config podemos definir o estado da porta I2C. Usando o raspi-config tem a vantagem de cuidar de muitas coisas adicionais para você, e deve ser compatível para cima. Nos bastidores, o raspi-config irá editar o /boot/config.txt para você, por exemplo, e também atualizar a árvore de dispositivos.

Aqui está como habilitar a porta I2C:

sudo raspi-config nonint do_i2c 0

Mais uma vez, note que 0 significa verdadeiro / on aqui!

Aqui está como desactivar a porta I2C:

sudo raspi-config nonint do_i2c 1

1 significa "falso" ou "desligado" para este fim.

Verificação de que o I2C está ativado

raspi-config em modo não-interactivo

como mencionado acima, você pode ler o estado do porto I2C com

sudo raspi-config nonint get_i2c

imagem

A captura de tela mostra a saída quando a porta I2C é habilitada (0 = verdadeiro)

Nó de dispositivo I2C

Quando o I2C é ativado no Raspberry Pi, você também verá um nó /dev para ele:

ls /dev/i2*

/dev/i2c-1

Nota: nos primeiros modelos Raspberry Pi a porta I2C exposta aos utilizadores era I2C 0, pelo que seria de esperar /dev/i2c-0

imagem

A captura de tela mostra que o nó i2c-1 existe em /dev

gpio readall

Aqui está a saída de

sudo gpio readall

imagem

Para BCM 2 e 3, você vê "SDA1" (dados I2C) e "SCL1" (relógio I2C) em Nome. Também o modo é ALT0, que corresponde à função I2C nestes pinos particulares (GPIO2, GPIO3).

Note que BCM 2 e 3 é a numeração Broadcom, não o pinout GPIO. A posição do pino GPIO é a primeira coluna em "Físico" (pinos 3 e 5).

(Você pode consultar este documento, página 102para uma visão geral dos diferentes modos de pinos GPIO, se estiver interessado)

lsmod

lsmod irá mostrar-lhe os módulos I2C que estão carregados:

lsmod | grep i2c

i2c_bcm2835 16384 0
i2c_dev 20480 0

imagem

por isso não há diferença para a I2C estar incapacitada.

i2cdetectar:

Um teste final é executar i2cdetect para verificar o intervalo de endereços. Para Pis modernos, você precisará especificar 1 como a porta:

sudo i2cdetect -y 1

isto irá emitir uma tabela dos dispositivos I2C actualmente detectados.

imagem

Nota: como, no meu caso, nenhum dispositivo I2C foi anexado, nenhum dispositivo I2C aparece - esta saída é esperada.

Verificação de que a I2C está desactivada

raspi-config em modo não-interactivo

como mencionado acima, você pode ler o estado do porto I2C com

sudo raspi-config nonint get_i2c

imagem

A captura de tela mostra a saída quando a porta I2C é desativada (1 = falso)

Nó de dispositivo I2C

Quando o I2C é desactivado no Raspberry Pi, não se verá um nó /dev para ele:

ls /dev/i2*

ls: não pode acessar o '/dev/i2*': Não há tal arquivo ou diretório

imagem

A captura de tela mostra que não existem nós i2c no /dev.

gpio readall

Aqui está a saída de

sudo gpio readall

imagem

Para BCM 2 e 3, você vê "SDA1" (dados I2C) e "SCL1" (relógio I2C) em Nome.

No entanto, ao contrário da versão activada (ver acima), o modo é IN, o pino é agora uma entrada GPIO.

Note que BCM 2 e 3 é a numeração Broadcom, não o pinout GPIO.

(Você pode consultar este documento, página 102para uma visão geral dos diferentes modos de pinos GPIO, se estiver interessado)

lsmod

lsmod irá mostrar-lhe os módulos I2C que estão carregados:

lsmod | grep i2c

i2c_bcm2835 16384 0
i2c_dev 20480 0

imagem

por isso não há diferença para a I2C ser activada - você não pode use isto como um teste.

i2cdetectar:

Um teste final é executar i2cdetect para verificar o intervalo de endereços. Para Pis modernos, você precisará especificar 1 como a porta:

sudo i2cdetect -y 1

se a I2C estiver desactivada, isto irá mostrar um erro:

Erro: Não foi possível abrir o ficheiro `/dev/i2c-1′ ou `/dev/i2c/1′: Não foi possível abrir esse arquivo ou diretório

imagem

Armadilhas e problemas com a porta I2C, FAQ

é necessário um reinício para habilitar a porta I2C?

Da minha perspectiva, uma reinicialização é não necessário. Eu olhei o código do raspi-config, e eles pedem para reiniciar para outras portas (por exemplo UART), mas não para a porta I2C.

Além disso, ao ligar/desligar dinamicamente o estado I2C, você poderá verificar se o nó do dispositivo está criado e se o intervalo I2C pode ser digitalizado usando i2cdetect sem reiniciar.

Se tudo o resto falhar, no entanto, vá em frente e tente reiniciar - isso pode ajudar em algumas outras condições.

existem mais possibilidades de conduzir raspi-config, por exemplo, as portas UART e SPI, para SSH, etc.?

Claro - raspi-config suporta uma vasta gama de diferentes opções no modo não-interactivo.

todos estes comandos são executados usando

raspi-config nonint

Você pode dar uma olhada no código fonte raspi-configou referir-se a esta útil mensagem no fórum Raspberry Pi.

novamente, note a convenção (para alguns desenvolvedores confusos) que 0 = verdadeiro / ligado e 1 = falso / desligado

i2cdetectar não consegue digitalizar

Se você obtiver o seguinte erro:

Erro: Não foi possível abrir o ficheiro `/dev/i2c-1′ ou `/dev/i2c/1′: Não foi possível abrir esse arquivo ou diretório

A I2C está muito provavelmente incapacitada. Tente activá-lo, usando o how-to neste artigo ou usando o raspi-config, e depois tente digitalizar novamente a porta I2C.

Você pode usar os métodos apresentados neste artigo para verificar o estado do porto I2C no seu Raspberry Pi.

gpio readall incapaz de determinar o tipo de placa

se receberes esta mensagem quando tentares correr o gpio readall num Raspberry Pi 4:

13:01:19 pi@Avalon:/dev $ sudo gpio readall

Oops - incapaz de determinar o tipo de placa... modelo: 17

Você tem que instalar uma versão mais recente de wiringpi do autor (ainda não está nos repositórios upstream). Este artigo descreve como fazer isso.

Aqui está a versão curta:

cd /tmp

wget https://project-downloads.drogon.net/wiringpi-latest.deb

sudo dpkg -i wiringpi-latest.deb

imagem