After closing the serial connection and reconnecting again, reading, using readline(), gives garbage hex.
I've tested this using python 3.4 on ubuntu 14.04 and an Arduino nano that writes to the serial port once connected. The arduino is connected to /dev/ttyUSB0. Both pyserial 2.7 and 3.0b1 show the problem, but pyserial 2.5 works nicely in this case. See console log below, for what was tested.
martin@martin-htpc:~/Dev/pymysensors$ mkvirtualenv -p /usr/bin/python3 pyserial
Running virtualenv with interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in pyserial/bin/python3
Also creating executable in pyserial/bin/python
Installing setuptools, pip, wheel...done.
virtualenvwrapper.user_scripts creating /home/martin/.virtualenvs/pyserial/bin/predeactivate
virtualenvwrapper.user_scripts creating /home/martin/.virtualenvs/pyserial/bin/postdeactivate
virtualenvwrapper.user_scripts creating /home/martin/.virtualenvs/pyserial/bin/preactivate
virtualenvwrapper.user_scripts creating /home/martin/.virtualenvs/pyserial/bin/postactivate
virtualenvwrapper.user_scripts creating /home/martin/.virtualenvs/pyserial/bin/get_env_details
(pyserial)martin@martin-htpc:~/Dev/pymysensors$ pip install file:///home/martin/Skrivbord/pyserial-3.0b1.zip
Processing /home/martin/Skrivbord/pyserial-3.0b1.zip
Building wheels for collected packages: pyserial
Running setup.py bdist_wheel for pyserial
Stored in directory: /home/martin/.cache/pip/wheels/04/84/58/182c41f54077fd565291d425f3bb4c3213693a1a3988571de6
Successfully built pyserial
Installing collected packages: pyserial
Successfully installed pyserial-3.0b1
(pyserial)martin@martin-htpc:~/Dev/pymysensors$ pip show pyserial
---
Metadata-Version: 2.0
Name: pyserial
Version: 3.0b1
Summary: Python Serial Port Extension
Home-page: https://github.com/pyserial/pyserial
Author: Chris Liechti
Author-email: [email protected]
License: Python
Location: /home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages
Requires:
(pyserial)martin@martin-htpc:~/Dev/pymysensors$ pip3 install ipython
Collecting ipython
Using cached ipython-4.0.0-py3-none-any.whl
Collecting traitlets (from ipython)
Using cached traitlets-4.0.0-py2.py3-none-any.whl
Collecting pickleshare (from ipython)
Collecting decorator (from ipython)
Using cached decorator-4.0.4-py2.py3-none-any.whl
Collecting pexpect (from ipython)
Collecting simplegeneric>0.8 (from ipython)
Collecting ipython-genutils (from traitlets->ipython)
Using cached ipython_genutils-0.1.0-py2.py3-none-any.whl
Collecting path.py (from pickleshare->ipython)
Using cached path.py-8.1.2-py2.py3-none-any.whl
Collecting ptyprocess>=0.5 (from pexpect->ipython)
Installing collected packages: decorator, ipython-genutils, traitlets, path.py, pickleshare, ptyprocess, pexpect, simplegeneric, ipython
Successfully installed decorator-4.0.4 ipython-4.0.0 ipython-genutils-0.1.0 path.py-8.1.2 pexpect-4.0.1 pickleshare-0.5 ptyprocess-0.5 simplegeneric-0.8.1 traitlets-4.0.0
(pyserial)martin@martin-htpc:~/Dev/pymysensors$ ipython
Python 3.4.3 (default, Oct 14 2015, 20:28:29)
Type "copyright", "credits" or "license" for more information.
IPython 4.0.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: import serial
In [2]: port = '/dev/ttyUSB0'
In [3]: baud = 115200
In [4]: ser = serial.Serial(port, baud, timeout=1)
In [5]: ser
Out[5]: Serial<id=0x7f99d4f50208, open=True>(port='/dev/ttyUSB0', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=1, xonxoff=False, rtscts=False, dsrdtr=False)
In [6]: ser.name
Out[6]: '/dev/ttyUSB0'
In [7]: ser.isOpen()
Out[7]: True
In [8]: ser.readline()
Out[8]: b'0;0;3;0;9;gateway started, id=0, parent=0, distance=0\n'
In [9]: ser.readline()
Out[9]: b'0;0;3;0;14;Gateway startup complete.\n'
In [10]: ser.readline()
Out[10]: b''
In [11]: ser.close()
In [12]: ser.isOpen()
Out[12]: False
In [13]: ser = serial.Serial(port, baud, timeout=1)
In [14]: ser.isOpen()
Out[14]: True
In [15]: ser.readline()
Out[15]: b'\xe9\x0b8\xdf\xcb\xbb\xf2'
In [16]: ser.readline()
Out[16]: b''
In [17]: ser.close()
In [18]: ser.isOpen()
Out[18]: False
In [19]: quit()
(pyserial)martin@martin-htpc:~/Dev/pymysensors$ pip uninstall pyserial
Uninstalling pyserial-3.0b1:
/home/martin/.virtualenvs/pyserial/bin/__pycache__/miniterm.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/bin/miniterm.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/pyserial-3.0b1.dist-info/DESCRIPTION.rst
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/pyserial-3.0b1.dist-info/METADATA
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/pyserial-3.0b1.dist-info/RECORD
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/pyserial-3.0b1.dist-info/WHEEL
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/pyserial-3.0b1.dist-info/metadata.json
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/pyserial-3.0b1.dist-info/top_level.txt
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/__init__.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/__pycache__/__init__.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/__pycache__/aio.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/__pycache__/rfc2217.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/__pycache__/rs485.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/__pycache__/serialcli.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/__pycache__/serialjava.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/__pycache__/serialposix.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/__pycache__/serialutil.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/__pycache__/serialwin32.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/__pycache__/win32.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/aio.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/rfc2217.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/rs485.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/serialcli.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/serialjava.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/serialposix.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/serialutil.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/serialwin32.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/tools/__init__.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/tools/__pycache__/__init__.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/tools/__pycache__/hexlify_codec.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/tools/__pycache__/list_ports.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/tools/__pycache__/list_ports_common.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/tools/__pycache__/list_ports_linux.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/tools/__pycache__/list_ports_osx.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/tools/__pycache__/list_ports_posix.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/tools/__pycache__/list_ports_windows.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/tools/__pycache__/miniterm.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/tools/hexlify_codec.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/tools/list_ports.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/tools/list_ports_common.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/tools/list_ports_linux.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/tools/list_ports_osx.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/tools/list_ports_posix.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/tools/list_ports_windows.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/tools/miniterm.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/urlhandler/__init__.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/urlhandler/__pycache__/__init__.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/urlhandler/__pycache__/protocol_alt.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/urlhandler/__pycache__/protocol_hwgrep.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/urlhandler/__pycache__/protocol_loop.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/urlhandler/__pycache__/protocol_rfc2217.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/urlhandler/__pycache__/protocol_socket.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/urlhandler/__pycache__/protocol_spy.cpython-34.pyc
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/urlhandler/protocol_alt.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/urlhandler/protocol_hwgrep.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/urlhandler/protocol_loop.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/urlhandler/protocol_rfc2217.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/urlhandler/protocol_socket.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/urlhandler/protocol_spy.py
/home/martin/.virtualenvs/pyserial/lib/python3.4/site-packages/serial/win32.py
Proceed (y/n)? y
Successfully uninstalled pyserial-3.0b1
(pyserial)martin@martin-htpc:~/Dev/pymysensors$ cd ..
(pyserial)martin@martin-htpc:~/Dev$ atom .
(pyserial)martin@martin-htpc:~/Dev$ pip3 install -r /home/martin/Dev/requirements.txt
Collecting pyserial<=2.5.9 (from -r /home/martin/Dev/requirements.txt (line 1))
Downloading pyserial-2.5.tar.gz (106kB)
100% |████████████████████████████████| 106kB 2.5MB/s
Building wheels for collected packages: pyserial
Running setup.py bdist_wheel for pyserial
Stored in directory: /home/martin/.cache/pip/wheels/5c/57/e3/77e68f591edf4fdccdc8b2753a0eb641ebcdcee287f97a71ec
Successfully built pyserial
Installing collected packages: pyserial
Successfully installed pyserial
(pyserial)martin@martin-htpc:~/Dev$ pip show pyserial
(pyserial)martin@martin-htpc:~/Dev$ pip3 show pyserial
(pyserial)martin@martin-htpc:~/Dev$ ipython
Python 3.4.3 (default, Oct 14 2015, 20:28:29)
Type "copyright", "credits" or "license" for more information.
IPython 4.0.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: import serial
In [2]: port = '/dev/ttyUSB0'
In [3]: baud = 115200
In [4]: ser = serial.Serial(port, baud, timeout=1)
In [5]: ser
Out[5]: Serial<id=0x7f07d0060e48, open=True>(port='/dev/ttyUSB0', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=1, xonxoff=False, rtscts=False, dsrdtr=False)
In [6]: ser.isOpen()
Out[6]: True
In [7]: ser.readline()
Out[7]: b'\xaae\xd1\xb9\xf10;0;3;0;9;gateway started, id=0, parent=0, distance=0\n'
In [8]: ser.readline()
Out[8]: b'0;0;3;0;14;Gateway startup complete.\n'
In [9]: ser.readline()
Out[9]: b''
In [10]: ser.close()
In [11]: ser.isOpen()
Out[11]: False
In [12]: ser = serial.Serial(port, baud, timeout=1)
In [13]: ser.readline()
Out[13]: b'0;0;3;0;9;gateway started, id=0, parent=0, distance=0\n'
In [14]: ser.readline()
Out[14]: b'0;0;3;0;14;Gateway startup complete.\n'
In [15]: ser.readline()
Out[15]: b''
In [16]: ser.readline()
Out[16]: b''
In [17]: ser.close()
In [18]: ser.isOpen()
Out[18]: False