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)