2013-01-23 48 views
5

क्या PySerial का उपयोग कर पूर्ण-डुप्लेक्स संचार प्राप्त करना संभव है? विशेष रूप से, इनपुट के लिए बंदरगाह की निगरानी करना और जब भी आवश्यक हो लिखना संभव होगा? मुझे लगता है कि धागे का उपयोग करना संभव होना चाहिए (और सीरियल इंटरफेस पूर्ण डुप्लेक्स नंबर हैं?)। यदि नहीं, तो प्रेषण न होने पर एक धारावाहिक बंदरगाह की निगरानी करने का सबसे अच्छा तरीका क्या होगा? एक टाइमआउट?पायसरियल - पूर्ण-डुप्लेक्स संचार

संपादित करें: यहां मेरा प्रयास है। यह कोड टीआई के सीसी 2540 ब्लूटूथ ली चिप को लक्षित कर रहा है। गैट init संदेश भेजने पर मैं एक उत्तर (चिप के ऑपरेटिंग मानकों का ब्यौरा) ... मैं कुछ भी नहीं है, हालांकि

import serial 
import threading 
from time import sleep 

serial_port = serial.Serial() 

GAP_DeviceInit = \ 
       "\x01\x00\xfe\x26\x08\x03\x00\x00\x00\x00\x00\x00\x00\x00\ 
       \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ 
       \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00" 

def read(): 
    while True: 
     data = serial_port.read(9999); 
     if len(data) > 0: 
      print 'Got:', data 

     sleep(0.5) 
     print 'not blocked' 

def main(): 
    serial_port.baudrate = 57600 
    serial_port.port = '/dev/ttyACM0' 
    serial_port.timeout = 0 
    if serial_port.isOpen(): serial_port.close() 
    serial_port.open() 
    t1 = threading.Thread(target=read, args=()) 
    while True: 
     try: 
      command = raw_input('Enter a command to send to the Keyfob: \n\t') 
      if (command == "1"): 
       serial_port.write(message) 
     except KeyboardInterrupt: 
      break 
    serial_port.close() 

उत्तर

3

हाँ सीरियल पोर्ट हार्डवेयर फुल डुप्लेक्स है हो रही है उम्मीद है। हां, आप एक ही समय में आरएक्स और टीएक्स करने के लिए धागे का उपयोग कर सकते हैं। वैकल्पिक रूप से, आप एक थ्रेड लूप का उपयोग कर सकते हैं जो कम समय के साथ पढ़ता है और पढ़ने और लिखने के बीच वैकल्पिक होता है।

+0

क्या आप एक छोटा सा उदाहरण दे सकते हैं? या शायद दिए गए कोड नमूने के साथ किसी भी तत्काल मुद्दों को इंगित करें। दूसरे दृष्टिकोण के साथ समस्या यह है कि मुझे नहीं पता कि डेटा कब भेजा जाना चाहिए ... उपयोगकर्ता किसी भी समय – stephenfin

+2

पर कौन सा संदेश भेजना चुन सकता है, आपने अपना रीड थ्रेड शुरू नहीं किया है। 'T1.start()' – TJD

+0

दोह जोड़ें! बहुत बहुत धन्यवाद! – stephenfin

0

आपने टाइमआउट निर्दिष्ट नहीं किया है, इसलिए पढ़ने प्राप्त करने के लिए बाइट्स की पूरी संख्या के लिए प्रतीक्षा करता है और केवल तब कुछ भी प्रदर्शित करता है।