1 串口简介 / Serial Introduction
串行接口(Serial Interface)简称串口,通常为COM接口,数据发送方式为一位一位地顺序传送,通信线路简单,一对传输线即可实现双向通信,适用于远距离且传输速度慢的通信。其中最常用的也是标准接口为RS-232,除此之外还有RS-422,RS-485等。
2 pyserial环境搭建
Pyserial的安装可以通过pip进行,直接在命令行输入下列命令进行安装,
pip install pyserial
3 pyserial基本用法
利用pyserial可以实现Python对串口的控制,其基本使用方式十分简单,主要为一下几步,
1. 利用Serial类传入配置参数,生成串口实例;
2. 利用串口实例的write()/read()方法消息的发送与接收。
Note: 关于Serial类,主要参数为端口和波特率,更多参数可查看源代码。

1 import serial 2 3 ser = serial.Serial(port='com1', baudrate=9600) 4 print(ser.portstr) 5 6 def serial_communi(ser, msg): 7 # n is the length of msg sent 8 n = ser.write(msg.encode()) 9 print(n) 10 s = ser.read(n) 11 print(s)

4 read_until 方法的实现与扩展
在pyserial中,read_until 方法只能处理一个终止符,而当需要处理多个终止标志的时候,则需要重新定义一个新的方法,参考 pyserial 源代码中的 read_until 函数,其实现方式为:
- 每次读取一个字符,加入待返回字符串
- 根据终止符长度n,获取字符中后 n 位字符,检测是否为终止符
下面的代码供参考,

1 def _read_until(self):
2 line = ''
3 while True:
4 try:
5 c = self.read(1)
6 except (
7 AttributeError, TypeError, # COM Exception
8 ValueError, EOFError, # TELNET Exception
9 self._connection.OpenCloseException) as e:
10 # Above Exception happens when communication manually closed,
11 # if still should run, condition sleep here,
12 # else return None to exit thread
13 if self.should_run:
14 self._cond_wait(self._recv_cond)
15 continue
16 else:
17 return None
18 if c:
19 line += c
20 self._result.put(c)
21 tokens = [self._term_token, self._abort_token, self._cr_token, self._lf_token]
22 for token in tokens:
23 if not line[-len(token):] == token:
24 continue
25 if token == self._cr_token or token == self._lf_token:
26 return line
27 if token == self._term_token:
28 self.waiter_wake_up()
29 self.termi_signal(True)
30 self._result.save(strip=self._term_token)
31 self.logger.debug("TERMINATE %s" % self._term_token)
32 return line
33 if token == self._abort_token:
34 # TODO: handle this abort token encountered
35 self.logger.debug("ABORT %s" % self._abort_token)
36 pass
37 # When timeout will enter this else
38 # else:
39 # return line

本文介绍串行接口的基本概念,包括常见的RS-232、RS-422和RS-485标准,并详细讲解如何使用Pyserial库在Python中实现串口通信。从环境搭建到基本用法,再到read_until方法的实现与扩展,全面覆盖串口编程技巧。

2907

被折叠的 条评论
为什么被折叠?



