Habilitación y comprobación de I2C en la Raspberry Pi utilizando la línea de comandos para sus propios scripts

La mayoría de la gente sabe que se puede habilitar el puerto I2C usando raspi-config.

raspi-config también ofrece un modo no interactivo, en el que puedes manejar su funcionalidad usando parámetros de línea de comandos.

Lectura del estado actual del puerto I2C de la Raspberry Pi

Aquí se explica cómo leer el estado actual del puerto I2C:

sudo raspi-config nonint get_i2c

Este comando devolverá:

  • 1 si el puerto está desactivado
  • 0 si el puerto está habilitado

Atención: ¡en este caso la lógica es de bash scripting! "0 significa verdadero o ningún error, y todos los demás números significan un código de error". ¡Esto me ha pillado al principio!

Nota: nonint significa "no interactivo".

Activación de I2C en la Raspberry Pi con un simple comando

De nuevo usando raspi-config podemos establecer el estado del puerto I2C. Usar raspi-config tiene la ventaja de que se encarga de muchas cosas adicionales por ti, y debería ser compatible con la versión superior. Detrás de las escenas, raspi-config editará /boot/config.txt por ti, por ejemplo, y también actualizará el árbol de dispositivos.

Aquí se explica cómo habilitar el puerto I2C:

sudo raspi-config nonint do_i2c 0

Una vez más, hay que tener en cuenta que 0 significa verdadero / aquí!

Aquí se explica cómo desactivar el puerto I2C:

sudo raspi-config nonint do_i2c 1

1 significa "falso" o desactivado para este propósito.

Comprobación de que el I2C está activado

raspi-config en modo no interactivo

como se mencionó anteriormente, se puede leer el estado del puerto I2C con

sudo raspi-config nonint get_i2c

imagen

La captura de pantalla muestra la salida cuando el puerto I2C está habilitado (0 = verdadero)

Nodo del dispositivo I2C

Cuando I2C está habilitado en la Raspberry Pi, también verás un nodo /dev para ella:

ls /dev/i2*

/dev/i2c-1

Nota: en los primeros modelos de Raspberry Pi el puerto I2C expuesto a los usuarios era el I2C 0, por lo que cabría esperar que /dev/i2c-0

imagen

La captura de pantalla muestra que el nodo i2c-1 existe en /dev

gpio readall

Esta es la salida de

sudo gpio readall

imagen

Para BCM 2 y 3, se ve "SDA1" (datos I2C) y "SCL1" (reloj I2C) en Nombre. También el modo es ALT0, que corresponde a la función I2C en estos pines en particular (GPIO2, GPIO3).

Tenga en cuenta que BCM 2 y 3 es la numeración de Broadcom, no el pinout GPIO. La posición de los pines GPIO es la primera columna en "Physical" (pines 3 y 5).

(Puede consultar este documento, página 102para una visión general de los diferentes modos de pines GPIO, si está interesado)

lsmod

lsmod le mostrará los módulos I2C que están cargados:

lsmod | grep i2c

i2c_bcm2835 16384 0
i2c_dev 20480 0

imagen

por lo que no hay diferencia con la desactivación de I2C.

i2cdetect:

Una prueba final es ejecutar i2cdetect para escanear el rango de direcciones. Para los Pis modernos, tendrá que especificar 1 como puerto:

sudo i2cdetect -y 1

esto mostrará una tabla de los dispositivos I2C detectados actualmente.

imagen

nota: como, en mi caso, no había dispositivos I2C conectados, no aparecen dispositivos I2C - esta salida es la esperada.

Comprobación de que I2C está desactivado

raspi-config en modo no interactivo

como se mencionó anteriormente, se puede leer el estado del puerto I2C con

sudo raspi-config nonint get_i2c

imagen

La captura de pantalla muestra la salida cuando el puerto I2C está desactivado (1 = falso)

Nodo del dispositivo I2C

Cuando I2C está deshabilitado en la Raspberry Pi, no verás un nodo /dev para ella:

ls /dev/i2*

ls: no puede acceder a '/dev/i2*': No such file or directory

imagen

La captura de pantalla muestra que no existen nodos i2c en /dev.

gpio readall

Esta es la salida de

sudo gpio readall

imagen

Para BCM 2 y 3, se ve "SDA1" (datos I2C) y "SCL1" (reloj I2C) en Nombre.

Sin embargo, a diferencia de la versión habilitada (ver arriba), el modo es IN, el pin es ahora una entrada GPIO.

Ten en cuenta que BCM 2 y 3 es la numeración de Broadcom, no el pinout de GPIO.

(Puede consultar este documento, página 102para una visión general de los diferentes modos de pines GPIO, si está interesado)

lsmod

lsmod le mostrará los módulos I2C que están cargados:

lsmod | grep i2c

i2c_bcm2835 16384 0
i2c_dev 20480 0

imagen

por lo que no hay diferencia con la activación de I2C - usted no puede utilizar esto como una prueba.

i2cdetect:

Una prueba final es ejecutar i2cdetect para escanear el rango de direcciones. Para los Pis modernos, tendrá que especificar 1 como puerto:

sudo i2cdetect -y 1

si I2C está deshabilitado, esto mostrará un error:

Error: No se pudo abrir el archivo `/dev/i2c-1′ o `/dev/i2c/1′: No such file or directory

imagen

Escollos y problemas con el puerto I2C, FAQ

¿es necesario un reinicio para habilitar el puerto I2C?

Desde mi punto de vista, un reinicio es no necesario. He mirado el código de raspi-config, y piden el reinicio para otros puertos (por ejemplo UART), pero no para el puerto I2C.

Además, al cambiar dinámicamente el estado de activación/desactivación de I2C, podrá verificar que el nodo del dispositivo se crea y el rango de I2C puede ser escaneado usando i2cdetect sin un reinicio.

Sin embargo, si todo lo demás falla, siga adelante e intente reiniciar - podría ayudar con algunas otras condiciones.

¿hay más posibilidades de manejar raspi-config, por ejemplo, los puertos UART y SPI, para SSH, etc.?

Claro - raspi-config soporta una amplia gama de opciones diferentes en el modo no interactivo.

todos estos comandos se ejecutan con

raspi-config nonint

Puede echar un vistazo a la código fuente de raspi-configo consulte este útil post en el foro de Raspberry Pi.

de nuevo, tenga en cuenta la convención (para algunos desarrolladores confusa) de que 0 = verdadero / encendido y 1 = falso / apagado

i2cdetect no puede escanear

Si obtiene el siguiente error:

Error: No se pudo abrir el archivo `/dev/i2c-1′ o `/dev/i2c/1′: No such file or directory

Lo más probable es que I2C esté deshabilitado. Intenta habilitarlo, usando el cómo en este artículo o usando raspi-config, y luego intenta escanear el puerto I2C de nuevo.

Puedes utilizar los métodos presentados en este artículo para verificar el estado del puerto I2C en tu Raspberry Pi.

gpio readall no puede determinar el tipo de placa

si recibe este mensaje al intentar ejecutar gpio readall en una Raspberry Pi 4:

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

Oops - no se puede determinar el tipo de placa... modelo: 17

Tienes que instalar una versión más nueva de wiringpi del autor (aún no está en los repositorios upstream). Este artículo describe cómo hacerlo.

Esta es la versión corta:

cd /tmp

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

sudo dpkg -i wiringpi-latest.deb

imagen