blob: 4cbdda7fc9d60dfbf7eb6cfa76cc3f935ff2863b [file] [log] [blame]
cliechti22978142009-07-21 01:58:11 +00001====================
2 Short introduction
3====================
4
cliechti86e87872009-07-21 13:32:45 +00005Opening serial ports
6====================
7
Chris Liechtid8137cc2015-09-03 23:09:16 +02008Open port at "9600,8,N,1", no timeout::
cliechti22978142009-07-21 01:58:11 +00009
10 >>> import serial
Chris Liechtid8137cc2015-09-03 23:09:16 +020011 >>> ser = serial.Serial('/dev/ttyUSB0') # open serial port
Chris Liechti90570b92015-08-04 03:32:02 +020012 >>> print(ser.name) # check which port was really used
Chris Liechti9ad044a2015-12-17 19:43:59 +010013 >>> ser.write(b'hello') # write a string
cliechti22978142009-07-21 01:58:11 +000014 >>> ser.close() # close port
15
16Open named port at "19200,8,N,1", 1s timeout::
17
Chris Liechtid8137cc2015-09-03 23:09:16 +020018 >>> with serial.Serial('/dev/ttyS1', 19200, timeout=1) as ser:
19 ... x = ser.read() # read one byte
20 ... s = ser.read(10) # read up to ten bytes (timeout)
21 ... line = ser.readline() # read a '\n' terminated line
cliechti22978142009-07-21 01:58:11 +000022
Chris Liechtid8137cc2015-09-03 23:09:16 +020023Open port at "38400,8,E,1", non blocking HW handshaking::
cliechti22978142009-07-21 01:58:11 +000024
Chris Liechtid8137cc2015-09-03 23:09:16 +020025 >>> ser = serial.Serial('COM3', 38400, timeout=0,
cliechti22978142009-07-21 01:58:11 +000026 ... parity=serial.PARITY_EVEN, rtscts=1)
27 >>> s = ser.read(100) # read up to one hundred bytes
28 ... # or as much is in the buffer
29
cliechti86e87872009-07-21 13:32:45 +000030Configuring ports later
31=======================
32
cliechti22978142009-07-21 01:58:11 +000033Get a Serial instance and configure/open it later::
34
35 >>> ser = serial.Serial()
36 >>> ser.baudrate = 19200
Chris Liechtid8137cc2015-09-03 23:09:16 +020037 >>> ser.port = 'COM1'
cliechti22978142009-07-21 01:58:11 +000038 >>> ser
39 Serial<id=0xa81c10, open=False>(port='COM1', baudrate=19200, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=0, rtscts=0)
40 >>> ser.open()
Chris Liechtid8137cc2015-09-03 23:09:16 +020041 >>> ser.is_open
cliechti22978142009-07-21 01:58:11 +000042 True
43 >>> ser.close()
Chris Liechtid8137cc2015-09-03 23:09:16 +020044 >>> ser.is_open
cliechti22978142009-07-21 01:58:11 +000045 False
46
Chris Liechti9ad044a2015-12-17 19:43:59 +010047Also supported with context manager::
48
49 serial.Serial() as ser:
50 ser.baudrate = 19200
51 ser.port = 'COM1'
52 ser.open()
53 ser.write(b'hello')
54
55
cliechti86e87872009-07-21 13:32:45 +000056Readline
57========
cliechtifbe5ae72011-08-05 00:50:21 +000058Be carefully when using :meth:`readline`. Do specify a timeout when opening the
cliechti22978142009-07-21 01:58:11 +000059serial port otherwise it could block forever if no newline character is
cliechtifbe5ae72011-08-05 00:50:21 +000060received. Also note that :meth:`readlines` only works with a timeout.
61:meth:`readlines` depends on having a timeout and interprets that as EOF (end
62of file). It raises an exception if the port is not opened correctly.
cliechti86e87872009-07-21 13:32:45 +000063
64Do also have a look at the example files in the examples directory in the
65source distribution or online.
cliechtifbe5ae72011-08-05 00:50:21 +000066
67.. note::
68
69 The ``eol`` parameter for :meth:`readline` is no longer supported when
70 pySerial is run with newer Python versions (V2.6+) where the module
71 :mod:`io` is available.
72
73EOL
74---
75To specify the EOL character for :meth:`readline` or to use universal newline
76mode, it is advised to use io.TextIOWrapper_::
77
78 import serial
79 import io
80 ser = serial.serial_for_url('loop://', timeout=1)
81 sio = io.TextIOWrapper(io.BufferedRWPair(ser, ser))
82
83 sio.write(unicode("hello\n"))
84 sio.flush() # it is buffering. required to get the data out *now*
85 hello = sio.readline()
Chris Liechti90570b92015-08-04 03:32:02 +020086 print(hello == unicode("hello\n"))
cliechtifbe5ae72011-08-05 00:50:21 +000087
88
89.. _io.TextIOWrapper: http://docs.python.org/library/io.html#io.TextIOWrapper
cliechti7bb58832011-08-05 03:55:12 +000090
91
92Testing ports
93=============
94Listing ports
95-------------
96``python -m serial.tools.list_ports`` will print a list of available ports. It
97is also possible to add a regexp as first argument and the list will only
98include entries that matched.
99
100.. note::
101
102 The enumeration may not work on all operating systems. It may be
103 incomplete, list unavailable ports or may lack detailed descriptions of the
104 ports.
105
106.. versionadded: 2.6
107
108Accessing ports
109---------------
cliechti4cb94662013-10-17 03:17:50 +0000110pySerial includes a small console based terminal program called
Chris Liechti90570b92015-08-04 03:32:02 +0200111:ref:`miniterm`. It ca be started with ``python -m serial.tools.miniterm <port_name>``
cliechti7bb58832011-08-05 03:55:12 +0000112(use option ``-h`` to get a listing of all options).