Serial Port Communication in Python
pyserial is a python module that allows one to access serial port. It’s easy to use and one can start test serial port communication in minutes.
1. Install pyserial
If your machine doesn’t have pyserial module installed, you can install the module using easy_install.
sudo easy_install pyserial
In case you don’t have easy_install installed, you can install it by entering the following command,
sudo apt-get install python-setuptoolsThen you can run the command above to install pyserial.
2. A Sample Program
The sample program use pyserial to communicate with a modem device with its serial port interface at /dev/ttyUSB0 in Ubuntu Linux.
#!/usr/bin/pythonimport serial, time#initialization and open the port#possible timeout values:# 1. None: wait forever, block call# 2. 0: non-blocking mode, return immediately# 3. x, x is bigger than 0, float allowed, timeout block callser = serial.Serial()ser.port = "/dev/ttyUSB0"#ser.port = "/dev/ttyS2"ser.baudrate = 9600ser.bytesize = serial.EIGHTBITS #number of bits per bytesser.parity = serial.PARITY_NONE #set parity check: no parityser.stopbits = serial.STOPBITS_ONE #number of stop bits#ser.timeout = None #block readser.timeout = 0 #non-block read#ser.timeout = 2 #timeout block readser.xonxoff = False #disable software flow controlser.rtscts = False #disable hardware (RTS/CTS) flow controlser.dsrdtr = False #disable hardware (DSR/DTR) flow controlser.writeTimeout = 2 #timeout for writetry:ser.open()except Exception, e:print "error open serial port: " + str(e)exit()if ser.isOpen():try:ser.flushInput() #flush input buffer, discarding all its contentsser.flushOutput()#flush output buffer, aborting current output#and discard all that is in buffer#write dataser.write("AT+CSQ=?\x0D")print("write data: AT+CSQ=?\x0D")time.sleep(0.5) #give the serial port sometime to receive the datanumOfLines = 0while True:response = ser.readline()print("read data: " + response)numOfLines = numOfLines + 1if (numOfLines >= 5):breakser.close()except Exception, e1:print "error communicating...: " + str(e1)else:print "cannot open serial port "
The program send out AT commands to query modem signal strength. If you want to know more about modem AT commands, refer to post here.
If you set the timeout as 2, the readline() method is blocking call with timeout, the output will be as below,
write data: AT+CSQ=?read data: AT+CSQ=?read data: +CSQ: (0-31,99),(99)read data:read data: OKread data:If you set the timeout as None, the readline() method is non-blocking call, the output is,
write data: AT+CSQ=?read data: AT+CSQ=?read data: +CSQ: (0-31,99),(99)read data:read data: OKNote that there is less lines of output, program hangs and cannot exit.
If you set the timeout as 0, the readline() method will return immediately, the output is,
write data: AT+CSQ=?read data: AT+CSQ=?read data: +CSQ: (0-31,99),(99)read data:read data: OKread data:
Reference:
pyserial documentation: http://pyserial.sourceforge.net/pyserial.html
2 comments on “Serial Port Communication in Python”
Leave a Reply Cancel reply
40% Discount on My Book — Android NDK Cookbook
Android NDK Cookbook ebook 40% discount with promotion code MREANC40 at Packt Publishing The promotion code is valid until 15th June.Categories
- Android Apps (18)
- Android Audio Editor (1)
- TS 2 (3)
- Video Converter Android (8)
- Video2Gif (1)
- Android Tutorial (27)
- Android Dev Tools (1)
- API illustrated (8)
- Multimedia API (3)
- ffmpeg on Android (4)
- NDK (6)
- UI (6)
- Animation (2)
- Code Snippet (2)
- Coding Beyond Technique (18)
- a word, a world (4)
- Bug Rectified (4)
- Programming Habit (1)
- Software as a Career (1)
- Software as User Experience (1)
- Compilers and Related (2)
- ELF (2)
- Computer Languages (31)
- C/C++ (13)
- Java (9)
- JavaScript (2)
- PHP (1)
- Python (8)
- Data Structure & Algorithms (29)
- Bits (1)
- Data Structure (5)
- Integers (10)
- BigInteger (1)
- Prime (4)
- Search (3)
- Sorting (5)
- Strings (5)
- Database (1)
- SQLite (1)
- Digital Signal Processing (33)
- Distributed Systems (17)
- Apache Cassandra (6)
- Apache Hadoop (8)
- Apache Avro (3)
- Apache Nutch (3)
- Apache Solr (1)
- Linux Study Notes (40)
- crontab (1)
- Linux Kernel Programming (8)
- Linux Programming (12)
- IPC (2)
- Linux Network Programming (5)
- Linux Signals (2)
- Linux Shell Scripting (1)
- ssh (3)
- Machinery (30)
- misc (1)
- My Ideas (1)
- My Project (3)
- Mobile Caching (1)
- Selective Decoding (2)
- My Publication (1)
- My Readings (1)
- Networking (15)
- Program for Performance (8)
- Uncategorized (1)
- Virtual Machine (2)
- Web Dev (8)
- web components (3)
- Android Apps (18)
Recent Comments
Archives
- May 2013 (2)
- April 2013 (1)
- March 2013 (4)
- December 2012 (2)
- November 2012 (6)
- October 2012 (6)
- September 2012 (3)
- August 2012 (13)
- July 2012 (15)
- June 2012 (3)
- May 2012 (8)
- April 2012 (4)
- March 2012 (13)
- February 2012 (19)
- January 2012 (9)
- December 2011 (11)
- November 2011 (12)
- October 2011 (4)
- September 2011 (12)
- August 2011 (16)
- July 2011 (15)
- June 2011 (6)
- May 2011 (10)
- April 2011 (13)
- March 2011 (20)
- February 2011 (4)
- November 2010 (2)
- May 2010 (1)
- April 2010 (1)
- February 2010 (1)





Thank you so much. This was really helpful!
Thanks a lot for your post! I m working with a similar solution but with Nagios calling the serial port.
Implementing Exception on my serial port help me to find out that I had a [Errno 13] Permission denied error.
My code was working well with the python shell but not in Nagios. All I had to do is to add the nagios user in the dialout group.