串口通信 / 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 函数,其实现方式为:

  1. 每次读取一个字符,加入待返回字符串
  2. 根据终止符长度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] -> 串口通信的更多相关文章

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

    VISA仪器控制 / VISA Instrument Control 1 VISA简介 / VISA Introduction VISA(Virtual Instrument Software Arc ...

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

    动态链接库 / Dynamic Link Library 目录 动态链接库简介 函数封装DLL 组件对象模型COM 如何判断.dll文件是COM还是DLL 辅助工具 1 动态链接库简介 / DLL I ...

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

    Python - Matlab 目录 Python-Matlab 引擎 Python-Matlab 数组 Python-Matlab 基本操作 Python-Matlab 调用 m 文件 Matlab ...

  4. Python的扩展接口[2] -> 动态链接库DLL[1] -> 组件对象模型 COM 的 Python 调用

    组件对象模型 COM 的 Python 调用 关于COM的基本概念,可参考组件对象模型 COM的内容,下面主要介绍两种使用 Python 调用 COM 组件的方法. 1 使用 win32com 1.1 ...

  5. Unity串口通信

    一.串口简介 串行接口(串口)通常指COM接口,是采用串行通信方式的扩展接口.串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接 ...

  6. 基于Arduino和python的串口通信和上位机控制

    引言 经常的时候我们要实现两个代码之间的通信,比如说两个不同不同人写的代码要对接,例如将python指令控制Arduino控件的开关,此处使用串口通信是非常方便的,下面笔者将结合自己踩过的坑来讲述下自 ...

  7. Python的串口通信(pyserial)

    串口通信是指外设和计算机间,通过数据信号线 .地线.控制线等,按位进行传输数据的一种通讯方式.这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低.串口是计算机上一种非 ...

  8. Python编程实现USB转RS485串口通信

    ---作者吴疆,未经允许,严禁转载,违权必究--- ---欢迎指正,需要源码和文件可站内私信联系--- -----------点击此处链接至博客园原文----------- 功能说明:Python编程 ...

  9. [python] 3 、基于串口通信的嵌入式设备上位机自动测试程序框架(简陋框架)

    星期一, 20. 八月 2018 01:53上午 - beautifulzzzz 1.前言 做类似zigbee.ble mesh...无线网络节点性能测试的时候,手动操作然后看表象往往很难找出真正的原 ...

随机推荐

  1. WPF and Silverlight.ComboBox 如何通过 Binding IsDropDownOpen 实现下拉菜单展开

    In the WPF example the Popup and the ToggleButton (the arrow on the right) are bound with the proper ...

  2. (原)App源码

    序) 人生就像卫生纸,有事没事少扯 前言) 最近偶尔和一位极客大牛聊了一次,这个极客在汇编的造诣算是相当高,不过野路子出来看不起各种规矩,因此是适合做个自己蒙头研究技术的极客男,不适合大型团队,不适合 ...

  3. leetcode 【 Remove Duplicates from Sorted List 】 python 实现

    题目: Given a sorted linked list, delete all duplicates such that each element appear only once. For e ...

  4. Python学习4,字符串

    字符串这个东西主要靠记,多打打就好了. _author_ = "Happyboy" name = "my \tname is happyboy and i am 66 y ...

  5. day01--python基础1

    # 01讲   - Windows下执行程序,必须加 PYTHON.在LINUX下,可以不指明是PYTHON.但是,执行钱许给予hello.py执行权限. - 其次,只要变成可执行程序,必须第一行事前 ...

  6. CentOS vim中backspace不能用,出现^?的解决方法

    查看在VI配置器下面使用backspace删除时提示输出那个字符例如:^H.^?.^a等字符如果输出的是:^? 字符 则使用以下命令:[oracle@junyii~]$ stty erase ^? 再 ...

  7. php session访问限制

    登录 <?php // 启动会话 session_start(); // 注册登陆成功的 admin 变量,并赋值 true $_SESSION["admin"] = tru ...

  8. Python数据分析-Numpy数值计算

    Numpy介绍: NumPy是高性能科学计算和数据分析的基础包.它是pandas等其他各种工具的基础. NumPy的主要功能: 1)ndarray,一个多维数组结构,高效且节省空间 2)无需循环对整组 ...

  9. web浏览器中的javascript

    window 对象中其中一个最重要的属性是document,它引用document对象,后者表示显示在窗口中的文档.document对象有一些重要方法,比如getElementById(),它可以基于 ...

  10. 使用 Entity Framework 返回 JsonResult 时循环引用的避免【EF 转 JSON】

    var ui = (from u in _db.USER_INFO select u).FirstOrDefault(); // 单个实体的用法 ZRQCommon.EntitiesTools e = ...