8

PySerial を使用して全二重通信を実現することは可能ですか? 具体的には、必要に応じてポートの入力と書き込みを継続的に監視することは可能でしょうか? スレッドを使用してそれが可能になるはずだと思います(シリアルインターフェイスは全二重ではありませんか?)。そうでない場合、送信していないときにシリアルポートを監視するための最良の方法は何ですか? タイムアウト?

編集:これが私の試みです。このコードは、TI の CC2540 Bluetooth LE チップをターゲットにしています。GATT 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()
4

2 に答える 2

5

はい、シリアル ポート ハードウェアは全二重です。はい、スレッドを使用して Rx と Tx を同時に実行できます。または、短いタイムアウトで読み取りを行い、読み取りと書き込みを交互に行う単一のスレッド ループを使用することもできます。

于 2013-01-23T18:53:22.503 に答える
0

タイムアウトを指定しなかったため、読み取りは完全なバイト数が受信されるのを待ってから、何かを表示します。

于 2013-01-24T08:54:47.860 に答える