Ubuntuアナログシリアル通信

Ubuntuシリアル通信###

#1 周囲##

Ubuntu 16.04(Mac仮想マシン)
Python 3.5

#1.1 プラグイン###をインストールします

  1. Ubuntuシリアルポートアシスタント
sudo apt install cutecom

  1. Pythonサードパーティライブラリ
pip3 install pyserial

#2 目的##

#3 開始##

#3.1 仮想シリアルポート###

なぜ仮想シリアルポート?

コンピューターにシリアルポートデバイスがないため、シリアル通信を実行するにはシリアルポートを仮想化する必要があります。これは非常に重要です!!!コンピューターにシリアルポート周辺機器がなく、仮想で使用可能なシリアルポートがない場合は、実行できません。シリアル通信!

#! /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で仮想的に送信されるシリアルデバイスです。

仮想シリアルポートが使用可能であることを確認します。

  1. Cutecomを開く
sudo cutecom

  1. 使用する

仮想シリアルポートは正常に使用できます!

#3.2 シリアルポートデータを受信する###

受信コード:

# 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 文字間隔タイムアウト

#3.3 シリアルポートデータを書き込む###

コードを書く:

# 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

Ubuntuアナログシリアル通信