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

Programa usado na tentativa de estabelecer a comunicação por I2C entre o Arduino e o Raspberry Pi, num ambiente de exploração do bus I2C com mais que um master.

  • Raspberry Pi: master
  • Arduino: master

Este programa funciona em conjunto com os programas disponiveis nos seguintes links:

Com estes programas podemos formar ambientes com 2 ou 3 masters, sendo um deles o Raspberry Pi, e um slave do Arduino ou nenhum slave.

Bloco para o Raspberry em Python para enviar e receber dados de forma continua.

i2c_master_test_mod2_v1.py

import smbus
import time

bus = smbus.SMBus(1)

# slave address
address = 0x04

varOut = 0

def writeNumber(value):
bus.write_byte(address, value)
return -1

def readNumber():
number = bus.read_byte(address)
return number

while True:
#var = input("Enter number: ")
#if not var:
# continue
#if var:
# varOut = var

writeNumber(varOut)
number = readNumber()
print "Sent: ", varOut, "Received: ", number
varOut += 1
time.sleep(0.5)

Erro

Erros resultantes do programa acima (no Raspberry Pi), em interacção com Arduino 1 no ambiente de testes definido pelo Programa 2 (sem slave)

Sent: 70 Received: 71
Sent: 71 Received: 72
Sent: 72 Received: 73
Sent: 73 Received: 74
Sent: 74 Received: 75
Sent: 75 Received: 76
Sent: 76 Received: 77
Sent: 77 Received: 78
Sent: 78 Received: 79
Sent: 79 Received: 80
Sent: 80 Received: 81
Sent: 81 Received: 82
Traceback (most recent call last):
File "i2c_master_test_mod2_v1.py", line 26, in <module>
writeNumber(varOut)
File "i2c_master_test_mod2_v1.py", line 12, in writeNumber
bus.write_byte(address, value)
IOError: [Errno 121] Remote I/O error