私は、ラズベリーpi2モデルBとArduino unoを双方向レベルシフターを介して接続しました。ラズベリーパイとArduinoのデータをI2Cで読み取る方法
Raspberry pi GND ---------- GND Arduino
3.3v ---------- 5v
SCL ---------- A5
SDA ---------- A4
私のI2C接続は正しいですか?
私のArduinoは8チャンネルリレーボードに接続されています。
今、私はラズベリーパイによってリレーボードを制御できるコードを書いています。例えば、「1」を押すと、リレー1が高くなります。
Relay 1が高いかどうかを確認するために、arduinoからラズベリーパイにデータを戻したい場合、Relay 1が高い場合、Raspberry piにデータを戻す必要があります。
マイ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()
私のArduinoのコードです:私は、私は1を入力し、何らかの接触不良リレー1にあれば
#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);
}
今すぐハイになっていませんので、この場合、 Arduinoがリレーボードからデータを取得し、毎回ラズベリーに送信するようにしてください。
誰かがそれがどのように機能するかを説明することができれば、素晴らしいことになります。
私は問題を説明することができました。私は多くの研究をしましたが、何らかの答えを見つけることができませんでした。
私は初心者ですので、私を助けてください。
ありがとうございます。ハードウェアでも、この
void sendData(){
int relay_status;
relay_status=digitalRead(4);
Wire.write(relay_status);
}
等Arduinoのコード 変化
電気計測機器はありますか?この場合、フェンスのどちらの側に問題が存在するかを判断するには、ロジックアナライザが理想的です。また、双方向レベルシフタの部品番号を教えてください。 –