blob: 7077c1e4c6e4b3cbe9ffd94d7571b0b6e8b31b90 [file] [log] [blame]
cliechti86844e82009-08-12 00:05:33 +00001.. _examples:
2
cliechti86e87872009-07-21 13:32:45 +00003==========
4 Examples
5==========
6
cliechti86844e82009-08-12 00:05:33 +00007
cliechti86e87872009-07-21 13:32:45 +00008Miniterm
9========
Chris Liechti589c92a2015-09-04 23:04:34 +020010Miniterm is now available as module instead of example.
11see :ref:`miniterm` for details.
cliechti86e87872009-07-21 13:32:45 +000012
13miniterm.py_
14 The miniterm program.
15
16setup-miniterm-py2exe.py_
17 This is a py2exe setup script for Windows. It can be used to create a
18 standalone ``miniterm.exe``.
19
Chris Liechti90570b92015-08-04 03:32:02 +020020.. _miniterm.py: https://github.com/pyserial/pyserial/blob/master/serial/tools/miniterm.py
21.. _setup-miniterm-py2exe.py: https://github.com/pyserial/pyserial/blob/master/examples/setup-miniterm-py2exe.py
cliechti86e87872009-07-21 13:32:45 +000022
23
24TCP/IP - serial bridge
25======================
26This program opens a TCP/IP port. When a connection is made to that port (e.g.
27with telnet) it forwards all data to the serial port and vice versa.
28
cliechti3453f122009-08-10 22:56:34 +000029This example only exports a raw socket connection. The next example
30below gives the client much more control over the remote serial port.
cliechtidec243b2009-08-04 02:24:03 +000031
32- The serial port settings are set on the command line when starting the
33 program.
34- There is no possibility to change settings from remote.
35- All data is passed through as-is.
36
cliechti5134aab2009-07-21 19:47:59 +000037::
38
Chris Liechti7f593022015-09-07 21:04:39 +020039 usage: tcp_serial_redirect.py [-h] [-q] [--parity {N,E,O,S,M}] [--rtscts]
40 [--xonxoff] [--rts RTS] [--dtr DTR]
41 [-P LOCALPORT]
42 SERIALPORT [BAUDRATE]
cliechti5134aab2009-07-21 19:47:59 +000043
44 Simple Serial to Network (TCP/IP) redirector.
45
Chris Liechti7f593022015-09-07 21:04:39 +020046 positional arguments:
47 SERIALPORT serial port name
48 BAUDRATE set baud rate, default: 9600
49
50 optional arguments:
cliechti5134aab2009-07-21 19:47:59 +000051 -h, --help show this help message and exit
52 -q, --quiet suppress non error messages
cliechti5134aab2009-07-21 19:47:59 +000053
Chris Liechti7f593022015-09-07 21:04:39 +020054 serial port:
55 --parity {N,E,O,S,M} set parity, one of {N E O S M}, default: N
56 --rtscts enable RTS/CTS flow control (default off)
57 --xonxoff enable software flow control (default off)
58 --rts RTS set initial RTS line state (possible values: 0, 1)
59 --dtr DTR set initial DTR line state (possible values: 0, 1)
cliechti5134aab2009-07-21 19:47:59 +000060
Chris Liechti7f593022015-09-07 21:04:39 +020061 network settings:
62 -P LOCALPORT, --localport LOCALPORT
cliechti5134aab2009-07-21 19:47:59 +000063 local TCP port
cliechti5134aab2009-07-21 19:47:59 +000064
65 NOTE: no security measures are implemented. Anyone can remotely connect to
Chris Liechti7f593022015-09-07 21:04:39 +020066 this service over the network. Only one connection at once is supported. When
cliechti5134aab2009-07-21 19:47:59 +000067 the connection is terminated it waits for the next connect.
68
cliechti86e87872009-07-21 13:32:45 +000069
70tcp_serial_redirect.py_
71 Main program.
72
Chris Liechti90570b92015-08-04 03:32:02 +020073.. _tcp_serial_redirect.py: https://github.com/pyserial/pyserial/blob/master/examples/tcp_serial_redirect.py
cliechti4cb94662013-10-17 03:17:50 +000074
cliechti86e87872009-07-21 13:32:45 +000075
cliechtia2d8f962009-08-10 23:59:27 +000076Single-port TCP/IP - serial bridge (RFC 2217)
cliechti3453f122009-08-10 22:56:34 +000077=============================================
78Simple cross platform :rfc:`2217` serial port server. It uses threads and is
79portable (runs on POSIX, Windows, etc).
cliechti86e87872009-07-21 13:32:45 +000080
cliechtia2d8f962009-08-10 23:59:27 +000081- The port settings and control lines (RTS/DTR) can be changed at any time
82 using :rfc:`2217` requests. The status lines (DSR/CTS/RI/CD) are polled every
cliechti3453f122009-08-10 22:56:34 +000083 second and notifications are sent to the client.
84- Telnet character IAC (0xff) needs to be doubled in data stream. IAC followed
85 by an other value is interpreted as Telnet command sequence.
86- Telnet negotiation commands are sent when connecting to the server.
87- RTS/DTR are activated on client connect and deactivated on disconnect.
88- Default port settings are set again when client disconnects.
cliechtia2d8f962009-08-10 23:59:27 +000089
cliechti3453f122009-08-10 22:56:34 +000090::
91
Chris Liechti7f593022015-09-07 21:04:39 +020092 usage: rfc2217_server.py [-h] [-p TCPPORT] [-v] SERIALPORT
cliechti3453f122009-08-10 22:56:34 +000093
94 RFC 2217 Serial to Network (TCP/IP) redirector.
95
Chris Liechti7f593022015-09-07 21:04:39 +020096 positional arguments:
97 SERIALPORT
98
99 optional arguments:
cliechti3453f122009-08-10 22:56:34 +0000100 -h, --help show this help message and exit
Chris Liechti7f593022015-09-07 21:04:39 +0200101 -p TCPPORT, --localport TCPPORT
102 local TCP port, default: 2217
103 -v, --verbose print more diagnostic messages (option can be given
104 multiple times)
cliechti3453f122009-08-10 22:56:34 +0000105
106 NOTE: no security measures are implemented. Anyone can remotely connect to
Chris Liechti7f593022015-09-07 21:04:39 +0200107 this service over the network. Only one connection at once is supported. When
cliechti3453f122009-08-10 22:56:34 +0000108 the connection is terminated it waits for the next connect.
109
110.. versionadded:: 2.5
111
112rfc2217_server.py_
113 Main program.
114
115setup-rfc2217_server-py2exe.py_
116 This is a py2exe setup script for Windows. It can be used to create a
117 standalone ``rfc2217_server.exe``.
118
Chris Liechti90570b92015-08-04 03:32:02 +0200119.. _rfc2217_server.py: https://github.com/pyserial/pyserial/blob/master/examples/rfc2217_server.py
120.. _setup-rfc2217_server-py2exe.py: https://github.com/pyserial/pyserial/blob/master/examples/setup-rfc2217_server-py2exe.py
cliechti3453f122009-08-10 22:56:34 +0000121
122
123Multi-port TCP/IP - serial bridge (RFC 2217)
124============================================
cliechtibb5c3c52009-07-23 02:29:27 +0000125This example implements a TCP/IP to serial port service that works with
cliechti3453f122009-08-10 22:56:34 +0000126multiple ports at once. It uses select, no threads, for the serial ports and
127the network sockets and therefore runs on POSIX systems only.
cliechtibb5c3c52009-07-23 02:29:27 +0000128
cliechti7aed8332009-08-05 14:19:31 +0000129- Full control over the serial port with :rfc:`2217`.
cliechti3453f122009-08-10 22:56:34 +0000130- Check existence of ``/tty/USB0...8``. This is done every 5 seconds using
cliechti7aed8332009-08-05 14:19:31 +0000131 ``os.path.exists``.
132- Send zeroconf announcements when port appears or disappears (uses
133 python-avahi and dbus). Service name: ``_serial_port._tcp``.
134- Each serial port becomes available as one TCP/IP server. e.g.
135 ``/dev/ttyUSB0`` is reachable at ``<host>:7000``.
136- Single process for all ports and sockets (not per port).
137- The script can be started as daemon.
138- Logging to stdout or when run as daemon to syslog.
cliechti3453f122009-08-10 22:56:34 +0000139- Default port settings are set again when client disconnects.
cliechti7cb78e82009-08-05 15:47:57 +0000140- modem status lines (CTS/DSR/RI/CD) are not polled periodically and the server
141 therefore does not send NOTIFY_MODEMSTATE on its own. However it responds to
142 request from the client (i.e. use the ``poll_modem`` option in the URL when
143 using a pySerial client.)
cliechtibb5c3c52009-07-23 02:29:27 +0000144
cliechti7aed8332009-08-05 14:19:31 +0000145Requirements:
146
147- Python (>= 2.4)
cliechtibb5c3c52009-07-23 02:29:27 +0000148- python-avahi
149- python-dbus
cliechti7aed8332009-08-05 14:19:31 +0000150- python-serial (>= 2.5)
cliechtibb5c3c52009-07-23 02:29:27 +0000151
cliechti7aed8332009-08-05 14:19:31 +0000152Installation as daemon:
153
cliechtibb5c3c52009-07-23 02:29:27 +0000154- Copy the script ``port_publisher.py`` to ``/usr/local/bin``.
155- Copy the script ``port_publisher.sh`` to ``/etc/init.d``.
156- Add links to the runlevels using ``update-rc.d port_publisher.sh defaults 99``
157- Thats it :-) the service will be started on next reboot. Alternatively run
158 ``invoke-rc.d port_publisher.sh start`` as root.
159
cliechti7aed8332009-08-05 14:19:31 +0000160.. versionadded:: 2.5 new example
cliechtibb5c3c52009-07-23 02:29:27 +0000161
162port_publisher.py_
cliechti7aed8332009-08-05 14:19:31 +0000163 Multi-port TCP/IP-serial converter (RFC 2217) for POSIX environments.
cliechtibb5c3c52009-07-23 02:29:27 +0000164
165port_publisher.sh_
166 Example init.d script.
167
Chris Liechti90570b92015-08-04 03:32:02 +0200168.. _port_publisher.py: https://github.com/pyserial/pyserial/blob/master/examples/port_publisher.py
169.. _port_publisher.sh: https://github.com/pyserial/pyserial/blob/master/examples/http://sourceforge.net/p/pyserial/code/HEAD/tree/trunk/pyserial/examples/port_publisher.sh
cliechtibb5c3c52009-07-23 02:29:27 +0000170
171
cliechti86e87872009-07-21 13:32:45 +0000172wxPython examples
173=================
174A simple terminal application for wxPython and a flexible serial port
175configuration dialog are shown here.
176
177wxTerminal.py_
178 A simple terminal application. Note that the length of the buffer is
179 limited by wx and it may suddenly stop displaying new input.
180
181wxTerminal.wxg_
182 A wxGlade design file for the terminal application.
183
184wxSerialConfigDialog.py_
185 A flexible serial port configuration dialog.
186
187wxSerialConfigDialog.wxg_
188 The wxGlade design file for the configuration dialog.
189
cliechti3453f122009-08-10 22:56:34 +0000190setup-wxTerminal-py2exe.py_
cliechti86e87872009-07-21 13:32:45 +0000191 A py2exe setup script to package the terminal application.
192
Chris Liechti90570b92015-08-04 03:32:02 +0200193.. _wxTerminal.py: https://github.com/pyserial/pyserial/blob/master/examples/wxTerminal.py
194.. _wxTerminal.wxg: https://github.com/pyserial/pyserial/blob/master/examples/wxTerminal.wxg
195.. _wxSerialConfigDialog.py: https://github.com/pyserial/pyserial/blob/master/examples/wxSerialConfigDialog.py
196.. _wxSerialConfigDialog.wxg: https://github.com/pyserial/pyserial/blob/master/examples/wxSerialConfigDialog.wxg
197.. _setup-wxTerminal-py2exe.py: https://github.com/pyserial/pyserial/blob/master/examples/setup-wxTerminal-py2exe.py
cliechti86e87872009-07-21 13:32:45 +0000198
199
cliechti86e87872009-07-21 13:32:45 +0000200
cliechti86e87872009-07-21 13:32:45 +0000201Unit tests
202==========
203The project uses a number of unit test to verify the functionality. They all
cliechti88c46842009-08-10 22:29:54 +0000204need a loop back connector. The scripts itself contain more information. All
205test scripts are contained in the directory ``test``.
cliechti86e87872009-07-21 13:32:45 +0000206
cliechti8611bf42009-08-03 00:34:03 +0000207The unit tests are performed on port ``0`` unless a different device name or
cliechti88c46842009-08-10 22:29:54 +0000208``rfc2217://`` URL is given on the command line (argv[1]).
209
210run_all_tests.py_
211 Collect all tests from all ``test*`` files and run them. By default, the
212 ``loop://`` device is used.
cliechti8611bf42009-08-03 00:34:03 +0000213
cliechti86e87872009-07-21 13:32:45 +0000214test.py_
cliechti88c46842009-08-10 22:29:54 +0000215 Basic tests (binary capabilities, timeout, control lines).
cliechti86e87872009-07-21 13:32:45 +0000216
cliechti86e87872009-07-21 13:32:45 +0000217test_advanced.py_
cliechti88c46842009-08-10 22:29:54 +0000218 Test more advanced features (properties).
cliechti86e87872009-07-21 13:32:45 +0000219
cliechtibb5c3c52009-07-23 02:29:27 +0000220test_high_load.py_
221 Tests involving sending a lot of data.
222
cliechti25375b52010-07-21 23:27:13 +0000223test_readline.py_
224 Tests involving readline.
225
cliechtidaf47ba2009-07-28 01:28:16 +0000226test_iolib.py_
227 Tests involving the :mod:`io` library. Only available for Python 2.6 and
228 newer.
229
cliechti4a63d6b2011-03-19 02:57:51 +0000230test_url.py_
231 Tests involving the :ref:`URL <URLs>` feature.
232
Chris Liechti90570b92015-08-04 03:32:02 +0200233.. _run_all_tests.py: https://github.com/pyserial/pyserial/blob/master/test/run_all_tests.py
234.. _test.py: https://github.com/pyserial/pyserial/blob/master/test/test.py
235.. _test_advanced.py: https://github.com/pyserial/pyserial/blob/master/test/test_advanced.py
236.. _test_high_load.py: https://github.com/pyserial/pyserial/blob/master/test/test_high_load.py
237.. _test_readline.py: https://github.com/pyserial/pyserial/blob/master/test/test_readline.py
238.. _test_iolib.py: https://github.com/pyserial/pyserial/blob/master/test/test_iolib.py
239.. _test_url.py: https://github.com/pyserial/pyserial/blob/master/test/test_url.py