4

ターミナルで実行するとcherrypy Webサーバーを起動するPythonスクリプトがあります。スクリプトでは、インポートして pyserial を使用serialし、ポート /dev/ttyAMA0 を開き、任意のシリアル コマンドを送信できます。

 @cherrypy.expose
 def login (self, **data):
    passcode = data.get("passcode", None)
    print "logging in using passcode %s"%passcode ,type(passcode)

    import serial
    import time
    #open connection
    serialport=serial.Serial ("/dev/ttyAMA0", 9600, timeout=0.5)
    #write in user sign in code
    serialport.write("\x03LI%s\x0D"%passcode)
    #get reply 
    reply=serialport.readlines(1)
    print reply, type(reply)

ただし、イーサネット ポートがあり、Netcat を使用して同様のデバイスにシリアル コマンドを送信できるため、このスクリプトでシリアル ポートではなくイーサネット ポート経由でコマンドを送信するにはどうすればよいでしょうか? 何を変更すればよいですか?

申し訳ありませんが、私はこれを行う方法について本当に無知です。私はグーグルで検索しましたが、答えが見つかりません。:(

4

2 に答える 2

2

socatコマンドの使用についてはどうですか?次のコマンド ラインを使用すると、次の方法で/dev/ttyAMA0アクセスできるようになりますeth 127.0.0.1:5555

socat PTY,link=/dev/ttyAMA0 TCP:127.0.0.1:5555
于 2013-05-14T08:34:50.293 に答える
0

この問題に対する Python ベースのアプローチは、pyserial の組み込みネットワーク ポート機能 ( RFC2217標準に基づく) を使用することです。

サーバー(シリアルデバイスが接続されている場所)でネットワークシリアルサーバーを実行します-シリアルポートブリッジの例を使用できます:

% python /usr/share/doc/python-serial/examples/rfc2217_server.py -p 7000 /dev/ttyAMA0

そして、クライアントの python コードでは、rfc2217 スタイルの URL を使用して新しいもの (howto で説明されているように) を使用してそれにアタッチserial_for_urlます。

serial.serial_for_url('rfc2217://yourservername:7000')
于 2014-09-05T15:09:17.630 に答える