Python的扩展接口[1] -> 串口通信

串口通信 / Serial Communication



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 函数,其实现方式为:

  1. 每次读取一个字符,加入待返回字符串
  2. 根据终止符长度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

原文地址:https://www.cnblogs.com/stacklike/p/8278915.html

时间: 2024-10-09 20:40:12

Python的扩展接口[1] -> 串口通信的相关文章

树莓派+Python+pyserial 2.7实现串口通信

手上有个CCD Camera(Barcode Reader/Scanner Module),它是通过RS232通信的,用RS232转USB的转接线连接树莓派,即可完成硬件连接.对于串口通信,可以通过pyserial实现. 首先,安装pyserial: 从https://pypi.python.org/pypi/pyserial下载最新版本的安装包,再通过下面的命令完成安装: tar zxvf pyserial-2.7.tar.gz cd pyserial-2.7 python setup.py

Python的扩展接口[0] -> VISA仪器控制

VISA仪器控制 / VISA Instrument Control 1 VISA简介 / VISA Introduction VISA(Virtual Instrument Software Architecture,简称为VISA),即虚拟仪器软件结构,是VXI plug&play联盟制定的I/O接口软件标准及其规范的总称.VISA提供用于仪器编程的标准I/O函数库,称为VISA库.VISA函数库驻留在计算机系统内,是计算机与仪器的标准软件通信接口,计算机通过它来控制仪器. 作为通用I/O标

Python的扩展接口[2] -> 动态链接库DLL[0] -> 动态链接库及辅助工具

动态链接库 / Dynamic Link Library 目录 动态链接库简介 函数封装DLL 组件对象模型COM 如何判断.dll文件是COM还是DLL 辅助工具 1 动态链接库简介 / DLL Introduction 动态链接库(Dynamic Link Library, DLL),是微软在Windows操作系统中,实现共享函数库概念的一种方式,在Windows下,这些库函数的扩展名可以是.dll/.ocx(ActiveX)/.drv(旧式系统驱动程序),在Linux系统中常常是.so文件

Python的扩展接口[3] -> Matlab引擎 -> 使用 Python 调用 Matlab 程序

Python - Matlab 目录 Python-Matlab 引擎 Python-Matlab 数组 Python-Matlab 基本操作 Python-Matlab 调用 m 文件 Matlab的官方文档中介绍了Matlab与其余编程语言之间的引擎接口,其中包括对于Python开放的引擎API,可参考官方教程,其中包括引擎安装,基本使用,以及Python与Matlab之间的数据类型转换及交互. 除了使用官网的Matlab引擎来驱动Matlab外,还可以使用第三方包mlab来进行连接或直接使

Raspberry pi 使用python+pySerial实现串口通信(转)

Raspberry pi 使用python+pySerial实现串口通信 转:http://blog.csdn.net/homeway999/article/details/8642353 目录(?)[+] Raspberry pi 使用pythonpySerial实现串口通信 Raspberry pi端安装pyserial 方法1source安装 方法2pip安装 Raspberry pi端连接串口 Windows端连接串口 Raspberry pi 使用python+pySerial实现串口

Linux与Windows串口通信

串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛.现在国际上不断有串口新技术及新规格推出,结合社会各方面需要,串口通信发展的空间庞大.串口通讯技术因其自身的优势和特性,及计算机技术的广泛应用深入到生活和生产的各个领域,世界上数以亿计的通讯设备都以串口通讯的方式.在进行着数据的传输.在一个应用系统中,同时使用Windows和Linux操作系统,合理地分配资源,各取所长,是实现系统高性能的有效途径.为了使两个不同操作系统能协同工作,实现资源和数据共享,需要在两者

串口屏(触摸屏)组态软件+多台51单片机MODBUS RTU多机串口通信程序源码

串口屏(触摸屏)组态软件+多台51单片机MODBUS RTU多机串口通信程序源码实现触摸屏(串口屏)与单片机的通讯,主要是解决通讯协议的问题.本文使用开放的Modbus通讯协议,以广州易显的HMImaker触摸屏作主机(Master),单片机作从机(Slaver).HMImaker触摸屏本身支持Modbus通讯协议,只要单片机按照Modbus协议进行收发数据,就可以进行通信了.触摸屏与单片机之间采用RS-485标准接口直接连接,与多台51单片机MODBUS RTU多机串口通信一.包括如下实例:二

VC++USB及串口通信程序(附工程)

为公司开发产品测试程序,实际上是基于VC++的USB通信及串口通信.当初编写程序时,网上找了很多资料及程序,感觉大都只是说了一点点,没有一个完整的工程以供其他开发者借鉴,完全要靠开发者东拼西凑,最后凑成一个整体工程,还要在这个工程基础上进行相当艰苦的排查问题.解决问题的调试过程.本人对这一过程极其厌烦,现将走完的以上的"艰苦历程"之后的成果列出,以供后来者借鉴. 这一工程中包含了以下知识点: 1. VC++ USB通信: 2. VC++串口通信: 3. 文件(设备)同步异步操作: 4.

交通信号灯远电力101通讯规约 设备运行数据 透传模块串口通信

方案需求 智慧交通信号控制系统是基于交通大数据的智能自动化应用系统.系统在大数据的基础上,对道路车流量.人流量.路况态势进行判断.智慧交通信号控制系统接入流量检测器.排队长度检测器.速度检测器等,对系统配时方案进行校正和验算.自动控制红绿灯时间,故障情况监测上报,远程人工在线调控红绿灯,为消防车.急救车.警务车等特殊车辆进行预警让道. 系统可根据各车道车流量反馈信息,根据相应算法设置各信号灯时间.控制系统和控制中心相连接,可以实现跨区域交通控制.在遇到救护车.消防车等突发情况下,可以由交警通过无