serial raspberry puertos puerto enviar datos conectar comunicar comunicacion python arduino raspberry-pi i2c

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 .