473,238 Members | 1,838 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,238 software developers and data experts.

Read from Serial Port

I'd like to read ASCII data from a serial port, but (once again) I'm having
trouble getting started. (Can't seem to find the basic level of docs to
get going <sigh>)

I'd like to use only standard "built-in" modules if possible.

Could somebody offer a simple code-snippet to get me started reading from a
serial port?

Thanks!
--
Casey Bralla
Chief Nerd in Residence
The NerdWorld Organisation
http://www.NerdWorld.org
Jan 21 '06 #1
6 3560
Casey Bralla wrote:
I'd like to read ASCII data from a serial port, but (once again) I'm having
trouble getting started. (Can't seem to find the basic level of docs to
get going <sigh>)

I'd like to use only standard "built-in" modules if possible.

Could somebody offer a simple code-snippet to get me started reading from a
serial port?

While it isn't built in, the standard solution to these problems is the
excellent "pyserial" module.

Google is your friend, and since pyserial is the first hit on a search
for "python serial port" I would recommend you remember that in future
.... that's why there's no URL in this message : Googling yourself will
help the lesson sink in.

regards
Steve
--
Steve Holden +44 150 684 7255 +1 800 494 3119
Holden Web LLC www.holdenweb.com
PyCon TX 2006 www.python.org/pycon/

Jan 21 '06 #2
On 2006-01-21, Casey Bralla <No****@Nowhere.com> wrote:
I'd like to read ASCII data from a serial port, but (once
again) I'm having trouble getting started. (Can't seem to
find the basic level of docs to get going <sigh>)

I'd like to use only standard "built-in" modules if possible.
Then there aren't going to be any "basic level docs" because
it's just not an easy thing to do. You pretty much have to do
exactly what you would do in C. So, for Linux/Unix, study up on
http://www.easysw.com/~mike/serial/serial.html. Then do the
exact same thing in python using the "os" module stuff that
deals with file descriptors and termios. And you'll probably to
use select to impliment a timeout when there's no data:

http://www.python.org/doc/2.4.2/lib/os-fd-ops.html
http://www.python.org/doc/2.4.2/lib/module-termios.html
http://www.python.org/doc/2.4.2/lib/module-select.html

For Win32, you'll have to do all of the nasty Win32
CreateFile() calls and such-like. IMO, It's even uglier than
the Posix termios stuff (though not by much). For example,
CreateFile() takes seven parameters, and none of them default
to useful values (it's places like that where Win32's VMS
heritage comes shining through in a manner that instead of
illumnating anything temporarily blinds you and causes you to
run into a tree).
Could somebody offer a simple code-snippet to get me started
reading from a serial port?


Not using just the built-in modules. There is no such simple
code-snippet. If you want simple use pyserial which handles
all of the tricky bits for you:

http://pyserial.sourceforge.net/

It's not a "built-in" module, but it's what you want to use
unless you already know all the contortions require to do
serial port stuff using Posix or Win32 system calls.

Really.

If you truly, madly, deeply want to use just built-in modules,
then your best bet is to download pyserial and copy the
appropriate platform-specific code. I'll be happy to answer
questions about the Posix parts of it, but I had the portion of
my brain containing Win32 knowledge cauterized.

--
Grant Edwards grante Yow! I'm losing my
at hair...did it go to
visi.com ATLANTIC CITY??
Jan 21 '06 #3
> appropriate platform-specific code. I'll be happy to answer
questions about the Posix parts of it, but I had the portion of
my brain containing Win32 knowledge cauterized.


I'm working on that. Last time I checked there was even some AMIGA
pre-AGA-stuff in there. Which I actually think is cute, but could be
filled with other more useful stuff. Any suggestions for a good
cauterization service?

SCNR,

Diez
Jan 21 '06 #4
Grant Edwards wrote:
On 2006-01-21, Casey Bralla <No****@Nowhere.com> wrote:
I'd like to use only standard "built-in" modules if possible.
Then there aren't going to be any "basic level docs" because
it's just not an easy thing to do. You pretty much have to do
exactly what you would do in C.

For Win32, you'll have to do all of the nasty Win32
CreateFile() calls and such-like. IMO,


And given that win32all is *not* standard and built-in, at least with
the standard distribution, you can't do Win32 at all if you insist on
builtin modules.

But doing so would be unreasonable, and fortunately the OP indicates
that that's just his desire, not a firm requirement, so pyserial it is! :-)

-Peter

Jan 21 '06 #5
On 2006-01-21, Diez B. Roggisch <de***@nospam.web.de> wrote:
appropriate platform-specific code. I'll be happy to answer
questions about the Posix parts of it, but I had the portion of
my brain containing Win32 knowledge cauterized.


I'm working on that. Last time I checked there was even some AMIGA
pre-AGA-stuff in there. Which I actually think is cute, but could be
filled with other more useful stuff. Any suggestions for a good
cauterization service?


Yea, um, hmm. Don't remember that either. Sloppy work then, eh?
Just as well.

--
Grant Edwards grante Yow! ... A housewife
at is wearing a polypyrene
visi.com jumpsuit!!
Jan 21 '06 #6
Casey Bralla wrote:
I'd like to read ASCII data from a serial port, but (once again) I'm having
trouble getting started. (Can't seem to find the basic level of docs to
get going <sigh>)

I'd like to use only standard "built-in" modules if possible.

Could somebody offer a simple code-snippet to get me started reading from a
serial port?

Thanks!

Here's some code which should help to get you started, I thought rather
than leaving you in the hands of Google (which is not your friend, no
more than MaccyDs is, as Flavour Flav said - 'Don;t believe the hype'),
this may be helpful :

