Eu tenho um problema estranho com minha porta serial. Parece que algo mudou após as atualizações e reinicialização do Ubuntu.
przem@przem:~/Pulpit/bat/scripts$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>> ser = serial.Serial("/dev/ttyUSB0", 57600)
>>> ser.read()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/serial/serialposix.py", line 475, in read
raise SerialException('device reports readiness to read but returned no data (device disconnected or multiple access on port?)')
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)
>>>
Eu sei que deveria ter o resultado ' ' (sinal vazio) do meu dispositivo, mas em vez disso recebo uma exceção:
'o dispositivo relata prontidão para leitura, mas não retornou dados (dispositivo desconectado ou acesso múltiplo na porta?)'
Esta pergunta é uma introdução ao meu problema:https://stackoverflow.com/questions/32844942/serialport-doenst-work-correctly-after-ubuntu-update?noredirect=1#comment53527004_32844942
Por favor me ajude.
Responder1
Eu tenho o mesmo problema. Não parece estar limitado ao hardware da porta serial. Você pode criar dois pseudoterminais usando socat:
$ socat -d -d pty,raw,echo=0 pty,raw,echo=0
2015/09/30 09:46:18 socat[6296] N PTY is /dev/pts/17
2015/09/30 09:46:18 socat[6296] N PTY is /dev/pts/18
2015/09/30 09:46:18 socat[6296] N starting data transfer loop with FDs [3,3] and [5,5]
Você pode conectar-se a ambos os dispositivos, por exemplo, usando cu
cu -l /dev/pts/17 -s 115200
e
cu -l /dev/pts/18 -s 115200
e enviar dados em ambas as direções, sem problemas.
Mas a conexão com Python 2.7 falha com a mensagem de erro que você mencionou
$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>> ser = serial.Serial("/dev/pts/17", 230400, timeout=0.2)
>>> ser.read()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 460, in read
raise SerialException('device reports readiness to read but returned no data (device disconnected?)')
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected?)
Este código funcionou antes de instalar as atualizações do Ubuntu 14.04 ontem.
Alguma ideia?
Responder2
Não endosso isso, mas parei de ver esses erros depois de fazer esta alteração:
--- serialposix.py.stock 2015-10-03 06:53:45.241261071 -0700
+++ serialposix.py 2015-10-03 06:55:07.481262475 -0700
@@ -457,7 +457,11 @@
# Disconnected devices, at least on Linux, show the
# behavior that they are always ready to read immediately
# but reading returns nothing.
- raise SerialException('device reports readiness to read but returned no data (device disconnected?)')
+ # retrying the read seems to get me past this error:
+ # [ERROR] Can't read from printer (disconnected?) (SerialException): device reports readiness to read but returned no data (device disconnected?)
+
+ #raise SerialException('device reports readiness to read but returned no data (device disconnected?)')
+ pass
read.extend(buf)
return bytes(read)
Responder3
Este pode ser um bug do kernel. Veja aqui:https://bugs.launchpad.net/ubuntu/+source/python2.7/+bug/1501240
A solução alternativa parece ser usar kernel 3.13.0-63-generic
.
Você pode alterar o kernel para uma inicialização única mantendo pressionada a tecla shift durante a inicialização. Para tornar a alteração persistente, você precisa editar /etc/default/grub
:https://askubuntu.com/questions/262965/grub-timeout-set-to-0-cant-access-grub-menu-anymore?rq=1