<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>