python 串口通信

需要准备好的工具

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

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

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

pip install pyserial

列出所有再用的串口

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")

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

初始化串口

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

获取数据

此处有获取到的是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('没有接收到数据')

接下来是解析数据

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

def parseData(res):
	pass

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

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


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 ''
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值