Zdravím,
poslední dva dny se trápím s komunikací přes sériovou linku a knihovnou
pyserial a nemůžu se hnout z místa.
Abych byl konkrétní — mám desku s mikrokontrolérem ATMega8U2, který se skrze
USB hlásí jako sériová linka (na Mac OS je to /dev/tty.usbmodem441) a chci do
tohoto zařízení zapisovat i číst. Po připojení desky s ní mohu normálně
komunikovat, např.:
import serial
s = serial.Serial('/dev/tty.usbmodem441', 57600, timeout=1)
s.write('R')
print s.read(size=6)
s.write('S')
print s.read(size=50)
Problém je ten, že občas ze zařízení přečtu přesně to, co očekávám, občas ne,
občas přečtu jen půlku. Zkoušel jsem různě nastavit 'timeout', ale bez úspěchu.
Zkoušel jsem i něco takového:
s.write('R')
print s.read(size=s.inWaiting())
a
s.write('R)
while s.inWaiting():
print.s.read()
ale zdá se, že funkce s.inWaiting() nevrací správné hodnoty, nebo se chová
jinak než si myslím. Také jsem zkoušel mezi zápis a čtení vložit sleep():
s.write('R')
time.sleep(1)
print s.read(size=6)
Chci se tedy zeptat — jaký je korektní způsob zápisu a čtení ze sériové linky,
když předem nevím, kolik znaků mám přečíst? Je nějaký způsob, jak to zjistit? A
co se stane, když do zařízení pouze zapíšu, ale již nepřečtu? Ztratí se přijatá
data, nebo zůstanou někde v bufferu?
Díky,
V.S.
_______________________________________________
Python mailing list
[email protected]
http://www.py.cz/mailman/listinfo/python