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类,主要参数为端口和波特率,更多参数可查看源代码。
import serial ser = serial.Serial(port='com1', baudrate=9600)
print(ser.portstr) def serial_communi(ser, msg):
# n is the length of msg sent
n = ser.write(msg.encode())
print(n)
s = ser.read(n)
print(s)
4 read_until 方法的实现与扩展
在pyserial中,read_until 方法只能处理一个终止符,而当需要处理多个终止标志的时候,则需要重新定义一个新的方法,参考 pyserial 源代码中的 read_until 函数,其实现方式为:
- 每次读取一个字符,加入待返回字符串
- 根据终止符长度n,获取字符中后 n 位字符,检测是否为终止符
下面的代码供参考,
def _read_until(self):
line = ''
while True:
try:
c = self.read(1)
except (
AttributeError, TypeError, # COM Exception
ValueError, EOFError, # TELNET Exception
self._connection.OpenCloseException) as e:
# Above Exception happens when communication manually closed,
# if still should run, condition sleep here,
# else return None to exit thread
if self.should_run:
self._cond_wait(self._recv_cond)
continue
else:
return None
if c:
line += c
self._result.put(c)
tokens = [self._term_token, self._abort_token, self._cr_token, self._lf_token]
for token in tokens:
if not line[-len(token):] == token:
continue
if token == self._cr_token or token == self._lf_token:
return line
if token == self._term_token:
self.waiter_wake_up()
self.termi_signal(True)
self._result.save(strip=self._term_token)
self.logger.debug("TERMINATE %s" % self._term_token)
return line
if token == self._abort_token:
# TODO: handle this abort token encountered
self.logger.debug("ABORT %s" % self._abort_token)
pass
# When timeout will enter this else
# else:
# return line
Python的扩展接口[1] -> 串口通信的更多相关文章
- Python的扩展接口[0] -> VISA仪器控制
VISA仪器控制 / VISA Instrument Control 1 VISA简介 / VISA Introduction VISA(Virtual Instrument Software Arc ...
- Python的扩展接口[2] -> 动态链接库DLL[0] -> 动态链接库及辅助工具
动态链接库 / Dynamic Link Library 目录 动态链接库简介 函数封装DLL 组件对象模型COM 如何判断.dll文件是COM还是DLL 辅助工具 1 动态链接库简介 / DLL I ...
- Python的扩展接口[3] -> Matlab引擎 -> 使用 Python 调用 Matlab 程序
Python - Matlab 目录 Python-Matlab 引擎 Python-Matlab 数组 Python-Matlab 基本操作 Python-Matlab 调用 m 文件 Matlab ...
- Python的扩展接口[2] -> 动态链接库DLL[1] -> 组件对象模型 COM 的 Python 调用
组件对象模型 COM 的 Python 调用 关于COM的基本概念,可参考组件对象模型 COM的内容,下面主要介绍两种使用 Python 调用 COM 组件的方法. 1 使用 win32com 1.1 ...
- Unity串口通信
一.串口简介 串行接口(串口)通常指COM接口,是采用串行通信方式的扩展接口.串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接 ...
- 基于Arduino和python的串口通信和上位机控制
引言 经常的时候我们要实现两个代码之间的通信,比如说两个不同不同人写的代码要对接,例如将python指令控制Arduino控件的开关,此处使用串口通信是非常方便的,下面笔者将结合自己踩过的坑来讲述下自 ...
- Python的串口通信(pyserial)
串口通信是指外设和计算机间,通过数据信号线 .地线.控制线等,按位进行传输数据的一种通讯方式.这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低.串口是计算机上一种非 ...
- Python编程实现USB转RS485串口通信
---作者吴疆,未经允许,严禁转载,违权必究--- ---欢迎指正,需要源码和文件可站内私信联系--- -----------点击此处链接至博客园原文----------- 功能说明:Python编程 ...
- [python] 3 、基于串口通信的嵌入式设备上位机自动测试程序框架(简陋框架)
星期一, 20. 八月 2018 01:53上午 - beautifulzzzz 1.前言 做类似zigbee.ble mesh...无线网络节点性能测试的时候,手动操作然后看表象往往很难找出真正的原 ...
随机推荐
- SQLite3中dos命令下退出"...>"状态的方法
今天在看Android中SQLite,跟着书上一步一步走,在dos中敲命令时候不小心敲错了,命令行就会突然变成”…>”这样的,本来是”sqlite>”的,然后接下来后面的就没办法在继续操作 ...
- day04_07-三个函数的区别
<?php $link = @mysql_connect('localhost','root',''); mysql_query('use test',$link); mysql_query(' ...
- 深入探讨ui框架
深入探讨前端UI框架 1 前言 先说说这篇文章的由来 最近看riot的源码,发现它很像angular的dirty check,每个component ( tag )都保存一个expressions数组 ...
- linux备忘录-bash
知识点 环境变量 HOME PATH MAIL SHELL RANDOM // 0~32767的随机数 declare -i number=$RANDOM*10/32768 //0-9的随机数 HIS ...
- Pandas根据条件赋值
我们有以下判断条件,我们想要更改B中的数, 而更改的位置是取决于 A 的. 对于A大于4的位置. 更改B在相应位置上的数为0. df.B[df.A>4] = 0
- JSP/Servlet Web 学习笔记 DayFour
Servlet概述 Servelt是使用Java Servlet应用程序接口及相关类和方法的Java程序. Servlet是用Java编写的Server端程序,它与协议和平台无关.Servlet运行于 ...
- Linq学习(一)
与LINQ有关的语言特性 1.隐式类型 var 2.匿名类型 如:var obj = new {Guid.Empty, myTitle = "匿名类型", myOtherParam ...
- nagios服务端安装
系统环境:操作系统:CentOS-5.7 x86_64Apache版本: Apache-2.2.22Nagios版本: nagios-3.3.1GD库: gd-2.0.33 2.安装前准备:2.1.安 ...
- file mmap
do_set_pmd 统计参数只会在这里设置: add_mm_counter(vma->vm_mm, MM_FILEPAGES, HPAGE_PMD_NR); 但是这貌似都是处理大页的情况哪,小 ...
- InputStream 、 InputStreamReader 、 BufferedReader
1.InputStream.OutputStream 处理字节流的抽象类 InputStream 是字节输入流的所有类的超类,一般我们使用它的子类,如FileInputStream等. OutputS ...