149 lines
5.8 KiB
ReStructuredText
149 lines
5.8 KiB
ReStructuredText
==========
|
|
Appendix
|
|
==========
|
|
|
|
How To
|
|
======
|
|
|
|
Enable :rfc:`2217` (and other URL handlers) in programs using pySerial.
|
|
Patch the code where the :class:`serial.Serial` is instantiated.
|
|
E.g. replace::
|
|
|
|
s = serial.Serial(...)
|
|
|
|
it with::
|
|
|
|
s = serial.serial_for_url(...)
|
|
|
|
or for backwards compatibility to old pySerial installations::
|
|
|
|
try:
|
|
s = serial.serial_for_url(...)
|
|
except AttributeError:
|
|
s = serial.Serial(...)
|
|
|
|
Assuming the application already stores port names as strings that's all
|
|
that is required. The user just needs a way to change the port setting of
|
|
your application to an ``rfc2217://`` :ref:`URL <URLs>` (e.g. by editing a
|
|
configuration file, GUI dialog etc.).
|
|
|
|
Please note that this enables all :ref:`URL <URLs>` types supported by
|
|
pySerial and that those involving the network are unencrypted and not
|
|
protected against eavesdropping.
|
|
|
|
Test your setup.
|
|
Is the device not working as expected? Maybe it's time to check the
|
|
connection before proceeding. :ref:`miniterm` from the :ref:`examples`
|
|
can be used to open the serial port and do some basic tests.
|
|
|
|
To test cables, connecting RX to TX (loop back) and typing some characters
|
|
in :ref:`miniterm` is a simple test. When the characters are displayed
|
|
on the screen, then at least RX and TX work (they still could be swapped
|
|
though).
|
|
|
|
There is also a ``spy:://`` URL handler. It prints all calls (read/write,
|
|
control lines) to the serial port to a file or stderr. See :ref:`spy`
|
|
for details.
|
|
|
|
|
|
FAQ
|
|
===
|
|
Example works in :ref:`miniterm` but not in script.
|
|
The RTS and DTR lines are switched when the port is opened. This may cause
|
|
some processing or reset on the connected device. In such a cases an
|
|
immediately following call to :meth:`write` may not be received by the
|
|
device.
|
|
|
|
A delay after opening the port, before the first :meth:`write`, is
|
|
recommended in this situation. E.g. a ``time.sleep(1)``
|
|
|
|
|
|
Application works when .py file is run, but fails when packaged (py2exe etc.)
|
|
py2exe and similar packaging programs scan the sources for import
|
|
statements and create a list of modules that they package. pySerial may
|
|
create two issues with that:
|
|
|
|
- implementations for other modules are found. On Windows, it's safe to
|
|
exclude 'serialposix', 'serialjava' and 'serialcli' as these are not
|
|
used.
|
|
|
|
- :func:`serial.serial_for_url` does a dynamic lookup of protocol handlers
|
|
at runtime. If this function is used, the desired handlers have to be
|
|
included manually (e.g. 'serial.urlhandler.protocol_socket',
|
|
'serial.urlhandler.protocol_rfc2217', etc.). This can be done either with
|
|
the "includes" option in ``setup.py`` or by a dummy import in one of the
|
|
packaged modules.
|
|
|
|
User supplied URL handlers
|
|
:func:`serial.serial_for_url` can be used to access "virtual" serial ports
|
|
identified by an :ref:`URL <URLs>` scheme. E.g. for the :rfc:`2217`:
|
|
``rfc2217://``.
|
|
|
|
Custom :ref:`URL <URLs>` handlers can be added by extending the module
|
|
search path in :data:`serial.protocol_handler_packages`. This is possible
|
|
starting from pySerial V2.6.
|
|
|
|
``Permission denied`` errors
|
|
On POSIX based systems, the user usually needs to be in a special group to
|
|
have access to serial ports.
|
|
|
|
On Debian based systems, serial ports are usually in the group ``dialout``,
|
|
so running ``sudo adduser $USER dialout`` (and logging-out and -in) enables
|
|
the user to access the port.
|
|
|
|
Parity on Raspberry Pi
|
|
The Raspi has one full UART and a restricted one. On devices with built
|
|
in wireless (WIFI/BT) use the restricted one on the GPIO header pins.
|
|
If enhanced features are required, it is possible to swap UARTs, see
|
|
https://www.raspberrypi.org/documentation/configuration/uart.md
|
|
|
|
Support for Python 2.6 or earlier
|
|
Support for older Python releases than 2.7 will not return to pySerial 3.x.
|
|
Python 2.7 is now many years old (released 2010). If you insist on using
|
|
Python 2.6 or earlier, it is recommend to use pySerial `2.7`_
|
|
(or any 2.x version).
|
|
|
|
.. _`2.7`: https://pypi.python.org/pypi/pyserial/2.7
|
|
|
|
|
|
Related software
|
|
================
|
|
|
|
com0com - http://com0com.sourceforge.net/
|
|
Provides virtual serial ports for Windows.
|
|
|
|
|
|
License
|
|
=======
|
|
Copyright (c) 2001-2020 Chris Liechti <cliechti@gmx.net>
|
|
All Rights Reserved.
|
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
modification, are permitted provided that the following conditions are
|
|
met:
|
|
|
|
* Redistributions of source code must retain the above copyright
|
|
notice, this list of conditions and the following disclaimer.
|
|
|
|
* Redistributions in binary form must reproduce the above
|
|
copyright notice, this list of conditions and the following
|
|
disclaimer in the documentation and/or other materials provided
|
|
with the distribution.
|
|
|
|
* Neither the name of the copyright holder nor the names of its
|
|
contributors may be used to endorse or promote products derived
|
|
from this software without specific prior written permission.
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|