2011-05-18 11 views
5

के साथ पायथन + आर्डिनो मुझे अपने Arduino और Python के बीच संचार करने में परेशानी हो रही है। मेरे पास कुछ प्रश्न हैं जिनकी मुझे आशा है कि उत्तर दिया जा सकता है, लेकिन सबसे पहले और सबसे महत्वपूर्ण बात यह है कि मुझे बस एक कनेक्शन स्थापित करने की आवश्यकता है।मैक ओएस एक्स

विंडोज के लिए, स्पष्ट रूप से समाधान अपेक्षाकृत सुविधाजनक है, लेकिन मैक ओएस एक्स पर, मुझे स्पष्ट रूप से कुछ सिस्टम फ़ाइलों (जिसे मैं परिचित नहीं हूं) तक पहुंचने की आवश्यकता है। पायथन दस्तावेज मुझे विशिष्ट पोस्ट Re: Can Python do serial port stuff? पर इंगित करता है, लेकिन मुझे नहीं लगता कि यह मेरे उद्देश्यों को काफी सेवा प्रदान करता है।

इस बिंदु पर, संचार के सबूत देखने की कोशिश कर मैंने कोशिश की है।

Arduino:

void setup(){ 
    Serial.begin(9600); 
} 

void loop() 
{ 
    int d = Serial.read(); 
    Serial.println(d,BYTE); 
} 

पायथन: (काफी उल्लेख लिंक से ...)

#!usr/bin/python 
import os, fcntl, termios, sys 

serialPath = '/dev/tty.usbmodemfa141' 

ser= os.open(serialPath, 0) 
[iflag, oflag, cflag, lflag, ispeed, ospeed, cc] = range(7) 
settings = termios.tcgetattr(ser) 
settings[ospeed] = termios.B9600 
settings[ispeed] = termios.B0 
print 2 

के रूप में यहाँ सबूत, मैं सच में समझ में नहीं आता क्या मॉड्यूल मैं आयात करने रहा हैं बिल्कुल कर रहा हूँ प्रलेखन पढ़ने के दौरान मुझे सीरियल पर डेटा भेजने का कोई स्पष्ट तरीका नहीं दिखता है। तो क्या मैं यह अनुमान लगाने में सही हूं कि इस कार्यक्रम का आउटपुट स्वचालित रूप से भेजा जाएगा?

उत्तर

13

Arduino (या धारावाहिक के साथ कोई भी माइक्रोकंट्रोलर) के साथ पाइथन में संवाद करने का सबसे आसान तरीका pySerial का उपयोग कर रहा है।

import serial 
s = serial.Serial(port='/dev/tty.usbmodemfa141', baudrate=9600) 

s.write('text') 
s.read() 
s.readline() 

पुनश्च::

यहाँ एक उदाहरण है आप अजगर 3 का उपयोग कर रहे हैं, तो आप तार के बजाय बाइट (कि, b'text' है) भेजना चाहिए।

+3

यह अब तक का सबसे आसान है, +1 – nicolaskruchten

+0

मैं इस धारणा के तहत था कि पेसरियल ओएसएक्स पर काम नहीं करेगा ... क्या मुझे गलती है? – danem

+0

यह ओएसएक्स पर काम करता है। मुझे विंडोज 64-बिट – JBernardo

1

मैंने लिनक्स के तहत पर्ल का उपयोग करके ऐसा किया है, लेकिन पाइथन या मैक के साथ कोई अनुभव नहीं है। मैं आपको देखने के लिए कुछ पॉइंटर्स दे सकता हूं।

सबसे पहले, अपने पायथन कार्यक्रम में आपको serialPath में अपने यूएसबी पोर्ट के लिए उचित डिवाइस पता लगाने की आवश्यकता है अन्यथा आपका डेटा Arduino तक नहीं पहुंच जाएगा। लिनक्स में मैंने बोर्ड से कनेक्ट होने के बाद lsusb किया और उस से डिवाइस का नाम पाया।

अपने Arduino कोड परिवर्तन में यह रूप में अन्यथा आप -1s का एक समूह डंपिंग हो जाएगा अगर कोई डेटा है

void loop() 
{ 
    if(Serial.available() > 0) 
    { 
     d = Serial.read(); 
     Serial.println(d,BYTE); 
    } 
} 

किया जाना है।