Python/Pyserial: чтение входящей информации из порта
Я только начал использовать pyserial, так как в конечном итоге мне нужно будет прочитать / сохранить информацию, поступающую с определенного порта. Используя следующий код, я просто печатаю используемый порт, а затем пытаюсь написать, а затем прочитать какой-то текст ("привет"). Порт печатается нормально, но вывод моей строки выходит как 5. Есть идеи, почему это так?
import serial
import sys
from time import sleep
try:
ser = serial.Serial('\\.\COM8', 9600,timeout=None, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS)
except:
sys.exit("Error connecting device")
print ser.portstr
x = ser.write("hello")
print x
ser.close()
Выход:
>>>
\.\COM8
5
>>>
Кроме того, есть ли простой способ для меня, чтобы имитировать поток текстовой информации, поступающей через порт, чтобы я мог проверить чтение / сохранение входящей информации?
Я использую Python 2.7 и "драйвер виртуального последовательного порта 8.0" [Eltima VSPD], чтобы эмулировать порт для тестирования этого материала.
Спасибо Стив
2 ответа
Вы можете сделать это таким образом, чтобы проверить это. Сначала создайте пару портов в управляющих портах.
Первый порт: COM199 Второй порт: COM188
Нажмите Добавить пару
На одной консоли / скрипте выполните следующие шаги:
>>> import serial
>>> ser = serial.Serial('COM196', 9600,timeout=None, parity=serial.PARITY_NONE, stopbits=serial.S
BITS_ONE, bytesize=serial.EIGHTBITS)
>>> print ser.portstr
COM196
>>> x = ser.read(5) # It will be waiting till it receives data
>>> print x
hello
На другой консоли выполните следующие шаги:
>>> import serial
>>> s = serial.Serial('COM188')
>>> s.write("hello")
5L
Вы можете проверить это таким образом (или), создав программы на Python для каждого из портов
x = ser.write("hello")
print x
Вы пишете это как отправлено. Это не полученная информация. Вероятно, это записывает длину строки, которую вы отправили. Во-первых, вам нужно иметь скрипт на стороне клиента, который будет отвечать на вашу отправленную информацию.
И вы должны использовать что-то подобное на этом.
... x = ser.read() # read one byte
... s = ser.read(10) # read up to ten bytes (timeout)
... line = ser.readline() # read a '\n' terminated line