4

私は Arduino/Raspberry Pi プロジェクトに取り組んでおり、Python だけでなく Twisted Python も学習していることに気づきました。そのため、初心者であることをあらかじめお詫び申し上げます。私は今のところ単純にしようとしています.2つのデバイス間で一度にcharを送信しようとしています.

これまでのところ、Raspberry Pi から Arduino に送信し、期待どおりに LED を効果的にオフ/オンにすることができました。ただし、Arduino からシリアル ポートの RPi に送信されるものを検出する Twisted コードを生成することはできないようです。RPiで実行されているArduinoプログラマーのシリアルモニターアプリケーションを使用して、Arduinoが2秒ごとに文字を送信していることを確認しました。

以下のコードは RPi で実行され、GET 要求を受け取り、シリアル ポートを介してそのデータの一部を Arduino に渡します。ただし、このコードで同じシリアルポートをリッスンすることはできないようです。:/ 私はこれに 1 か月以上取り組んできましたが、行き詰まっているようです。Twisted Python がオンラインでシリアル データを受信するための良い例を見つけることができないようです。または少なくとも私が理解している例。とにかく、ここに私がこれまで持っているものがあります:

import sys
from urlparse import urlparse
from twisted.web import server, resource
from twisted.internet import reactor
from twisted.internet.protocol import Factory, Protocol
from twisted.internet.serialport import SerialPort

serServ = None

class USBclient(Protocol):
    def connectionMade(self):
        global serServ
        serServ = self
        print 'Arduino device: ', serServ, ' is connected.'

    def cmdReceived(self, cmd):
        serServ.transport.write(cmd)
        print cmd, ' - sent to Arduino.'
        pass

    def serialReadEvent(self):      #maybe it should be: doRead()? Couldn't get either to work.
        print 'data from arduino is at the serial port!'

class HTTPserver(resource.Resource):
    isLeaf = True
    def render_GET(self, request):      #passes the data from the get request
        print 'HTTP request received'
        myArduino = USBclient()
        stringit = str(request)
        parse = stringit.split()
        command, path, version = parse
        myArduino.cmdReceived(path)

class cmdTransport(Protocol):
    def __init__(self, factory):
        self.factory = factory

class cmdTransportFactory(Factory):
    protocol = cmdTransport

if __name__ == '__main__':
    HTTPsetup = server.Site(HTTPserver())
    reactor.listenTCP(5000, HTTPsetup)
    SerialPort(USBclient(), '/dev/ttyACM0', reactor, baudrate='115200')
    reactor.run()

ご覧のとおり、コードはシリアル ポートで何かを探しているだけですが、その魔法を起こすことはできないようです。事前に感謝します。どんな助けでも大歓迎です!

4

1 に答える 1