[Python] लैन पर रास्पबेरी पी और अरदुइन के बीच संचार


Answers

Question

मैं एक रास्पबेरी पीआई के साथ इमेज प्रोसेसिंग कर रहा हूं, और मैं चाहता हूं कि यह पाई के निर्देशों के आधार पर एक लाइट बीम चलाने के लिए लैन पर अपने अरडिनो से बात कर सके। मैंने बहुत कुछ देखा है केवल ची और पादरी और Arduino के बीच प्रत्यक्ष संबंध हैं। यह मेरे भोले लग सकता है, लेकिन मैं ईथरनेट पुस्तकालय के साथ क्रमादेशित एक सर्वर के रूप में Arduino का इस्तेमाल करते हुए और सॉकेट लाइब्रेरी के माध्यम से रास्पबेरी पी के ग्राहक के रूप में संवाद करने की कोशिश कर रहा था। मैंने उन्हें अपने राउटर पर स्थिर आईपी दिया, और कोशिश की और प्राप्त करने के लिए निम्नलिखित कोड का इस्तेमाल किया, लेकिन मुझे socket.error: [Errno 113] No route to host से मिला था। socket.error: [Errno 113] No route to host जब मेरे अजगर लाइन से कनेक्ट करने के लिए कमांड आया एक विशिष्ट पोर्ट के माध्यम से Arduino का आईपी।

इस संबंध में मैं कैसे और अधिक उचित तरीके से कैसे कर सकता हूं? मेरे लिए मुख्य लक्ष्य यह लैन पर करने में सक्षम होना है, इसलिए यूएसबी कनेक्शन और प्रत्यक्ष I2C कनेक्शन उपयोगी नहीं हैं, हालांकि वे निश्चित रूप से नौकरी प्राप्त करेंगे।

रास्पबेरी पाई:

from socket import *
import select

data = None

timeout = 3 # timeout in seconds
msg = "test"

host = "192.168.1.113"
print ("Connecting to " + host)

port = 23

s = socket(AF_INET, SOCK_STREAM)
print "Socket made"

ready = select.select([s],[],[],timeout)


s.connect((host,port))
print("Connection made")

while True:

    if data != None:
        print("[INFO] Sending message...")
        s.sendall(msg)
        data = None
        print("[INFO] Message sent.")
        continue

    if ready[0]:        #if data is actually available for you
        data = s.recv(4096)
        print("[INFO] Data received")
        print data
        continue

Arduino:

//90-a2-da-0f-25-E7
byte mac[] = {0x90, 0xA2, 0xDA, 0x0f, 0x25, 0xE7};

//ip Address for shield
byte ip[] = {192,168,1,113};

//Use port 23
EthernetServer server = EthernetServer(23);

void setup() {
  //init device
  Ethernet.begin(mac,ip);
  //start listening for clients
  server.begin();

  Serial.begin(9600);     //For visual feedback on what's going on
  while(!Serial){
    ;   //cause Leonardo
  }
  delay(1000);
  if(server.available()){
  Serial.write("Client available");
}
}

void loop() {
  // put your main code here, to run repeatedly:
  EthernetClient client = server.available();
    if (client == true){
      Serial.write("Client Connected.");

      if(client.read() > 0){
        Serial.write(client.read());        
      }
      else{
        server.write("ping");
      }
    }
    else{
      Serial.println("No one's here yet...");
    }
    delay(1500);
}