Comunicação I2C entre Arduinos

O uso do interface I2C para implementar a comunicação entre Arduinos é especialmente atractiva no caso dos Arduinos que apenas possuem uma porta serie de hardware como Uno e Nano, e que está afecta ao USB serial.

Este texto descreve o meu conhecimento superficial e prático do uso do interface I2C para estabelecer a comunicação entre Arduinos, em pelo menos três situações diferentes.

Tipologias de exploração do interface i2c

No que respeita a comunicação i2c entre Arduinos, ou outros microcontroladores, existem pelo menos as seguintes situações substancialmente diferentes:

  • Um único master no bus i2c
  • Dois ou mais masters no bus i2c

Analizei a informação disponivel na web, e efectuei uma serie de testes de forma a implementar uma solução satisfatória. Ou seja: permita altas frequencias no envio de mensagens, e seja estável.

Master único

Nesta situação existe apenas um Arduino master no bus. Todos os outros Arduinos ou outros dispositivos no bus, nomeadamente sensores, são slaves.

Regra geral o funcionamento neste tipo de ambiente é estável.

Software

Exemplo 1

Exemplo 2

 

Mais que um master

Nesta situação existe mais que um Arduino master no bus. Também podem existir outros Arduinos ou dispositivos Slaves.

Se não existirem slaves, ou seja são tudo arduinos a funcionar com master, então, regra geral o funcionamento é estavel mesmo com uma grande frequência de mensagens.

Se existirem slaves, então, não é estável, sem qualquer sinalização de hardware (leia-se outro fio).

Pelas experiências que fiz, diria que se conseque um funcionamento, mais o menos, estável para frequencias muito baixas de mensagens enviadas pelos outros masters. Tão baixas que não vejo utilidade nos meus projectos.

Obs. Nunca coloquei os pullup resistors de 1.2k recomendados.

Software

Sobre a comunicação multi master entre Arduinos efectuei testes com os seguintes programas:

Links

https://www.arduino.cc/en/Reference/Wire

I2C – What’s That?

Arduino : howto master to master I2C

https://www.hackster.io/chipmc/arduino-i2c-multi-master-approach-why-and-how-93f638

What Could Go Wrong? I2C Edition

http://forum.arduino.cc/index.php?topic=187282.0