Ubuntu 16.04(Mac仮想マシン)
Python 3.5
sudo apt install cutecom

pip3 install pyserial
なぜ仮想シリアルポート?
コンピューターにシリアルポートデバイスがないため、シリアル通信を実行するにはシリアルポートを仮想化する必要があります。これは非常に重要です!!!コンピューターにシリアルポート周辺機器がなく、仮想で使用可能なシリアルポートがない場合は、実行できません。シリアル通信!
#! /usr/bin/env python
# coding=utf-8import pty
import os
import select
def mkpty():
master1, slave = pty.openpty()
slaveName1 = os.ttyname(slave)
master2, slave = pty.openpty()
slaveName2 = os.ttyname(slave)print('\nslave device names: ', slaveName1, slaveName2)return master1, master2
if __name__ =="__main__":
master1, master2 =mkpty()print(master1, master2)while True:
rl, wl, el = select.select([master1,master2],[],[],1)for master in rl:print(master)
data = os.read(master,128)if master==master1:
os.write(master2, data)else:
os.write(master1, data)
slave device names:/dev/pts/18/dev/pts/20
その中で、 / dev / pts / 18と / dev / pts / 20は、Ubuntuで仮想的に送信されるシリアルデバイスです。
仮想シリアルポートが使用可能であることを確認します。
sudo cutecom


仮想シリアルポートは正常に使用できます!
受信コード:
# usr/bin/python3
# - *- coding: utf-8-*-import serial
ser=serial.Serial("/dev/pts/18",115200,timeout=0.5)print("serial_name:",ser.name)
ser.close()
ser.open()print(ser.isOpen())while True:
s = ser.read(10) #10文字ごとに読む
# s = ser.readline() #行を読むことです/n終了、そうでない場合/n読み続け、ブロックします。
print(s)
ser.close()#ポートを閉じる

serial API:
| シリアル方式 | 説明 | 備考 |
|---|---|---|
| serial.Serial | シリアルポートオブジェクトをインスタンス化します | ser = serial.Serial( "/ dev / pts / 18"、115200、timeout = 0.5) |
| ser.name | シリアルポート名 | |
| ser.open() | シリアルポートを開きます(開くことができない場合は、開く前に閉じます) | |
| ser.close() | シリアルポートを閉じる | |
| ser.read(x) | x文字を読み取る | |
| ser.readline() | 行を読み取り、/ nで終了します。/nがない場合は、読み取りを続けてブロックします。 | |
| ser.readlines() | 複数行を読み取るには、タイムアウト時間を設定する必要があります | |
| ser.xreadlines() | 複数行を読み取り、タイムアウト時間を設定する必要があります | |
| ser.write( "x") | データの書き込み | |
| ser.baudrate | ボーレート | |
| ser.bytesize | バイトサイズ | |
| ser.parity | 桁を確認 | |
| ser.stopbits | ストップビット | |
| ser.timeout | タイムアウト設定の読み取り | |
| ser.writeTimeout | 書き込みタイムアウト | |
| ser.xonxoff | ソフトウェアフロー制御 | |
| ser.rtscts | ハードウェアフロー制御 | |
| ser.interCharTimeout | 文字間隔タイムアウト |
コードを書く:
# usr/bin/python3
# - *- coding: utf-8-*-import serial
ser=serial.Serial("/dev/pts/18",115200,timeout=0.5)print("serial_name:",ser.name)
ser.close()
ser.open()print(ser.isOpen())
# while True:
ser.write(b"hello") #バイナリ
ser.close()#ポートを閉じる
Recommended Posts