<div dir="ltr"><span style="font-family:arial,sans-serif;font-size:13px">Hi,</span><br><div dir="ltr" style="font-family:arial,sans-serif;font-size:13px"><div><br></div><div>I am new to Python. Trying to figure out how to use the serial port I started with pyserial.</div>
<div>Works - but the CPU usage on my Raspberry Pi is at about 30% just for reading the port. Before I started to optimize the code it was even 90+%.</div><div><br></div><div>So I tried twisted - and boom down to 3-4%. Even though twisted also uses pyserial (as far as I read) - obviously better than I do.</div>
<div><br></div><div>So far so good.</div><div>With copy&paste from the internet and some editing I got the PI to read from my Arduino. (code below)</div><div>But the code seems to be blocking. I tried putting things in a thread - but I must have done something wrong. It is still blocking.</div>
<div><br></div><div>I also don't know how to write.</div><div>Does s.write("test") work?</div><div><br></div><div>Would be great if someone could help me out here.</div><div><br></div><div>Thanks a lot.<br></div>
<div>Robert</div><div><br></div><div><br><div><br></div><div><div>import logging</div><div>from twisted.protocols.basic import LineReceiver</div><div>from twisted.protocols.basic import LineReceiver</div><div> </div><div>
from twisted.internet import reactor</div><div>from twisted.internet.serialport import SerialPort</div><div>from twisted.python import usage</div><div>import thread</div><div><br></div><div>class THOptions(usage.Options):</div>
<div> optParameters = [</div><div> ['baudrate', 'b', 115200, 'Serial baudrate'],</div><div> ['port', 'p', '/dev/ttyACM0', 'Serial port to use'],]</div>
<div><br></div><div><br></div><div>class Echo(LineReceiver):</div><div> def processData(self, data):</div><div> print(data)</div><div><br></div><div> def lineReceived(self, line):</div><div> try:</div>
<div> data = line.rstrip()</div><div> #logging.debug(data)</div><div> self.processData(data)</div><div> #print(line.rstrip())</div><div> #pass</div><div> except ValueError:</div>
<div> logging.error('Unable to parse data %s' % line)</div><div> return</div><div><br></div><div>def SerialInit():</div><div> o = THOptions()</div><div> try:</div><div> o.parseOptions()</div>
<div> except usage.UsageError, errortext:</div><div> logging.error('%s %s' % (sys.argv[0], errortext))</div><div> <a href="http://logging.info/" target="_blank">logging.info</a>('Try %s --help for usage details' % sys.argv[0])</div>
<div> raise SystemExit, 1</div><div> </div><div> baudrate = o.opts['baudrate'] #int('115200')</div><div> port = o.opts['port'] </div><div> logging.debug('About to open port %s' % port)</div>
<div> s = SerialPort(Echo(), port, reactor, baudrate=baudrate)</div><div> reactor.run()</div><div><br></div><div><br></div><div>thread.start_new_thread(SerialInit())</div><div><br></div><div>if __name__ == '__main__':</div>
<div> print("-----")</div><div> s.write('123456789')</div><div> #s.write("\n")</div></div></div></div></div>