के माध्यम से रास्पबेरी पीआई के साथ अरुडिनो से डेटा कैसे पढ़ा जाए, मैंने रास्पबेरी पीआई 2 मॉडल बी को बाई-दिशात्मक स्तर शिफ्ट के माध्यम से अरुडिनो यूनो के साथ जोड़ा है।I2C
Raspberry pi GND ---------- GND Arduino
3.3v ---------- 5v
SCL ---------- A5
SDA ---------- A4
आशा है कि मेरा आई 2 सी कनेक्शन सही है?
और मेरा Arduino 8-चैनल रिले बोर्ड से जुड़ा हुआ है।
अब मैंने कोड लिखा है जिसमें मैं रास्पबेरी पाई द्वारा रिले बोर्ड को नियंत्रित कर सकता हूं। पूर्व के लिए यदि मैं '1' दबाता हूं तो रिले 1 ऊंचा हो जाता है।
अब मैं रिडबे 1 उच्च है या नहीं, अगर रिले 1 उच्च है या नहीं, तो मुझे कुछ डेटा वापस रास्पबेरी पीआई को भेजना चाहिए या नहीं, तो जांचने के लिए मैं आर्डिनो से रास्पबेरी पाई में डेटा वापस भेजना चाहता हूं।
मेरे आरपीआई कोड है
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 <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);
}
अब अगर मैं 1 टाइप करें और कुछ ढीला कनेक्शन रिले के कारण 1 नहीं उच्च चला जाता है इस मामले में तो, मैं Arduino रिले बोर्ड से डेटा लेना चाहते हैं और इसे हर बार रास्पबेरी पाई भेजना चाहते हैं।
यह अच्छा होगा अगर कोई यह समझा सके कि यह कैसे काम करता है।
आशा है कि मैं समस्या की व्याख्या करने में सक्षम था। मैंने बहुत सारे शोध किए हैं लेकिन कुछ जवाब नहीं मिला।
मैं अजगर में एक नौसिखिया हूं इसलिए कृपया मेरी मदद करें।
अग्रिम धन्यवाद। इस
void sendData(){
int relay_status;
relay_status=digitalRead(4);
Wire.write(relay_status);
}
इसके अलावा हार्डवेयर में
तरह
क्या आपके पास विद्युत माप उपकरण तक कोई पहुंच है? इस मामले में एक तर्क विश्लेषक आदर्श होगा कि यह निर्धारित करने के लिए कि बाड़ का कौन सा पक्ष समस्या मौजूद है। साथ ही, क्या आप अपने बिडरेक्शनल लेवल शिफ्ट का भाग संख्या दे सकते हैं? –