1. 程式人生 > 其它 >python【串列埠操作】

python【串列埠操作】

import serial
import sys
from time import sleep
import time


TELNET_RETURN = "\n"

try:
  ser = serial.Serial("COM11", 115200,timeout=0, parity=serial.PARITY_NONE,
                        stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS)

except:
  sys.exit("Error connecting device")

result=ser.write(TELNET_RETURN.encode())#寫資料

# 串列埠要等0.5秒才有ser.inWaiting() > 0
for _ in range(10):
    print(time.strftime("%Y%m%d_%H_%M_%S", time.localtime()))
    queue = ser.inWaiting()
    if queue > 0:
        print(time.strftime("%Y%m%d_%H_%M_%S", time.localtime()))
        data = ser.read(1000)
        print (data)
    sleep(0.2)

ser.close()
import serial  # 匯入模組

try:
    # 埠,GNU / Linux上的/dev/ttyUSB0 等 或 Windows上的 COM3 等
    portx = "COM3"
    # 波特率,標準值之一:50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,115200
    bps = 115200
    # 超時設定,None:永遠等待操作,0為立即返回請求結果,其他值為等待超時時間(單位為秒)
    timex = 5
    # 開啟串列埠,並得到串列埠物件
    ser = serial.Serial(portx, bps, timeout=timex)
    # print("串列埠詳情引數:", ser)
    # print(ser.port)  # 獲取到當前開啟的串列埠名
    # print(ser.baudrate)  # 獲取波特率

    result = ser.write("我是東小東".encode("gbk"))  # 寫資料
    print("寫總位元組數:", result)

    # print(ser.read())#讀一個位元組
    # print(ser.read(10).decode("gbk"))#讀十個位元組
    # print(ser.readline().decode("gbk"))#讀一行
    # print(ser.readlines())#讀取多行,返回列表,必須匹配超時(timeout)使用
    # print(ser.in_waiting)#獲取輸入緩衝區的剩餘位元組數
    # print(ser.out_waiting)#獲取輸出緩衝區的位元組數

    # 迴圈接收資料,此為死迴圈,可用執行緒實現
    while True:
        if ser.in_waiting:
            str = ser.read(ser.in_waiting).decode("gbk")
            if (str == "exit"):  # 退出標誌
                break
            else:
                print("收到資料:", str)

    print("---------------")
    ser.close()  # 關閉串列埠


except Exception as e:
    print("---異常---:", e)