python - puertos - ¿Cómo conecto un Arduino Uno con Raspberry Pi usando I²C?
puertos uart raspberry (1)
Estoy tratando de enviar datos a través de la interfaz I²C desde el Arduino Uno hasta la Raspberry Pi usando I²C. Este fue el código que utilicé.
En Arduino:
#include <Wire.h>
unsigned int watt;
unsigned int watt1;
byte watt2;
byte watt3;
void setup()
{
Wire.begin(30);
Wire.onRequest(requestEvent);
Serial.begin(9600);
}
void loop() {
delay(100);
int sensorValue = analogRead(A0);
int sensorValue1 = analogRead(A1);
watt = sensorValue * (5 / 1023) * 2857;
watt1 = sensorValue1 * (5 / 1023) * 2857;
watt2 = map(watt, 0, 4294967295, 0, 255);
watt3 = map(watt1, 0, 4294967295, 0, 255);
Serial.println(watt2);
Serial.println(watt3);
}
void requestEvent()
{
Wire.write(watt2);
delay(30);
Wire.write(watt3);
}
Y en la Raspberry Pi:
import smbus
import time
bus = smbus.SMBus(0)
address = 0x1e
while (1):
watt=bus.read_byte_data(address,1)
watt2=bus.read_byte_data(address,2)
Recibí el siguiente error.
Rastreo (llamadas recientes más última):
Archivo "/home/pi/i2ctest.py", línea 8, en <módulo>
watt = bus.read_byte_data (dirección, 1)
IOError: [Errno 5] Error de entrada / salida
¿Cómo puedo solucionar esto? Además, ¿hay alguna alternativa para usar I²C en Raspberry Pi que no sea la biblioteca SMBus?
Si tiene una Raspberry Pi con una placa de revisión 2.0, debe usar el bus I²C 1, no el bus 0, por lo que deberá cambiar el número de bus utilizado. En este caso, la línea
bus = smbus.SMBus(0)
se convertiría
bus = smbus.SMBus(1)
Puede verificar que el dispositivo esté presente en el bus utilizando el programa i2cdetect del paquete i2ctools. Tratar
i2cdetect 0 -y
buscar el Arduino en el bus 0. Ejecutar
i2cdetect 1 -y
buscarlo en el bus 1. Por supuesto, el programa Arduino debe estar ejecutándose para que esto funcione. Esto también confirmará que el Arduino está presente en la dirección esperada.
También necesitarás asegurarte de que tienes los derechos apropiados para usar I²C, así que ejecuta tu programa Python desde una cuenta que sea miembro del grupo i2c
.