¿Hay una biblioteca simple para hablar con I2C para C ++? He encontrado algunas cosas para Python y Java, pero quería C ++. Esperaba que alguien haya portado la biblioteca Arduino Wire para poder usar el código que ya he escrito para Arduino.
12
Respuestas:
Hay un encabezado i2c-dev en el espacio de usuario de Linux. No recuerdo si este encabezado se envía con el paquete lm-sensores, o si será necesario instalarlo desde la fuente. Verificaría el repositorio de paquetes de su distribución. xGoat tiene un buen artículo sobre preparación y uso.
El código fuente de las herramientas i2c ( descarga ) son buenos ejemplos en
C
. He visto algunasC++
bibliotecas simples que envuelven estas funciones. Recomiendo crear su propia biblioteca para satisfacer sus necesidades. Se pueden encontrar otros excelentes ejemplos en Github, como esta biblioteca I2CBusfuente
Acabo de comenzar a usar la biblioteca pigpio y estoy muy impresionado. Me gusta especialmente el modo bit bang, ya que le permite usar dos pines GPIO como interfaz I2C, siempre que tengan resistencias pullup. Si está utilizando un PI2, no hay mucha desventaja en el bit bitging, ya que tiene 4 CPU. Lo bueno de los comandos bit bang es que toman una lista de bytes de comando "dirección, escritura, datos, lectura, inicio, detención" para que pueda ejecutar múltiples E / S con una sola llamada. Es lo único que he encontrado que ejecuta de manera confiable transacciones de inicio repetidas, que son requeridas por muchos dispositivos que toman un número de registro al comienzo de un comando de lectura. La biblioteca está bien documentada y es fácil de usar.
A continuación se muestra el programa de prueba que lee los registros de temperatura en un MAX31785. 4 establece la dirección con el siguiente byte, 2 = inicio, 7 = escritura que es seguida por un conteo de bytes y bytes de datos, 3 = parada, 6 = lectura que es seguida por un conteo de bytes. La llamada devuelve los bytes de datos leídos junto con el número de bytes.
fuente
Como mencionó emcconville, hay un encabezado i2c-dev en el espacio de usuario de Linux (
#include <linux/i2c-dev.h>
). Además, necesita un dispositivo de caracteres para leer. Esto se puede hacer cargando los módulos correctos.i2c_bcm2708
para el conductor de bajo nivel yi2c-dev
para generar el personaje desciende para los autobuses. Aplicar ...para cargarlos sobre la marcha. Aplicar ...
y no incluir
i2c_bcm2708
en la lista negra/etc/modprobe.d/raspi-blacklist.conf
para hacer/dev/i2c-0
y/dev/i2c-1
mostrar permanentemente.A partir de ahora puedes seguir las sugerencias sobre cómo usar el propio I²C del maestro.
Prefiero este método porque es platformagnóstico.
linux/i2c-dev.h
También puede usarlo con otros dispositivos, siempre que exista un controlador I²C. WiringPi está vinculado a la rPi.Saludos
ACTUALIZAR:
Esta información está en desuso. Consulte esta publicación para el uso de árboles de dispositivos.
fuente
Hay un WiringPi que creo que hace exactamente lo que quieres. También hay envoltorios para Pascal, Java, Python, Perl, TCL y Ruby. Además, alguien podría querer explorar enlaces similares:
fuente