Ho collegato Raspberry pi 2 modello B con arduino uno tramite cambio di livello bidirezionale.Come leggere i dati da Arduino con Raspberry pi via I2C
Raspberry pi GND ---------- GND Arduino
3.3v ---------- 5v
SCL ---------- A5
SDA ---------- A4
spero che la mia connessione I2C è corretta?
e il mio Arduino è collegato alla scheda relè a 8 canali.
Ora ho scritto codice in cui posso controllare la scheda Relè di Raspberry pi. Ad esempio se si preme '1' il relè 1 diventa alto.
Ora voglio inviare i dati da arduino a raspberry pi per poter verificare se il relè 1 è alto o no, se il relè 1 è alto, allora dovrebbe restituire alcuni dati a Raspberry pi oppure no.
Il mio codice è Rpi
import smbus
import time
# for RPI version 1, use "bus = smbus.SMBus(0)"
bus = smbus.SMBus(1)
# This is the address we setup in the Arduino Program
address = 0x04
def writeNumber(value):
bus.write_byte(address, value)
# bus.write_byte_data(address, 0, value)
return -1
def readNumber():
number = bus.read_byte(address)
# number = bus.read_byte_data(address, 1)
return number
while True:
var = input("")
if not var:
continue
writeNumber(var)
number = readNumber()
Il mio codice di Arduino:
#include <Wire.h>
#define SLAVE_ADDRESS 0x04
#define RELAY1 9
int number = 0;
int state = 0;
void setup() {
pinMode(RELAY1, OUTPUT);
Serial.begin(9600); // start serial for output
// initialize i2c as slave
Wire.begin(SLAVE_ADDRESS);
// define callbacks for i2c communication
Wire.onReceive(receiveData);
Wire.onRequest(sendData);
Serial.println("Ready!");
}
void loop() {
delay(100);
}
// callback for received data
void receiveData(int byteCount){
while(Wire.available()) {
number = Wire.read();
Serial.print("data received: ");
Serial.println(number);
if (number == 1){
if (state == 0){
digitalWrite(RELAY1, HIGH); // set the LED on
state = 1;
}
else{
digitalWrite(RELAY1, LOW); // set the LED off
state = 0;
}
}
}
}
// callback for sending data
void sendData(){
Wire.write(number);
}
Ora, se io tipo 1 e causa di alcuni relè connessione allentata 1 non va alto, così in questo caso io vuoi che l'arduino prenda i dati dalla scheda relay e li invii a Raspberry pi ogni volta.
Sarebbe bello se qualcuno potesse spiegare anche come funziona.
Spero di essere stato in grado di spiegare il problema. Ho fatto molte ricerche ma non sono riuscito a trovare una risposta.
Sono un principiante in python quindi per favore aiutatemi.
Grazie in anticipo.
Avete accesso a un apparecchio di misura elettrico? In questo caso, un analizzatore di stati logici sarebbe l'ideale per determinare su quale lato della barriera si trova il problema. Inoltre, puoi dare il numero di parte del tuo cambio di livello bidirezionale? –