Python串口通信模块PySerial使用教程(CH340 USB TTL转接芯片)

CONTENTS

    • 1. CH340 USB TTL介绍
    • 2. PySerial教程

1. CH340 USB TTL介绍

TTL 一般是从单片机或者芯片中发出的电平,高电平为 5V(51单片机)或者 3.3V(STM32)。USB 转 TTL 模块的作用就是把电平转换到双方都能识别进行通信。

单片机通信接口的电平逻辑和 PC 机通信接口的电平逻辑不同,PC 机上的通信接口有 USB 接口,相应电平逻辑遵照 USB 原则;还有 DB9 接口(九针口),相应电平逻辑遵照 RS-232 原则。

单片机上的串行通信通过单片机的 RXD、TXD、VCC、GND 四个引脚,相应电平逻辑遵照 TTL 原则。

USB 是一种串口(串口是一大类接口,包括但不仅限于 RS232),它拥有复杂的通讯协议,支持热插拔,并可以以非常快的速度传输数据。串口,是指 RS232 串口,这是一种几乎没有协议的传输接口,可以直接收发数据。

USB 转 TTL 串口模块是一个非常实用的工具,可以测试模块的 UART 串口通信和通过单片机的 UART 接口给单片机等下载程序。能够在电脑上的串口助手软件非常直观的显示出串口设备返回的数据以及发送相应的控制数据给串口设备。常见的有 CP2102、PL2303、FT232、CH340 等串口芯片方案的 USB 转串口模块。以下以 CH340 串口模块为例,对其进行自检测试。

  • 串口发送工作原理:串口应用发送数据 -> USB 串口驱动获取数据 -> 驱动将数据经过 USB 通道发送给 USB 串口设备 -> USB 串口设备接收到数据通过串口发送
  • 串口接收工作原理:USB 串口设备接收串口数据 -> 将串口数据经过 USB 打包后上传给 USB 主机 -> USB 串口驱动获取到通过 USB 上传的串口数据 -> 驱动将数据保存在串口缓冲区提供给串口应用读取

我们打开串口调试工具,将 CH340 USB TTL 模块的 TXDRXD 引脚短接(用同一跟线接在一起,这样相当于自己给自己发送信息),然后插入电脑,打开设备管理器,确保电脑已经识别到端口(USB-SERIAL CH340 (COM4)),注意 COM4 后面的数字可能是随机的,不一定是这个端口。

尝试给自己发送信息,选择所设置好的串口,打开串口,输入并发送文字,查看是否收到,或收到的字符是否一致,如果能自收自发数据,且收发数据一致,就说明驱动配置完成,并且模块功能完整:

在这里插入图片描述

注意事项:

  • CH340 模块插在 USB2.0 口时,5V 排针输出口电流只有 500MA 左右,如过要接的功率比较的大模块建议接 USB3.0 或者给大功率模块单独外接电源且共地;
  • 切勿将 VCCGND 短接,否则会烧坏模块,发现插上后模块灯不亮货模块发烫严重请立即拔掉检测是否接反或短路。

2. PySerial教程

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

PySerial 模块封装了 Python 对串口的访问,为多平台的使用提供了统一的接口。它支持 Windows、Linux、OSX、BSD 等多个平台。如果要使用 PySerial 模块,首先必须保证 Python 版本高于 Python 2.7 或者 Python 3.4。另外,如果你是用的是 Windows 系统,那必须使用 Win7 及以上的版本。

首先我们安装 PySerial:

pip install pyserial

(1)确定电脑是否有可用的串口,并确定可用串口的串口号

import serial
import serial.tools.list_portsports_list = list(serial.tools.list_ports.comports())  # 获取所有串口设备实例
if len(ports_list) <= 0:print("无可用的串口设备!")
else:print("可用的串口设备如下:")for port in ports_list:  # 依次输出每个设备对应的串口号和描述信息print(list(port)[0], list(port)[1])  # COM4 USB-SERIAL CH340 (COM4)

(2)打开与关闭串口

serial.Serial 的参数如下:

  • port:串口名字(COMn 或者 /dev/ttyUSB)或者 None
  • baudrate (int):波特率,比如9600或者115200;
  • bytesize:数据位数,可能的参数值有:FIVEBITSSIXBITSSEVENBITSEIGHTBITS
  • parity:奇偶校验,可能的参数值:PARITY_NONEPARITY_EVENPARITY_ODDPARITY_MARKPARITY_SPACE
  • stopbits:停止位的比特数,可能的参数值:STOPBITS_ONESTOPBITS_ONE_POINT_FIVESTOPBITS_TWO
  • timeout (float):设置 PySerial 持续读取数据的最长时间(单位:秒);
  • xonxoff (bool):是否启动软件流控制;
  • rtscts (bool):是否启动硬件(RTS/CTS)流控制;
  • dsrdtr (bool):是否启动硬件(DSR/DTR)流控制;
  • write_timeout (float):设置 PySerial 最长写入串口数据的时间(单位:秒);
  • inter_byte_timeout (float):字符间超时,没有则禁止(默认禁止);
  • exclusive (bool):设置独占访问模式(仅 POSIX)。 如果端口已经以独占访问模式打开,则不能以独占访问模式打开端口。

