2013-01-23 37 views
5

Có thể thực hiện giao tiếp song công bằng PySerial không? Cụ thể, có thể giám sát cổng liên tục để nhập và viết bất cứ khi nào cần thiết? Tôi tưởng tượng nó nên có thể bằng cách sử dụng các chủ đề (và giao diện nối tiếp là full duplex no?). Nếu không, cách tiếp cận tốt nhất để giám sát cổng nối tiếp khi không truyền là gì? Thời gian chờ?PySerial - Giao tiếp song công

Chỉnh sửa: Đây là nỗ lực của tôi tại đó. Mã này đang nhắm mục tiêu đến chip TI LE2525 Bluetooth LE của TI. Về việc gửi thông điệp init GATT Tôi mong đợi một câu trả lời (quy định chi tiết các thông số hoạt động của chip) ... Tôi nhận được gì dù

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() 

Trả lời

3

Có serial phần cứng cổng là full duplex. Có, bạn có thể sử dụng các chủ đề để làm Rx và Tx cùng một lúc. Ngoài ra, bạn có thể sử dụng một vòng lặp chuỗi chỉ đọc với thời gian chờ ngắn và thay đổi giữa đọc và viết.

+0

Bạn có thể đưa ra một ví dụ ngắn không? Hoặc có thể chỉ ra bất kỳ vấn đề tức thời nào với mẫu mã đã cho. Vấn đề với cách tiếp cận thứ hai là tôi không biết khi nào dữ liệu sẽ cần được gửi ... người dùng sẽ có thể chọn tin nhắn để gửi bất cứ lúc nào – stephenfin

+2

Bạn đã không bắt đầu chuỗi đã đọc của mình. Thêm 't1.start()' – TJD

+0

Doh! Cảm ơn rất nhiều! – stephenfin

0

Bạn không chỉ định thời gian chờ, do đó, lần đọc sẽ đợi toàn bộ số byte để nhận và chỉ sau đó hiển thị mọi thứ.

Các vấn đề liên quan