Comunicação I2C entre Arduino e Raspberry Pi

Estabelecimento de comunicação entre Arduino e Raspberry Pi por I2C.

A comunicação por i2c no Raspberry Pi tem limitações, ou pelo não consegui resolver as seguintes limitações que encontrei:

  • Não funciona com outros master no bus;
  • No Raspberry Pi B não funciona como slave;

Configurações funcionais

  • Raspberry Pi como unico master (todos os modelos);
  • Raspberry Pi como slave (nos modelos com 40 pinos) (por testar); 

Configurações não funcionais

  • Raspberry Pi como master (em ambiente multimaster)
  • Raspberry Pi como slave (nos modelos com 26 pinos)

Hardware

  • Raspberry Pi B;
  • Logic level converter;
  • Arduino;

Sumário

  • Efectuar ligações fisicas
  • Configurar o Raspberry Pi
  • Carregar o programa de testes no Arduino
  • Carregar o programa de testes no Raspberry Pi.

Ligações i2C entre o Arduino e o Raspberry Pi

Estas ligações fazem uso de um conversor de nivel logico de 3.3V para 5V.

As instruções que encontrei na  web para efectuar a comunicação entre o Raspberry Pi e o Arduino implicavam ligações sem um conversor de nivel lógico. Ou não usavam nada, ou usavam resistencias.

Como o Raspberry Pi funciona a 3.3V e o Arduino funciona a 5V, achei que por menos de 2 euros, que é o que custa o logic level converter em Portugal, e muito menos se quisesse esperar por ele vindo da China, achei que valia a pena o custo e a complexidade acrescida, e não correr riscos de estragar o meu Raspberry Pi.

Fazer as ligações antes de configurar o Raspberry Pi.

Pinos do Raspberry Pi

Os pinos disponiveis variam consoante o modelo do Raspberry pi.

Diagrama dos pinos no Raspberry PI B
Diagrama dos pinos no Raspberry PI B

Ligações do Raspberry Pi B como master ao Arduino como slave.

A base usada para conceber este circuito foi um que usava o conversor para ligar o Raspberry Pi a outro dispositivo i2c de 5V.

Como master, são usados o GPIO2 e GPIO3 (pinos 3 e 5).

Ligações do Raspberry Pi B como slave ao Arduino como Master.

Este circuito ainda não foi testado

Como slave são usados o GPIO18 e GPIO19 (pinos 12 e 35).

Configuração do Raspberry Pi

Ao contrário do Arduino, que não necessita de configuração. Basta apenas carregar o programa de teste correspondente. O Raspberry Pi necessita de configuração prévia para poder usar a comunicação via i2c.

A configuração a efectuar está disponivel no seguinte link: Configuração do i2c no Raspberry Pi

Comunicação entre o Pi e o Arduino

O ambiente de comunicação i2c mais facil de implementar, e o único possivel no Raspberry Pi B, é o ambiente em que o Pi é o master e o arduino é o slave.  Neste caso a programação pode ser em Python.

O ambiente de exploração o interface de comunicações do i2c permite, dois tipos de situações: apenas um master na rede, ou vários masters na rede (multimaster).

 

Raspberry Pi como unico master

Para testar usar os programas disponiveis nos seguintes links:

Carregar e correr os programas no Arduino e no Raspberry Pi, e proceder ao teste.

Raspberry Pi como slave

Ainda não testei porque parece que só funciona nos modelos de 40 pinos.

Para testar usar os programas disponiveis nos seguintes links:

Compilar e correr os programas no Arduino e no Raspberry Pi, e proceder ao teste.

Raspberry Pi como master em ambiente multimaster

Efectuei vários testes, e o ambiente parece funcional se a quantidade de mensagens no bus i2c não for muito grande.

Os testes falham quando adicionei um MPU6050 (controlado pelo Arduino 1) ao bus i2c. O script em python acabava por dar erro no smbus.

Comunicações I2C entre Arduino e Raspberry Pi – Codigo teste em loop para o Raspberry master

Carregar e correr os programas no Arduino e no Raspberry Pi, e proceder ao teste.

 

Raspberry Pi and Arduino Connected Using I2C


http://skpang.co.uk/blog/archives/575

https://www.latechamienoise.com/blog/conferences/un-robot-connecte-avec-nodejs-et-raspberry-pi.html

Using the I2C Interface

Links
http://blog.mshmelev.com/2013/06/connecting-raspberry-pi-and-arduino.html

https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=162790
https://www.raspberrypi.org/forums/viewtopic.php?t=150913
https://www.instructables.com/id/Raspberry-Pi-I2C-Python/