Python使用pyserial进行串口通信

python相关 / 2018年03月29日 10时23分 / 28153人浏览
安装pyserial
pip install pyserial
查看可用的端口
# -*- coding: utf-8 -*-
import serial.tools.list_ports
port_list = list(serial.tools.list_ports.comports())
if len(port_list) == 0:
   print('无可用串口')
else:
    for i in range(0,len(port_list)):
        print(port_list[i])
所发十六进制需转换为以下格式
# 所发十六进制字符串010591F50000F104
cmd = [0x01, 0x05, 0x91, 0xF5, 0x00, 0x00, 0xF1, 0x04]
串口通信 Windows下端口为COM*, Ubuntu下为/dev/ttyS0
# -*- coding: utf-8 -*
import serial
import time
# 打开串口
ser = serial.Serial("COM8", 9600)
def main():
    while True:
        # 获得接收缓冲区字符
        count = ser.inWaiting()
        if count != 0:
            # 读取内容并回显
            recv = ser.read(count)
            ser.write(recv)
        # 清空接收缓冲区
        ser.flushInput()
        # 必要的软件延时
        time.sleep(0.1)
    
if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        if ser != None:
            ser.close()
# -*- coding: utf-8 -*
import serial
import time
# 打开串口
#ser = serial.Serial("/dev/ttyUSB0",9600)
# 创建serial实例
ser = serial.Serial()
ser.port = '/dev/ttyUSB0'
ser.baudrate = 9600
ser.parity = 'N'
ser.bytesize = 8
ser.stopbits = 1
ser.timeout = 0.2
def main():
    # 打开串口
    ser.open()
    # 发送
    code = '01 03 40 00 00 02 D1 CB'
    ser.write(bytes.fromhex(code))
    while True:
        
        # 获得接收缓冲区字符
        count = ser.inWaiting()
        if count != 0:
            # 读取内容并回显
            recv = ser.read(count)
            data= recv.hex()
            print(data);
#            ser.write(recv)
        # 清空接收缓冲区
        ser.flushInput()
        # 必要的软件延时
        time.sleep(0.1)
    
if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        if ser != None:
            ser.close()