¿Cómo puedo usar I2C para hablar con los sensores?

29

¿Cómo puedo hablar con sensores digitales a través de la interfaz I²C?

Hardware:
¿Qué pines en el GPIO de la Raspberry Pi puedo usar?

Software:
¿Qué bibliotecas I²C están disponibles?

Alex L
fuente

Respuestas:

23

Aquí hay mucha información sobre el GPIO de RPi: http://elinux.org/Rpi_Low-level_peripherals

Según esto, puede programar cualquier pin GPIO para I²C, pero:

El pin 3 (SDA0) y el pin 5 (SCL0) están preconfigurados para usarse como una interfaz I²C. Por lo tanto, hay 1.8 kilohm de resistencia en la placa para estos pines.

Esa página wiki también tiene algunos ejemplos de código GPIO de bajo nivel para varios idiomas que deberían ayudarlo a comenzar. Si necesita un repaso de lo que realmente es I²C, aquí hay uno que también tiene en cuenta el RPi.

Para el control específico de I²C, esta biblioteca de Python podría ser útil, se discute en esta publicación de blog , que incluye una muestra de código.

Tapio
fuente
¿Algún comentario sobre el potencial para adaptar los pines Edison Sparkfun GPIO para I2C?
geotheory
7

Hay muchas discusiones sobre esto. Esto es lo que me muestra mi lectura y perder el tiempo:

  1. El soporte I2C no está integrado en el núcleo predeterminado con el "apretón" de Debian
  2. Se deberá compilar un kernel personalizado con el módulo i2cspi ( Aquí hay un extracto del árbol GIT )
  3. Los controladores que se han escrito hasta ahora son solo para el kernel 3.2 y posteriores, y el autor no tiene intención de admitir el 3.1.9+ debido a lagunas de seguridad ( Chris Boot analiza el controlador )
  4. Con suerte, la distribución "wheezy" de Debian, actualmente en versión beta para RasPi, tendrá este controlador. Viene con el kernel 3.2.
zerolagtime
fuente
2
Sí, como mencionas, ahora está integrado en el núcleo estándar, tanto en las distribuciones oficiales de Raspbian como en Debian. Seguí algunos consejos aquí que son fáciles de seguir y tengo los dispositivos I2C que aparecen en / dev ... raspberrypi.org/phpBB3/viewtopic.php?f=37&t=15511 Aquí hay un poco más de detalle si es necesario: robot- electronics.co.uk/files/rpi_i2c_setup.doc
dodgy_coder
Para obtener más detalles, mantenga los datos aquí en lugar de los enlaces web, y esperando que esto no se desactualice: a partir de la imagen de Wheezy 2012-09-18, edite /etc/modprobe.d/raspi-blacklist.confy comente la entrada para i2c-bcm2708; luego edite /etc/modulesy agregue i2c-dev; luego reiniciar. Ahora debería tener un /dev/i2c-0archivo especial, que es muy fácil de usar.
Damian
2

Hardware:

Como mencionó Tapio, el hardware está bien documentado en http://elinux.org/Rpi_Low-level_peripherals

Software:

Hay un encabezado i2c-dev en el espacio de usuario de Linux ( #include <linux/i2c-dev.h>). Además, necesitas un personaje que decida leer. Esto se puede hacer cargando los módulos correctos. i2c_bcm2708para el conductor de bajo nivel y i2c-devpara generar el personaje desciende para los autobuses. Aplicar ...

sudo modprobe -r i2c_bcm2708
sudo modprobe i2c_bcm2708 baudrate=<your preferred baudrate>

para cargarlos sobre la marcha. Aplicar ...

sudo sh -c 'echo "i2c-dev" >> /etc/modules'
sudo sh -c 'echo "options i2c_bcm2708 baudrate=<your preferred baudrate>\n" > /etc/modprobe.d/custom.conf

y no incluir i2c_bcm2708en la lista negra /etc/modprobe.d/raspi-blacklist.confpara hacer /dev/i2c-0y /dev/i2c-1mostrar permanentemente.

A partir de ahora, puede seguir las sugerencias sobre cómo usar el propio I²C del maestro.

Prefiero este método sobre otros, porque es platformagnóstico. linux/i2c-dev.hTambién puede usarlo con otros dispositivos, siempre que exista un controlador I²C de bajo nivel.

Saludos

ManuelSchneid3r
fuente