Ik heb een Raspberry Pi 2 model B verbonden met een Arduino Uno via een Bi-Directional Level-shifter, van deze BLOG :
Raspberry pi GND ---------- GND Arduino
3.3v ---------- 5v
SCL ---------- A5
SDA ---------- A4
Ik hoop dat mijn I2C-verbinding correct is.
En mijn Arduino is verbonden met een 8-kanaals relaisbord.
Nu heb ik een code geschreven waarin ik het relaisbord met de Raspberry Pi kan besturen. Als ik bijvoorbeeld op '1' druk, wordt relais 1 hoog.
Nu wil ik gegevens terugsturen van de Arduino naar de Raspberry Pi om te controleren of relais 1 hoog is of niet. Als relais 1 hoog is, moet het wat gegevens terugsturen naar de Raspberry Pi.
Mijn Raspberry Pi-code is:
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()
Mijn Arduino-code:
#include
#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);
}
Als ik nu type 1 gebruik en relais 1 vanwege een losse verbinding niet hoog wordt, wil ik dat de Arduino data van het relaisbord neemt en het elke keer naar de Raspberry Pi stuurt.
Het zal geweldig zijn als iemand ook kan uitleggen hoe het werkt.
Ik hoop dat ik het probleem heb kunnen verklaren. Ik heb veel onderzoek gedaan maar kon geen antwoord vinden.
Ik ben een beginner in Python dus help me alsjeblieft.
Bij voorbaat dank.