blob: 1114a18cdc0a5452f5cf894dec5c40b411a1af21 [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
39 Usage: tcp_serial_redirect.py [options] [port [baudrate]]
40
41 Simple Serial to Network (TCP/IP) redirector.
42
43 Options:
44 -h, --help show this help message and exit
45 -q, --quiet suppress non error messages
46 --spy peek at the communication and print all data to the
47 console
48
49 Serial Port:
50 Serial port settings
51
52 -p PORT, --port=PORT
53 port, a number (default 0) or a device name
54 -b BAUDRATE, --baud=BAUDRATE
55 set baud rate, default: 9600
56 --parity=PARITY set parity, one of [N, E, O], default=N
57 --rtscts enable RTS/CTS flow control (default off)
58 --xonxoff enable software flow control (default off)
59 --rts=RTS_STATE set initial RTS line state (possible values: 0, 1)
60 --dtr=DTR_STATE set initial DTR line state (possible values: 0, 1)
61
62 Network settings:
63 Network configuration.
64
65 -P LOCAL_PORT, --localport=LOCAL_PORT
66 local TCP port
cliechtidec243b2009-08-04 02:24:03 +000067 --rfc2217 allow control commands with Telnet extension RFC-2217
cliechti5134aab2009-07-21 19:47:59 +000068
69 Newline Settings:
70 Convert newlines between network and serial port. Conversion is
71 normally disabled and can be enabled by --convert.
72
73 -c, --convert enable newline conversion (default off)
74 --net-nl=NET_NEWLINE
75 type of newlines that are expected on the network
76 (default: LF)
77 --ser-nl=SER_NEWLINE
78 type of newlines that are expected on the serial port
79 (default: CR+LF)
80
81 NOTE: no security measures are implemented. Anyone can remotely connect to
82 this service over the network. Only one connection at once is supported. When
83 the connection is terminated it waits for the next connect.
84
cliechti86e87872009-07-21 13:32:45 +000085
86tcp_serial_redirect.py_
87 Main program.
88
Chris Liechti90570b92015-08-04 03:32:02 +020089.. _tcp_serial_redirect.py: https://github.com/pyserial/pyserial/blob/master/examples/tcp_serial_redirect.py
cliechti4cb94662013-10-17 03:17:50 +000090
cliechti86e87872009-07-21 13:32:45 +000091
cliechtia2d8f962009-08-10 23:59:27 +000092Single-port TCP/IP - serial bridge (RFC 2217)
cliechti3453f122009-08-10 22:56:34 +000093=============================================
94Simple cross platform :rfc:`2217` serial port server. It uses threads and is
95portable (runs on POSIX, Windows, etc).
cliechti86e87872009-07-21 13:32:45 +000096
cliechtia2d8f962009-08-10 23:59:27 +000097- The port settings and control lines (RTS/DTR) can be changed at any time
98 using :rfc:`2217` requests. The status lines (DSR/CTS/RI/CD) are polled every
cliechti3453f122009-08-10 22:56:34 +000099 second and notifications are sent to the client.
100- Telnet character IAC (0xff) needs to be doubled in data stream. IAC followed
101 by an other value is interpreted as Telnet command sequence.
102- Telnet negotiation commands are sent when connecting to the server.
103- RTS/DTR are activated on client connect and deactivated on disconnect.
104- Default port settings are set again when client disconnects.
cliechtia2d8f962009-08-10 23:59:27 +0000105
cliechti3453f122009-08-10 22:56:34 +0000106::
107
108 Usage: rfc2217_server.py [options] port
109
110 RFC 2217 Serial to Network (TCP/IP) redirector.
111
112 Options:
113 -h, --help show this help message and exit
114 -p LOCAL_PORT, --localport=LOCAL_PORT
115 local TCP port
116
117 NOTE: no security measures are implemented. Anyone can remotely connect to
118 this service over the network. Only one connection at once is supported. When
119 the connection is terminated it waits for the next connect.
120
121.. versionadded:: 2.5
122
123rfc2217_server.py_
124 Main program.
125
126setup-rfc2217_server-py2exe.py_
127 This is a py2exe setup script for Windows. It can be used to create a
128 standalone ``rfc2217_server.exe``.
129
Chris Liechti90570b92015-08-04 03:32:02 +0200130.. _rfc2217_server.py: https://github.com/pyserial/pyserial/blob/master/examples/rfc2217_server.py
131.. _setup-rfc2217_server-py2exe.py: https://github.com/pyserial/pyserial/blob/master/examples/setup-rfc2217_server-py2exe.py
cliechti3453f122009-08-10 22:56:34 +0000132
133
134Multi-port TCP/IP - serial bridge (RFC 2217)
135============================================
cliechtibb5c3c52009-07-23 02:29:27 +0000136This example implements a TCP/IP to serial port service that works with
cliechti3453f122009-08-10 22:56:34 +0000137multiple ports at once. It uses select, no threads, for the serial ports and
138the network sockets and therefore runs on POSIX systems only.
cliechtibb5c3c52009-07-23 02:29:27 +0000139
cliechti7aed8332009-08-05 14:19:31 +0000140- Full control over the serial port with :rfc:`2217`.
cliechti3453f122009-08-10 22:56:34 +0000141- Check existence of ``/tty/USB0...8``. This is done every 5 seconds using
cliechti7aed8332009-08-05 14:19:31 +0000142 ``os.path.exists``.
143- Send zeroconf announcements when port appears or disappears (uses
144 python-avahi and dbus). Service name: ``_serial_port._tcp``.
145- Each serial port becomes available as one TCP/IP server. e.g.
146 ``/dev/ttyUSB0`` is reachable at ``<host>:7000``.
147- Single process for all ports and sockets (not per port).
148- The script can be started as daemon.
149- Logging to stdout or when run as daemon to syslog.
cliechti3453f122009-08-10 22:56:34 +0000150- Default port settings are set again when client disconnects.
cliechti7cb78e82009-08-05 15:47:57 +0000151- modem status lines (CTS/DSR/RI/CD) are not polled periodically and the server
152 therefore does not send NOTIFY_MODEMSTATE on its own. However it responds to
153 request from the client (i.e. use the ``poll_modem`` option in the URL when
154 using a pySerial client.)
cliechtibb5c3c52009-07-23 02:29:27 +0000155
cliechti7aed8332009-08-05 14:19:31 +0000156Requirements:
157
158- Python (>= 2.4)
cliechtibb5c3c52009-07-23 02:29:27 +0000159- python-avahi
160- python-dbus
cliechti7aed8332009-08-05 14:19:31 +0000161- python-serial (>= 2.5)
cliechtibb5c3c52009-07-23 02:29:27 +0000162
cliechti7aed8332009-08-05 14:19:31 +0000163Installation as daemon:
164
cliechtibb5c3c52009-07-23 02:29:27 +0000165- Copy the script ``port_publisher.py`` to ``/usr/local/bin``.
166- Copy the script ``port_publisher.sh`` to ``/etc/init.d``.
167- Add links to the runlevels using ``update-rc.d port_publisher.sh defaults 99``
168- Thats it :-) the service will be started on next reboot. Alternatively run
169 ``invoke-rc.d port_publisher.sh start`` as root.
170
cliechti7aed8332009-08-05 14:19:31 +0000171.. versionadded:: 2.5 new example
cliechtibb5c3c52009-07-23 02:29:27 +0000172
173port_publisher.py_
cliechti7aed8332009-08-05 14:19:31 +0000174 Multi-port TCP/IP-serial converter (RFC 2217) for POSIX environments.
cliechtibb5c3c52009-07-23 02:29:27 +0000175
176port_publisher.sh_
177 Example init.d script.
178
Chris Liechti90570b92015-08-04 03:32:02 +0200179.. _port_publisher.py: https://github.com/pyserial/pyserial/blob/master/examples/port_publisher.py
180.. _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 +0000181
182
cliechti86e87872009-07-21 13:32:45 +0000183wxPython examples
184=================
185A simple terminal application for wxPython and a flexible serial port
186configuration dialog are shown here.
187
188wxTerminal.py_
189 A simple terminal application. Note that the length of the buffer is
190 limited by wx and it may suddenly stop displaying new input.
191
192wxTerminal.wxg_
193 A wxGlade design file for the terminal application.
194
195wxSerialConfigDialog.py_
196 A flexible serial port configuration dialog.
197
198wxSerialConfigDialog.wxg_
199 The wxGlade design file for the configuration dialog.
200
cliechti3453f122009-08-10 22:56:34 +0000201setup-wxTerminal-py2exe.py_
cliechti86e87872009-07-21 13:32:45 +0000202 A py2exe setup script to package the terminal application.
203
Chris Liechti90570b92015-08-04 03:32:02 +0200204.. _wxTerminal.py: https://github.com/pyserial/pyserial/blob/master/examples/wxTerminal.py
205.. _wxTerminal.wxg: https://github.com/pyserial/pyserial/blob/master/examples/wxTerminal.wxg
206.. _wxSerialConfigDialog.py: https://github.com/pyserial/pyserial/blob/master/examples/wxSerialConfigDialog.py
207.. _wxSerialConfigDialog.wxg: https://github.com/pyserial/pyserial/blob/master/examples/wxSerialConfigDialog.wxg
208.. _setup-wxTerminal-py2exe.py: https://github.com/pyserial/pyserial/blob/master/examples/setup-wxTerminal-py2exe.py
cliechti86e87872009-07-21 13:32:45 +0000209
210
cliechti86e87872009-07-21 13:32:45 +0000211
cliechti86e87872009-07-21 13:32:45 +0000212Unit tests
213==========
214The project uses a number of unit test to verify the functionality. They all
cliechti88c46842009-08-10 22:29:54 +0000215need a loop back connector. The scripts itself contain more information. All
216test scripts are contained in the directory ``test``.
cliechti86e87872009-07-21 13:32:45 +0000217
cliechti8611bf42009-08-03 00:34:03 +0000218The unit tests are performed on port ``0`` unless a different device name or
cliechti88c46842009-08-10 22:29:54 +0000219``rfc2217://`` URL is given on the command line (argv[1]).
220
221run_all_tests.py_
222 Collect all tests from all ``test*`` files and run them. By default, the
223 ``loop://`` device is used.
cliechti8611bf42009-08-03 00:34:03 +0000224
cliechti86e87872009-07-21 13:32:45 +0000225test.py_
cliechti88c46842009-08-10 22:29:54 +0000226 Basic tests (binary capabilities, timeout, control lines).
cliechti86e87872009-07-21 13:32:45 +0000227
cliechti86e87872009-07-21 13:32:45 +0000228test_advanced.py_
cliechti88c46842009-08-10 22:29:54 +0000229 Test more advanced features (properties).
cliechti86e87872009-07-21 13:32:45 +0000230
cliechtibb5c3c52009-07-23 02:29:27 +0000231test_high_load.py_
232 Tests involving sending a lot of data.
233
cliechti25375b52010-07-21 23:27:13 +0000234test_readline.py_
235 Tests involving readline.
236
cliechtidaf47ba2009-07-28 01:28:16 +0000237test_iolib.py_
238 Tests involving the :mod:`io` library. Only available for Python 2.6 and
239 newer.
240
cliechti4a63d6b2011-03-19 02:57:51 +0000241test_url.py_
242 Tests involving the :ref:`URL <URLs>` feature.
243
Chris Liechti90570b92015-08-04 03:32:02 +0200244.. _run_all_tests.py: https://github.com/pyserial/pyserial/blob/master/test/run_all_tests.py
245.. _test.py: https://github.com/pyserial/pyserial/blob/master/test/test.py
246.. _test_advanced.py: https://github.com/pyserial/pyserial/blob/master/test/test_advanced.py
247.. _test_high_load.py: https://github.com/pyserial/pyserial/blob/master/test/test_high_load.py
248.. _test_readline.py: https://github.com/pyserial/pyserial/blob/master/test/test_readline.py
249.. _test_iolib.py: https://github.com/pyserial/pyserial/blob/master/test/test_iolib.py
250.. _test_url.py: https://github.com/pyserial/pyserial/blob/master/test/test_url.py