Python:解析pyserial串口通讯

本文介绍了串行接口的基本概念,使用I2C-tools和pyserial库进行串口操作,如查询串口、进入调试模式、发送和接收数据。通过实例展示了如何在Python中实现串口通信并验证其功能。
摘要由CSDN通过智能技术生成

简介:串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口 (Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。

历史攻略:

i2c-tools:让硬件通信更简单

IPMI开源库pyghmi基本使用

安装:

pip install pyserial

案例指引:

1、查询当前机器有哪些串口:

ls -al /dev/tty* | grep  USB

图片

2、进入串口调试模式

sudo minicom -D /dev/ttyUSB0

3、手工输入和返回尝试

图片

4、pyserial - demo:serial_demo.py

# -*- coding: utf-8 -*-
# time: 2024/4/7 23:31
# file: serial_demo.py
# 公众号: 玩转测试开发
import time
import serial


class SerialTool(object):
    def __init__(self, baudrate, bytesize, timeout=0):
        self.baudrate = baudrate
        self.bytesize = bytesize
        self.timeout = timeout
        self.ser = serial.Serial(self.baudrate, self.bytesize, timeout=self.timeout)

    def get_data(self, size=100, encoding_type=""):
        if encoding_type:
            data = self.ser.read(size).decode(encoding=encoding_type)
        else:
            data = self.ser.read(size).decode()

        return data

    def get_all_data(self, encoding_type=""):
        if encoding_type:
            data = self.ser.read_all().decode(encoding=encoding_type)
        else:
            data = self.ser.read_all().decode()

        return data

    def input_data(self, data):
        data = data.encode()
        print(f"input data: {str(data)}")
        self.ser.write(data)
        time.sleep(0.1)

    def reset_output_buffer(self):
        self.ser.reset_output_buffer()

    def test_write_read(self):
        self.ser.write(b"\n")
        time.sleep(0.1)
        data = self.get_data(100, "ascii")
        print(f"my test data: {data}")


if __name__ == "__main__":
    baudrate = "/dev/ttyUSB0"
    bytesize = 115200
    timeout = 0
    my_ser = SerialTool(baudrate, bytesize, timeout)

    data = my_ser.get_data(100, "ascii")
    print(f"Before input. Get data:{data}")

    # my_ser.input_data("mw 0x0109010C 0x02f24500")
    my_ser.test_write_read()

    data2 = my_ser.get_data(100, "ascii")
    print(f"After input. Get data:{data2}")

运行结果:对比步骤3手工调试可知,

代码运行与手工输入回车都是返回 =>,说明调试成功。

图片

其他参考命令:退出串口调试, ctrl + A 然后松开后按 X 即可实现退出串口调试模式。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值