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.

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:
- Master: Raspberry Pi (Raspberry Pi i2c master)
- Slave: Arduino (Arduino i2c slave)
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:
- Slave: Raspberry Pi (Raspberry Pi i2c slave)
- Master: Arduino (Arduino i2c master) (POR FAZER)
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.
http://skpang.co.uk/blog/archives/575
https://www.latechamienoise.com/blog/conferences/un-robot-connecte-avec-nodejs-et-raspberry-pi.html
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/