异常返回值如下:

  • ValueError:如果一些参数不在允许参数内,则返回 ValueError,比如波特率设置;
  • SerialException:如果设备无法被找到或者被设置,则返回 SerialException
ser = serial.Serial("COM4", 115200)  # 打开COM4,将波特率配置为115200,其余参数使用默认值
if ser.isOpen():  # 判断串口是否成功打开print("串口成功打开")print(ser.name)  # 输出串口号,即COM4
else:print("串口打开失败")ser.close()  # 关闭串口
if ser.isOpen():  # 判断串口是否关闭print("串口未关闭")
else:print("串口已关闭")

(3)发送与接收数据

注意:timeout 参数会影响到 read() 函数的使用,这个 timeout 参数非常重要,直接影响到我们对串口数据的读取。

  • timeout = None:一直等待,直到设置的接收字节数满后退出;
  • timeout = 0:非阻塞模式,在任何情况下都立即返回,返回零或更多,最多为请求的字节数;
  • timeout = x:当请求的字节数可用时,将 timeout 设置为 x 秒(允许浮动)立即返回,否则等待超时到期,并返回在此之前收到的所有字节。
# 打开COM4,将波特率配置为115200,读超时时间为1秒
ser = serial.Serial(port="COM4", baudrate=115200, timeout=1)# 串口发送数据ABC123,并输出发送的字节数
write_len = ser.write("ABC123".encode('utf-8'))  # 可以指定encode
print(f"串口共发出{write_len}个字节")  # 串口共发出6个字节while True:com_input = ser.read(10)  # 每次读10字节的数据,可以指定decode:ser.read().decode()if com_input:   # 如果读取结果非空,则输出print(com_input)  # b'ABC123'print(com_input.decode('utf-8'))  # ABC123else:breakser.close()

(4)实战测试传送文件数据

with open('../images/sonar_images/seg_height15_txt_01(compressed)/20210108_142207_01_XTF/8_15height.lz', 'rb') as f:  # 可以用编码'ISO-8859-1'file = f.read()print(file)ser = serial.Serial(port="COM4", baudrate=115200, timeout=1)write_len = ser.write(file)print(f"串口共发出{write_len}个字节")print(ser.in_waiting)  # input buffer中缓存字节数while True:com_input = ser.read(write_len)  # 读取所有字节if com_input:  # 如果读取结果非空,则输出print(com_input)else:breakser.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/128499.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

postgresql-窗口函数种类

postgresql-聚合窗口函数 聚合函数排名窗口函数案例1案例2 取值窗口函数环比增长率同比增长率 聚合函数 常用的聚合函数&#xff0c;例如 AVG、SUM、COUNT 等&#xff0c;也可以作为窗口函数使用 --计算移动平均值 select saledate, amount, avg(amount) over (order by sale…

【数据结构】二叉树基础入门

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

机器学习从0到1

机器学习&#xff0c;即machine learning 感谢easyai的精彩讲解&#xff1a; easyai网址 文章目录 机器学习的概念机器学习的原理监督学习&#xff0c;非监督学习&#xff0c;强化学习监督学习非监督学习强化学习 机器学习实操的7个步骤现在举一个具体的任务来说明这些步骤1.收…

在Postman的脚本中使用pm对象获取接口的请求参数

在Postman的脚本中使用pm对象获取接口的请求参数 1、获取在Query Params中输入的参数全局变量的引用&#xff08;以在header中引用为例&#xff09;2、获取在Body中输入的参数3、pm对象常用用法 1、获取在Query Params中输入的参数 query params页面 在tests中写脚本做后置处…

【ArcGIS pro】-使用arcpy一次保存多个布局

在arcgis Pro中常常会创建多个地图和多个布局&#xff0c;本文介绍如何使用代码&#xff0c;一次保存多个布局文件 在arcgis pro中打开python视图 找到工程位置 在python视图中输入如下代码 保存为pdf import arcpy# 设置当前项目&#xff0c;这通常是一个.aprx文件 projec…

华为云云耀云服务器L实例评测|华为云耀云L搭建zerotier服务测试

0. 环境 - Win10 - 云耀云L服务器 1. 安装docker 检查yum源&#xff0c;本EulerOS的源在这里&#xff1a; cd /etc/yum.repos.d 更新源 yum makecache 安装 yum install -y docker-engine 运行测试 docker run hello-world 2. 运行docker镜像 默认配…

【广州华锐互动】AR远程协助技术提供实时远程协作和指导

随着科技的不断发展&#xff0c;企业的运营管理模式也在不断地进行创新和升级。在这个过程中&#xff0c;AR&#xff08;增强现实&#xff09;技术的应用逐渐成为了企业运维管理的新兴趋势。AR远程协助平台作为一种结合了AR技术和远程协助理念的技术手段&#xff0c;为企业运维…

信息安全技术 办公设备安全测试方法

