Existe uma biblioteca simples para conversar com o I2C para C ++? Eu encontrei algumas coisas para python e Java, mas eu queria C ++. Eu esperava que alguém portasse a biblioteca do Arduino Wire para poder usar o código que já escrevi para o Arduino.
12
Respostas:
Há um cabeçalho i2c-dev no espaço de usuário do Linux. Não me lembro se esse cabeçalho é enviado com o pacote lm-sensores ou se ele precisa ser instalado a partir da fonte. Eu verificaria o repositório de pacotes da sua distribuição. O xGoat tem um bom artigo sobre preparação e uso.
O código fonte do i2c-tools ( download ) é um bom exemplo
C
. Eu já vi algumasC++
bibliotecas simples agrupando essas funções. Eu recomendo criar sua própria biblioteca para atender às suas necessidades. Outros ótimos exemplos podem ser encontrados no Github, como esta biblioteca I2CBusfonte
Comecei a usar a biblioteca pigpio e estou muito impressionado. Eu gosto especialmente do modo bit bang, pois permite que você use dois pinos GPIO como interface I2C, desde que tenham resistores de pullup. Se você estiver usando um PI2, não há muita desvantagem em bit bang, pois você tem 4 CPUs. O bom dos comandos bit bang é que eles recebem uma lista de bytes de comando "endereço, gravação, dados, leitura, início, parada" de comando, para que você possa executar várias E / Ss com uma única chamada. Foi a única coisa que descobri que executa transações de início repetidas de maneira confiável, exigidas por muitos dispositivos que recebem um número de registro no início de um comando de leitura. A biblioteca está bem documentada e fácil de usar.
Abaixo está o programa de teste que lê os registros de temperatura no MAX31785. 4 define o endereço com o próximo byte, 2 = início, 7 = gravação, que é seguido por uma contagem de bytes e bytes de dados, 3 = parada, 6 = leitura, que é seguido por uma contagem de bytes. A chamada retorna todos os bytes de dados lidos junto com o número de bytes.
fonte
Como mencionado por emcconville, existe um cabeçalho i2c-dev no espaço de usuário do Linux (
#include <linux/i2c-dev.h>
). Além disso, você precisa de um dispositivo de caracteres para ler. Isso pode ser feito carregando os módulos corretos.i2c_bcm2708
para o motorista de baixo nível ei2c-dev
para gerar o personagem deciva para os ônibus. Aplique ...para carregá-los em tempo real. Aplique ...
e unblacklist
i2c_bcm2708
em/etc/modprobe.d/raspi-blacklist.conf
fazer/dev/i2c-0
e/dev/i2c-1
mostrar-se permanentemente.A partir de agora você pode seguir as dicas de como usar o I²C del maestro.
Eu prefiro esse método porque é platformagnótico. Você também pode usar
linux/i2c-dev.h
com outros dispositivos, desde que exista um driver I²C. O WiringPi está vinculado ao rPi.Saudações
ATUALIZAR:
Esta informação está obsoleta. Verifique esta postagem para o uso de árvores de dispositivos.
fonte
Existe um WiringPi que eu acho que faz exatamente o que você deseja. Também existem wrappers para Pascal, Java, Python, Perl, TCL e Ruby. Além disso, alguém pode querer explorar links semelhantes:
fonte