當前位置:
首頁 >
python 串口_Python串口操作库pyserial(1)
發布時間:2025/3/21
32
豆豆
生活随笔
收集整理的這篇文章主要介紹了
python 串口_Python串口操作库pyserial(1)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
測試過程中需要用到串口,目前采用pyserial庫。
1 采用命令行安裝pyserial庫: pip install pyserial
2 獲取可用的串口號,見Listing available com ports with Python。
import sys import glob import serialdef serial_ports():""" Lists serial port names:raises EnvironmentError:On unsupported or unknown platforms:returns:A list of the serial ports available on the system"""if sys.platform.startswith('win'):ports = ['COM%s' % (i + 1) for i in range(256)]elif sys.platform.startswith('linux') or sys.platform.startswith('cygwin'):# this excludes your current terminal "/dev/tty"ports = glob.glob('/dev/tty[A-Za-z]*')elif sys.platform.startswith('darwin'):ports = glob.glob('/dev/tty.*')else:raise EnvironmentError('Unsupported platform')result = []for port in ports:try:s = serial.Serial(port)s.close()result.append(port)except (OSError, serial.SerialException):passreturn resultif __name__ == '__main__':print(serial_ports())3 進行串口通訊:
def send_str(port, baudrate, parity, value):port_set = serial.Serial(port=port, baudrate=baudrate, parity=parity)port_set.write(value)# delay 100ms if receive is blank, just waiting 5s.n = 0while port_set.inWaiting() == 0:time.sleep(0.1)n = n + 1if n > 50:# send frame againport_set.write(value)break# every 100ms check the data receive is readybyte_number_1 = 0byte_number_2 = 1while byte_number_1 != byte_number_2:byte_number_1 = port_set.inWaiting()time.sleep(0.1)byte_number_2 = port_set.inWaiting()receive_frame = port_set.read_all()return receive_frameport: 串口號,str格式,例如‘COM3’;
baudrate: 波特率,str格式,例如‘9600’;
parity:校驗位,str格式。只需要第一個字母,‘N’無校驗,‘O’奇校驗,‘E’偶校驗;
value: 設置的數據,數據需要為int格式,多字節傳輸采用list。
# delay 100ms if receive is blank, just waiting 5s.n = 0while port_set.inWaiting() == 0:time.sleep(0.1)n = n + 1if n > 50:# send frame againport_set.write(value)breakinWaiting()返回接收到的字符。
此段代碼判斷是否有數據返回。最多等待5s,之后重發。
# every 100ms check the data receive is readybyte_number_1 = 0byte_number_2 = 1while byte_number_1 != byte_number_2:byte_number_1 = port_set.inWaiting()time.sleep(0.1)byte_number_2 = port_set.inWaiting()此段代碼判斷是否接收完成。每100ms判斷一次,判斷時間可以根據波特率進行修改。
receive_frame = port_set.read_all()接收全部返回數據。返回數據類型為byte,可以采用與list相同方法進行操作。
4 判斷端口是否可用
def serial_alive(port=None):port_status = Truetry:s = serial.Serial(port)s.close()except OSError:port_status = Falsereturn port_statusif __name__ == '__main__':print(serial_alive('COM5'))總結
以上是生活随笔為你收集整理的python 串口_Python串口操作库pyserial(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sql怎么把小数变百分比_云计算基本技能
- 下一篇: python args kwargs_P