Como posso usar o I2C para conversar com sensores?

29

Como posso conversar com sensores digitais pela interface I²C?

Hardware:
Quais pinos do GPIO do Raspberry Pi posso usar?

Software:
Quais bibliotecas I²C estão disponíveis?

Alex L
fonte

Respostas:

23

Há muitas informações sobre o GPIO da RPi aqui: http://elinux.org/Rpi_Low-level_peripherals

De acordo com ele, você pode programar quaisquer pinos GPIO para I²C, mas:

O pino 3 (SDA0) e o pino 5 (SCL0) são predefinidos para serem usados ​​como uma interface I²C. Portanto, existem resistores de 1,8 kilohm na placa para esses pinos.

Essa página wiki também possui alguns exemplos de código GPIO de baixo nível para vários idiomas que devem ajudar você a começar. Se você precisar se atualizar sobre o que realmente é o I²C, aqui está um que também leva em consideração o RPi.

Para controle I²C específico, essa biblioteca python pode ser útil, é discutida nesta postagem do blog , que inclui uma amostra de código.

Tapio
fonte
Algum comentário sobre o potencial de adaptação dos pinos do GPIO Edison Sparkfun para o I2C?
Geotheory #
7

Muitas discussões estão acontecendo sobre isso. Aqui está o que minha leitura e minha brincadeira me mostram:

  1. O suporte ao I2C não está embutido no kernel padrão com o "squeeze" do Debian
  2. Um kernel personalizado precisará ser compilado com o módulo i2cspi ( Aqui está um trecho da árvore do GIT )
  3. Os drivers que foram escritos até agora são apenas para o kernel 3.2 e posterior, e o autor não tem intenção de oferecer suporte ao 3.1.9+ devido a falhas de segurança ( Chris Boot discute o driver )
  4. Com sorte, a distribuição "wheezy" do Debian, atualmente em beta para o RasPi, terá esse driver. Ele vem com o kernel 3.2.
zerolagtime
fonte
2
Sim, como você mencionou, ele está embutido no kernel padrão agora - nas distribuições oficiais do Raspbian e Debian. Segui alguns conselhos aqui que são fáceis de seguir e tenho os dispositivos I2C aparecendo em / dev ... raspberrypi.org/phpBB3/viewtopic.php?f=37&t=15511 Há um pouco mais de detalhes aqui, se necessário: robot- electronics.co.uk/files/rpi_i2c_setup.doc
dodgy_coder
Para obter mais detalhes, mantenha os dados aqui, em vez de nos links da web, e esperando que isso não fique desatualizado: Na imagem do Wheezy em 18/09/2012, edite /etc/modprobe.d/raspi-blacklist.confe comente a entrada para i2c-bcm2708; depois edite /etc/modulese acrescente i2c-dev; depois reinicie. Agora você deve ter um /dev/i2c-0arquivo especial, que é muito fácil de usar.
Damian #
2

Hardware:

Como mencionado por Tapio, o hardware está bem documentado em http://elinux.org/Rpi_Low-level_peripherals

Programas:

Há 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 personagem que decida ler. Isso pode ser feito carregando os módulos corretos. i2c_bcm2708para o motorista de baixo nível e i2c-devpara gerar o personagem deciva para os ônibus. Aplique ...

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

para carregá-los em tempo real. Aplique ...

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

e unblacklist i2c_bcm2708em /etc/modprobe.d/raspi-blacklist.conffazer /dev/i2c-0e /dev/i2c-1mostrar-se permanentemente.

A partir de agora, você pode seguir as dicas de como usar o I²C del maestro.

Eu prefiro esse método do que outros, porque é platformagnótico. Você também pode usar linux/i2c-dev.hcom outros dispositivos, desde que exista um driver I²C de baixo nível.

Saudações

ManuelSchneid3r
fonte