当前位置:   article > 正文

python 串口通信_linux python 串口

linux python 串口

需要准备好的工具

windows上找个串口通信工具
Linux上查看设备列表

有可能需要安装串口驱动,去设备管理器中安装一下
或这个一般串口开发,厂家都会给驱动和串口调试工具

如果串口调试工具调试没有问题了
接下来你用python代码调试
你需要在python环境中安装pyserial

pip install pyserial
  • 1

列出所有再用的串口

https://blog.csdn.net/sprawling/article/details/50477166

import os

import serial.tools.list_ports

port_list = list(serial.tools.list_ports.comports())


print(port_list)#if there is no serial ports,here wil show '[]'. array mode

if len(port_list) == 0:

	print('No serial ports.')

else:

	for i in range(0,len(port_list)):

	print(port_list[i])

	os.system("pause")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

根据显示的串口列表或者从设备管理器中看到的结果

初始化串口

def initSerial():
    print()
    if platform.system() == "Windows":
    # 根据情况看要不要E
    # 串口名, 比特率等参数根据 设备通信协议来设置
        # ser = serial.Serial("COM3", 115200, 8, "E", timeout=50, stopbits=1)
        ser = serial.Serial("COM3", 115200, 8, timeout=50, stopbits=1)
        print('开启ser', ser)
    elif platform.system() == "Linux":
        # print("linux sys")
        ser = serial.Serial("/dev/ttyUSB1", 9600, 8, timeout=50, stopbits=1)
        # ser = serial.Serial("/dev/ttyUSB1", 9600, 8, "E", timeout=50, stopbits=1)
    else:
        print('不认识的操作系统')
    return ser
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

获取数据

此处有获取到的是16进制数据
有的直接获取的byte, 根据情况来获取


def getData(ser):
    time.sleep(1)
    count = ser.inWaiting()
    print(count)

    # 数据的接收
    if count > 0:
        data = ser.read(count)
        print(
            data
        )
        if data != b'':
            # 将接受的16进制数据格式如b'h\x12\x90xV5\x12h\x91\n4737E\xc3\xab\x89hE\xe0\x16'
            #                      转换成b'6812907856351268910a3437333745c3ab896845e016'
            #                      通过[]去除前后的b'',得到我们真正想要的数据
            # print("receive", str(binascii.b2a_hex(data))[2:-1])
            # res = str(binascii.b2a_hex(data))[2:-1]
            # print('res1-->', res)
            res = str(data)[2:-1]
            # print('res2-->', res)
            if res.startswith("$") and res.endswith("\\r\\n"):
            # if res.startswith("$") and res.endswith("\r\n"):
                parseData(res)
            else:
                print('数据格式由问题')
                print(res)
                savefile(res,filename='error.txt')
            return res

    # else:
    #     print('没有接收到数据')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

接下来是解析数据

这一步中,数据位代表的内容不同,无法做到统一,根据通信协议文档来吧

def parseData(res):
	pass
  • 1
  • 2

接下来是根据解析出来的数据进行其它业务

当然一般我会将整个过程封装到一个流程函数中
类似于


def start():
    """
    流程函数
    :return:
    """
    ser = initSerial()
    # for i in range(1, 5):
    while True:
        # time.sleep(0.5)
        res = getData(ser)
        # res = "01030e01a70002000d000e0011011401eae53e"
        # parseData(res)
    # print(d)
    return ''
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/211186
推荐阅读
相关标签
  

闽ICP备14008679号