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
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
A captura de tela mostra que o nó i2c-1 existe em /dev
gpio readall
Aqui está a saída de
sudo gpio readall
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
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.
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
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
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
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
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
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