Я подключил модель B малины Pi 2 к Arduino Uno через двунаправленный сдвиг уровня, из этого БЛОГ :
Raspberry pi GND ---------- GND Arduino
3.3v ---------- 5v
SCL ---------- A5
SDA ---------- A4
Надеюсь, мое соединение I2C верное.
И мой Arduino подключен к 8-канальной релейной плате.
Теперь я написал код, в котором я могу управлять релейной панелью с помощью малины. Например, если я нажимаю '1', реле 1 идет высоко.
Теперь я хочу отправить данные от Arduino до малины Pi, чтобы перекрестно проверить, действительно ли реле 1 высоко или нет. Если реле 1 высокое, оно должно отправить некоторые данные обратно в малину Pi.
Мой код малины Pi:
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()
Мой код Arduino:
#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);
}
Теперь, если я набираю 1, и из-за какого-то ослабленного соединения 1 реле не поднимается высоко, я хочу, чтобы Arduino принимал данные с платы ретрансляции и отправлял их в малину Pi каждый раз.
Будет здорово, если кто-то также сможет объяснить, как это работает.
Надеюсь, я смог объяснить проблему. Я провел много исследований, но не смог найти ответа.
Я новичок в Python, поэтому, пожалуйста, помогите мне.
Заранее спасибо.
Возможно, вам захочется окончить библиотеку pigpio для Pi.
Здесь вы можете найти примеры того, как это работает.
вот весело, как Wireshark - покажет вам трафик I2C:
https://github.com/joan2937/pigpio/tree/master/ Примеры/C/I2C_SNIFFER
Here is the FAQ about I2C
Символ '1' не является номером 1. Попробуйте «номер == '1». - Микаэль Пател Мар 9 '16 в 11:34