Here's a bit cut out from my own code using pySerial - some of the
variables are not detailed but you can get the idea :

self.__objSerialPort = serial.Serial(self._dctConnectionParams
['ConnectionID'],
self._dctConnectionParams
['BaudRate'],
self._dctConnectionParams
['DataBits'],
self._dctConnectionParams
['Parity'],
self._dctConnectionParams
['StopBits'],
10000, #TimeOut

int(self._dctConnectionParams
['XONXOFF']),

int(self._dctConnectionParams
['RTSCTS']))

To send data with pyserial, you do this :

self.__objLock.acquire()
try:
try:
self.__objSerialPort.write(pStrMessage)
except StandardError:
self._objCurrentState = self._STATUS_CONSTS.ERROR
raise
else:
self._objCurrentState = self._STATUS_CONSTS.CONNECTED
finally:
self.__objLock.release()

The lock on this isn't needed for single threaded code but I would
recommend making a class which deals with the communication in a
thread-safe manner (the connection and disconnection as well - the above
bit should be in a lock as well).

PySerial doesn't have the concept of Observer patterns to get
message coming back in so you'll have to make a polling thread to
observe the serial port when you want to read data, here's the checking
bit - I'll leave the threading and observers up to you:

def __checkSerial(self):
"""
Checks serial port to see if anything is available to read
"""
self.__objLock.acquire()
try:
try:
intNoChars = self.__objSerialPort.inWaiting()
if intNoChars > 0:
strReceivedString =
self.__objSerialPort.read(intNoChars)
self.fireNewMessage(strReceivedString)
except:
raise
finally:
self.__objLock.release()

PySerial wraps all the platform specific stuff you, so you should
really use that, it behaves fairly well - the only real problem is a
lack of an observer interface but you can solve that as detailed above.
One final thing, don;t forget that RS232 isn't really a standard - it's
more like a rumour :-).

Cheers,

Neil

--

Neil Benn
Senior Automation Engineer
Cenix BioScience
BioInnovations Zentrum
Tatzberg 47
D-01307
Dresden
Germany

Tel : +49 (0)351 4173 154
e-mail : be**@cenix-bioscience.com
Cenix Website : http://www.cenix-bioscience.com

Jan 23 '06 #7

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

2
by: willie | last post by:
Hi, I'm writing a program which requires the use of three serial ports and one parallel port. My application has a scanning devices on each port, which I can access fine with pyserial. ...
3
by: collinm | last post by:
hi i send a command to a led display, the led display is suppose to return me some character i write a string on a serial port void ledDisplayExist() { char msg={'\0', '\0', '\0', '\0',...
0
by: asam.reddy | last post by:
Hi, I am trying to read serial port using the MSComm control in VS.NET2003(referred from the VS6.0). I have the code already in VB6 which I am coding to C#.NET. After setting all the required...
4
by: joe bloggs | last post by:
I am writing a mobile application to interface with a legacy system and I am planning to use web services to communicate with this system. The legacy system receives data through a serial port. ...
2
by: hani | last post by:
hi, i'm try to do a program that can read serial port in web page. can anyone give me any opinion to do this? i've download the javacomm and try the examples. i'ts working. but it is in java client....
2
by: yo2osv | last post by:
I want read serial port and show on the screen using C programing
0
by: boss1 | last post by:
i have a problem with php coding.that is i dont know how to read rs 232 serial port by using php ? my operating system is: windows-2000 professional. can u kindly help me ? i'll be very much...
4
by: max_mont | last post by:
Hi all, I'm a newbie in .NET technology. I've already developed Serial communication applications in C++ (WIN32). And I wanted to migrate to .NET technology. There is a serial component in...
0
by: ghjk | last post by:
I want to read sms from GSM modem using C# in serial communication. I wrote the code. But i want to do it automatically. I put my code here and please tell me how can i do it automatically. ...
6
by: terry | last post by:
Hi, I am trying to send a character to '/dev/ttyS0' and expect the same character and upon receipt I want to send another character. I tired with Pyserial but in vain. Test Set up: 1. Send...
0
by: jianzs | last post by:
Introduction Cloud-native applications are conventionally identified as those designed and nurtured on cloud infrastructure. Such applications, rooted in cloud technologies, skillfully benefit from...
0
by: abbasky | last post by:
### Vandf component communication method one: data sharing ​ Vandf components can achieve data exchange through data sharing, state sharing, events, and other methods. Vandf's data exchange method...
2
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 7 Feb 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:30 (7.30PM). In this month's session, the creator of the excellent VBE...
0
by: fareedcanada | last post by:
Hello I am trying to split number on their count. suppose i have 121314151617 (12cnt) then number should be split like 12,13,14,15,16,17 and if 11314151617 (11cnt) then should be split like...
0
Git
by: egorbl4 | last post by:
Скачал я git, хотел начать настройку, а там вылезло вот это Что это? Что мне с этим делать? ...
0
by: MeoLessi9 | last post by:
I have VirtualBox installed on Windows 11 and now I would like to install Kali on a virtual machine. However, on the official website, I see two options: "Installer images" and "Virtual machines"....
0
by: DolphinDB | last post by:
Tired of spending countless mintues downsampling your data? Look no further! In this article, you’ll learn how to efficiently downsample 6.48 billion high-frequency records to 61 million...
0
by: Aftab Ahmad | last post by:
Hello Experts! I have written a code in MS Access for a cmd called "WhatsApp Message" to open WhatsApp using that very code but the problem is that it gives a popup message everytime I clicked on...
0
by: Aftab Ahmad | last post by:
So, I have written a code for a cmd called "Send WhatsApp Message" to open and send WhatsApp messaage. The code is given below. Dim IE As Object Set IE =...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.