Pythonのシリアル通信(pyserial)

 

 

pyserialモジュールは、さまざまなプラットフォームと互換性のシリアルポートへのアクセスを、カプセル化します。

 

インストール

ピップinsatll pyserial

 

初期化

簡単な初期化の例

インポートシリアル
SER = serial.Serial(' COM1 '、9600、タイムアウト= 1)

 

すべてのパラメータ

SER = serial.Serial(
ポート =なし、               #のデバイスの数、で始まる番号付けゼロ。すべてが失敗した場合、ユーザー
#はデバイス文字列、ノートを指定することができますこれはもう、ポータブルではないことポートが指定されていない場合を未設定クローズシリアルポートオブジェクトが作成された 
ボーレート= 9600、          ボーレートの 
バイトサイズ= EIGHTBITS、     データビットの数 
パリティ= PARITY_NONE、     パリティチェックを有効 
ストップビットを= STOPBITS_ONE、   #1 ストップビットの数 
タイムアウト=なし、           #は、タイムアウト値、永遠に待つなし設定 
xonxoff = 0を、               ソフトウェアフロー制御を有効 
rtsctsを= 0、               RTS / CTSフロー制御を有効に 
interCharTimeout =なし    文字間タイムアウト、無効にするなしに

 

初期異なるプラットフォーム

SER = serial.Serial(" の/ dev / ttyUSB0 "、9600、タイムアウト= 0.5) USBシリアルポートを使用して 
SERを= serial.Serial(" / DEV / ttyAMA0 "、9600、タイムアウト= 0.5) 使用ラズベリーパイGPIOポートはシリアルポートに接続されている 
出願serial.Serial =(1,9600、タイムアウト= 0.5) WinsowsシステムCOM1シリアルポートコネクタ 
SER = serial.Serial(" COM1 "、9600、タイムアウト= 0.5) WinsowsシステムCOM1使用して、シリアルポートコネクタ 
のSerを= serial.Serial(" の/ dev / ttyS1の"、9600、タイムアウト= 0.5) Linuxシステムは、ポートCOM1を使用して、シリアルポートに接続されています。

 

serial.Serialクラス(追加の初期化処理)

クラスserial.Serial()
{ 
   DEF   __init__、(ポート=なし、ボーレート= 9600、バイトサイズ= EIGHTBITS、パリティ= PARITY_NONE、ストップビット= STOPBITS_ONE、タイムアウト=なし、xonxoff =偽、rtscts = Falseを、writeTimeoutは=なし、dsrdtr =偽interCharTimeout = なし)
}

 

 

SERオブジェクトのプロパティ

名前:デバイス名
ポート:ポートの読み取りや書き込み
ボーレートを:ボーレートの
バイトサイズを:バイトサイズの
パリティ:パリティ
ストップビット:ビットストップ
タイムアウトを:読み取りタイムアウト設定
writeTimeoutを:タイムアウト書く
xonxoffを:ソフトウェアフロー制御
rtscts:ハードウェアフロー制御
dsrdtr:ハードウェアフロー制御
文字タイムアウト間隔:interCharTimeout

 

 

SERオブジェクトは、通常の方法を使用します

ser.isOpen():ポートが開いているかどうかを確認してください。
ser.open()のポートを開きます。
ser.close():ポートを閉じます。
ser.read():ポートからのデータバイトをお読みください。デフォルトの1バイト。
ser.read_all():ポートから受信したすべてのデータ。
ser.write(こんにちは):ポートにデータを書き込みます。
ser.readline():データの一つの行を読みます。
ser.readlines():複数行のデータを読み取ります。
()in_waitingする:キャッシュ内に受信したバイト数を返します。
フラッシュ():すべてのデータを書き込むことが待っています。
flushInput():キャッシュに受信したすべてのデータを破棄します。
flushOutputは():現在の書き込み操作を終了し、送信データのキャッシュを破棄します。

 



パッケージのリファレンス

インポートシリアル
 インポートserial.tools.list_ports 

クラスコミュニケーション(): 

    初期
    DEF  __init__ (セルフ、COM、bpsの、タイムアウト):
        self.port = COM 
        self.port = bpsの
        self.timeout = タイムアウト
         グローバルRetの
         試みオープンポート、およびシリアル・オブジェクトと 
             self.main_engine = serial.Serial(COM、bpsの、タイムアウト= タイムアウト)
             成功を開くかどうかを判断
             した場合(self.main_engine.is_open):
               Retの = 除くE AS例外:
             印刷" ---異常---:" 、E) 

    印刷デバイスの基本的な情報の
    DEFのprint_name(セルフ):
         印刷(self.main_engine.name) デバイス名
        を印刷(self.main_engine.port)読み取りまたは書き込みポート
        印刷(self.main_engine.baudrate) ボー
        印刷(self.main_engine.bytesize) バイトサイズの
        印刷(self.main_engine.parity) パリティビット
        を印刷(self.main_engine.stopbits) ストップビットの
        印刷(self.main_engine.timeout) タイムアウト設定を読む
        印刷する(self.main_engine.writeTimeout) 書き込みタイムアウト
        印刷(self.main_engine.xonxoff) ソフトウェアフロー制御
        を印刷(self.main_engine.rtscts) ソフトウェアフロー制御
        を印刷(self.main_engine.dsrdtr) ハードウェアフロー制御を
        印刷(self.main_engine.interCharTimeout) 文字間隔のタイムアウト

    #はシリアルポート開く
    DEF Open_Engine(セルフ):
        self.main_engine.open() 

    シリアルポート閉じ
    DEF Close_Engine(セルフ):
        self.main_engine.close()
        印刷(self.main_engine。 IS_OPEN)  シリアルポートが開いてチェック

    使用可能なシリアルポートのリストを印刷します
    @staticmethod
     DEF Print_Used_Com()
        にPort_list = リスト(serial.tools.list_ports.comports())
         プリント(にPort_list) 





    サイズ指定受信データ
    シリアルポートサイズのバイトから。指定されたタイムアウトした場合、少ないバイト数は、タイムアウト後に返すことがありますが、タイムアウトを指定しない場合は、受信したバイトの指定された数が完了するまで待機します。
    DEF Read_Size(セルフ、サイズ):
         リターン self.main_engine.read(サイズ= サイズ)

    データの行受信
    #をreadlineのを使用する場合は、()は注意してください:シリアルポート、シリアルポートを開くときにあなたがタイムアウトを指定する必要がありますか、新しい行を受信しない場合、それは意志私は待っています。
    タイムアウトなし場合は、readlineが異常に報告されます。
    デフREAD_LINE(自己):
         戻りself.main_engine.readline() 

    再送データ
    デフ SEND_DATA(自己、データ):
        self.main_engine.write(データ)

    複数の例の
    #1 self.main_engine.write(CHR(0x06で).encode( "UTF-8")は)進データ#1送信
    #1 )(プリント(self.main_engine.readを進バイト読み取る読取.HEX())の## 
    #の印刷(self.main_engine.readは())バイト#読み取る
    #の印刷(self.main_engine.read(10).decode(「GBKを"))#は、10バイトの読み取り
    #1 GBK「))#リード線プリント(self.main_engine.readline()。デコード(" 
    #1 、印刷(self.main_engine.readlines())#複数行を読み取り、リストを返しますあなたが使用して、タイムアウト(時間切れ)と一致しなければなりません
    #の印刷(self.main_engine.in_waiting)を取得し、入力バッファ#バイト残り
    #の印刷(self.main_engine.out_waiting)#は、出力バッファのバイト数を取得
    #の印刷を(self.main_engine .readall())#は、すべての文字を読んで。

    #の受信データ
    データを表す2バイトの整数
    文字は1バイト占有

    DEF Recive_data(セルフ、ウェイ):
        データを受信するサイクルを、これは無限ループで、スレッドを達成するために使用することができます
        印刷データの受信を開始:しばらく真:
             試してみるIF self.main_engine.in_waiting:
                     印刷:いくつかのデータのバイト受信、self.main_engine.in_waiting)
                     IF(ウェイ== 0):
                        受信したバイトのバイト
                        のための I におけるレンジ(self.main_engine.in_waiting):
                            データをSelf.Read_Size =(1).HEX() 16進数のための 
                            データ= INT(データ、16) 小数に
                            IF(データ== " 出口"):  誘導灯が
                                BREAK 
                            印刷" 収入データ:" データ)
                     IF(方法== 1 ):
                        全体的な受信
                        データ= self.main_engine.read(self.main_engine.in_waiting).decode(" UTF-8「)モード#1。 
                        データ= self.main_engine .read_all()。デコード(" UTF-8 "第二の方法

                        IF(データ== " 出口"):  終了フラグが
                            BREAK 
                        印刷" :受信データ" 、データ)
             を除くE AS例外:
                 印刷" 例外エラー:" 、E)



のRet = Falseのかどうか成功したロゴの作成 
Engine1 =コミュニケーション(" COM9 "、9600,0.5 IF (RET):
    Engine1.Recive_dataを( 1)
 

おすすめ

転載: www.cnblogs.com/-wenli/p/11261109.html