Pyserial - send and receive characters through linux serial port

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Fri May 2 23:15:47 EDT 2008


En Fri, 02 May 2008 15:44:09 -0300, terry <itskrithika at gmail.com> escribió:
> On May 2, 10:26 am, terry <itskrith... at gmail.com> wrote:
>> On Apr 26, 8:21 am, Grant Edwards <gra... at visi.com> wrote:
>>
>> > Much of the time the exercise of writing a small demo program
>> > will lead you to the answer.  If not, then post it, along with
>> > the output from the program that shows the problem.
>>
>> Here is the code.
>>
>> """Open serial connection"""
>>         def openSerialConnection(self,serpt):
>>             try:
>>                 s1 = serial.Serial(serpt,timeout=10)
>>
>>             except:
>>                 self.print_u("Failed to open serial port %s. " %serpt)
>>
>>         def enterThroughSerialPort(self,serpt):
>>             s1 = serial.Serial(serpt,timeout=10)
>>              self.print_u('Sending !!!!..')
>>              while True:
>>                 s1.write('*')
>>                c = s1.read(1)
>>                if c:
>>                   self.print_u('Found "*" ')
>>                     break
>>             print c
>>              s1.write('enter\r')
>>              s1.read('login')
>>
>> if __name__ == '__main__':
>>     serpt = '/dev/ttyS0'
>>     x.openSerialConnection(serpt)
>>     # funtion to reboot the device goes here ---#
>>     x.enterThroughSerialPort(serpt)
>>
>> After opening the serial connection, the device is rebooted followed
>> by sending '*' to serial port and reading back the same. I seem to
>> have problem while trying to read '*' back from serial port. First of
>> all I am not sure if serial port received the '*'.
>
> This is the err message I received:
>
> c = s1.read(1)
> File "/usr/local/lib/python2.5/site-packages/serial/serialposix.py",
> line 275, in read
>     ready,_,_ = select.select([self.fd],[],[], self._timeout)

If you want some help, you have to help us to diagnose the problem.
The above lines are just a small excerpt of the complete error report that  
surely you got; usually it includes the exception *type*, the exception  
*value*, and the whole *stack trace*. Now we have to *guess* what happened  
in that select call.
Also, when posting code, try to post the *actual* code you run - copy and  
paste it. Do not retype it again. The code you posted has indentation  
errors, uninitialized variables...
Try to make a *small*, runnable example that reproduces the problem;  
remove anything that isn't esential to the issue being discussed. Write  
down what is your expected behaviour, and what actually happens. If the  
program halts due to an error, copy the *whole* report including the  
exception type, message, and the complete traceback.

In this particular case, due to the serial device, it's improbable that  
someone will be able to execute your program, but anyway try to write the  
example code. Sometimes you may find the problem yourself just by trying  
to write the example.

A few notes on the code:

- don't create many Serial objects; create only a single instance and use  
it everywhere it is needed. (That is, instead of using '/dev/ttyS0' as an  
argument, pass the Serial object already created, or save it as an  
instance attribute: self.serial = Serial(...) )

- ensure you're using the right protocol parameters (baud rate, bits,  
parity...) for the device. That's why it helps to create the Serial object  
in a single place.

-- 
Gabriel Genellina




More information about the Python-list mailing list