声明 本文是学习GB-T 38558-2020 信息安全技术 办公设备安全测试方法. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 办公设备安全测试方法范围 本标准规定了办公设备安全技术要求和安全管理功能要求的测试方法。 本标准适用于测试机构、办公设备厂…

Edge浏览器没有让我失望! 今天终于可以在win10中模拟IE内核进行前端测试了!

前言 &#x1f61d; ietest现在是不是不好用了? Edge浏览器仿真是不是不见了&#xff1f; 如图 如果我们在前端开发javascript遇见一些老旧的语法标准&#xff0c;想要测试一下都难&#xff0c;想想都抓狂!&#x1f624;&#x1f624; 不过不用担心&#xff0c;经过这几天的…

Idea上传gitee注意事项,push reject错误

一、 你在项目所在文件夹的空白处&#xff0c;鼠标右键&#xff0c;点击git bash here 会自动进入该目录下 二、 如果你遇到push reject 输入下面的命令&#xff1a; git pull origin master –allow-unrelated-historiesgit push -u origin master -f再次push就好了。 三、 …

wpf C# 用USB虚拟串口最高速下载大文件 每包400万字节 平均0.7s/M,支持批量多设备同时下载。自动识别串口。源码示例可自由定制。

C# 用USB虚拟串口下载大文件 每包400万字节 平均0.7s/M。支持批量多设备同时下载。自动识别串口。可自由定制。 int 32位有符号整数 -2147483648~2147483647 但500万字节时 write时报端口IO异常。可能是驱动限制的。 之前用这个助手发文件&#xff0c;连续发送&#xff0…

【python爬虫】批量识别pdf中的英文,自动翻译成中文上

不管是上学还是上班,有时不可避免需要看英文文章,特别是在写毕业论文的时候。比较头疼的是把专业性很强的英文pdf文章翻译成中文。我记得我上学的时候,是一段一段复制,或者碰到不认识的单词就百度翻译一下,非常耗费时间。本文提供批量识别pdf中英文的方法,后续文章实现自…

PatchMatchNet 学习笔记 译文 深度学习三维重建

9 PatchMatchNet CVPR-2021 patchmatchnet源码下载 PatchMatchNet 代码注释版 下载链接(注释非常详细,较源码结构有调整,使用起来更方便) PatchMatchNet-CVPR-2021(源码、原文+注释+译文+批注) 9.0 主要特点 金字塔,基于传统的PatchMatch算法,精度高,速度快 Pa…

后端SpringBoot+前端Vue前后端分离的项目(二)

前言&#xff1a;完成一个列表&#xff0c;实现表头的切换&#xff0c;字段的筛选&#xff0c;排序&#xff0c;分页功能。 目录 一、数据库表的设计 ​编辑二、后端实现 环境配置 model层 mapper层 service层 service层单元测试 controller层 三、前端实现 interface接…

网管实战⑼:配置华为S5720交换机

配置好汇聚交换机后&#xff0c;需要根据单位情况配置具体的接入交换机。 自从2019年12月底配置好交换机后&#xff0c;基本上都没有怎么操作交换机了。那时候使用的是H3C交换机&#xff0c;主要是H3C S7706、H3C S5120、H3C S5130、H3C S5500、H3C S3600等型号的交换机&#x…

快速排序详解

前言 快排是不稳定的排序&#xff0c;快排的适用场景是无序的序列&#xff0c;例如此时有一个数组是有序的 / 逆序的&#xff0c;此时的快排效率是最慢的。 过程&#xff1a; 找一个基准值&#xff0c;找的过程就以挖坑法的方式填坑&#xff0c;第一次排序以挖坑发填完坑之后&a…

mfc 浮动窗口

参考 MFC模拟360悬浮窗加速球窗口

yolo物体检测系列实战1:yolo-v1整体思想与网络架构

1、物体检测经典方法 two-stage&#xff08;两阶段&#xff09;&#xff1a;Faster-rcnn Mask-Rcnn系列one-stage&#xff08;单阶段&#xff09;&#xff1a;YOLO系列 最核心的优势&#xff1a;速度非常快&#xff0c;适合做实时检测任务&#xff01;但是缺点也是有的&#x…

ue5 物理场的应用

cable mat wpo particle 流体粒子 choas 破损 刚体 布料 cloud abp blueprint riggedbody 体积雾 毛发 全局的 局部的 非均匀的 连续变化的 也可以多个叠加 从全局 到 范围 除了vector还有scalar的值也就是0--1的黑白灰的值 但是最终输出的值的类型还是取决于这个 一…

渗透测试漏洞原理之---【不安全的反序列化】

文章目录 1、序列化与反序列化1.1、引入1.2、序列化实例1.2.1、定义一个类1.2.2、创建 对象1.2.3、反序列化1.2.4、对象注入 2、漏洞何在2.1、漏洞触发2.1.2、定义一个类2.1.3、定义一个对象2.1.3、反序列化执行代码 2.2 为什么会这样 3、反序列化漏洞攻防3.1、PHP反序列化实例…