iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python应用开发——串口通信
  • 219
分享到

Python应用开发——串口通信

python串口嵌入式 2023-09-28 20:09:12 219人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

python应用开发——串口通信 目录 Python应用开发——串口通信前言1 环境搭建2 硬件准备3 代码编写与测试3.1 简单测一下串口收发3.2 补充细节3.3 完善整个收发流程

python应用开发——串口通信

目录

前言

在嵌入式开发中我们经常会用到串口,串口通信简单,使用起来方便,且适用场景多,因此串口常常用来输出调试Log或者跟其他外设进行通讯,也可以用作上位机和下位机之间的通讯。那这一讲我就简单介绍一下如何用Python编写一个串口收发程序。

1 环境搭建

Python的环境这里就不具体介绍了,网上教程也很多,我主要介绍一下我们这一讲用到的类库以及当前的版本。

packageversion
time注:python标准库,无需安装
pyserialv3.5

注:不懂如何安装库的同学请自行查阅资料。

特别说明:本文举的例子皆是基于windows系统下python3来实现的,其他平台不一定完全适配。

2 硬件准备

我们要通过电脑的USB接口发送串口数据,在硬件上首先得保证有可用的串口设备接入,并且正确的安装了驱动。
我这里用的是一个CH340的串口转TTL的模块来测试的。
可以用两个这种模块相互收发,也可以单个模块自发自收,或者接入其他嵌入式设备也行。

硬件接入之后我们可以在设备管理器看到设备的端口号,如下图所示:
在这里插入图片描述

3 代码编写与测试

3.1 简单测一下串口收发

示例代码如下:

import serial #导入模块try:    # 端口号,根据自己实际情况输入,可以在设备管理器查看    port = "COM6"    # 串口波特率,根据自己实际情况输入    bps = 9600    # 超时时间,None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒)    time = 5    # 打开串口,并返回串口对象    uart = serial.Serial(port, bps, timeout = time)    # 串口发送一个字符串    len = uart.write("hello world".encode('utf-8'))     print("send len: ", len)    # 串口接收一个字符串    str = ''    for i in range(len):        str += uart.read().decode("utf-8")    print("receive data: ", str)    # 关闭串口    uart.close()except Exception as result:    print("******error******:", result)

运行测试:
在这里插入图片描述
我这里是自发自收,如果运行没有出错并且成功发送和接收到正确的数据,说明串口通信是走通了,那么接下来就可以继续完善这个流程。
如果出现其他问题,则需要检查硬件和软件,确保所有配置都没问题才能继续进行下一步。

3.2 补充细节

串口发送各种不同类型的数据。
串口数据常用字符串和十六进制(hex)表示。下面列举了一些例子,可以作为一种参考。

示例如下:

data1 = "hello world"        # 字符串data2 = b"hello world"       # bytesdata3 = "你好"               # 中文字符串data4 = 0x0A                 # 整形(以16进制表示)data5 = [0x10, 0x11, 0x12]   # 列表/数组(以16进制表示)len = uart.write(data1.encode('utf-8'))         # 发送字符串"hello world"len = uart.write(data2)                         # 发送字符串"hello world"len = uart.write(data3.encode('utf-8'))         # 以utf-8编码方式发送字符串"你好"(6字节)len = uart.write(data3.encode('gbk'))           # 以gbk编码方式发送字符串"你好"(4字节)len = uart.write(chr(data4.encode("utf-8"))     # 发送16进制数据0x0A(1字节)for x in data5:     # 遍历列表/数组的所有元素并依次发送    len = uart.write(chr(x).encode("utf-8")) 

完善串口接收流程
串口接收跟发送一样,接收数据也是常用字符串和十六进制(hex)表示。
可以根据以下两种方式接收数据:

str = uart.read(uart.in_waiting).decode("utf-8")   # 以字符串接收str = uart.read().hex()# 以16进制(hex)接收

接收的时间很短,大部分时间其实是在等待接收,所以我们需要加一个死循环或者循环线程来确保串口一直在等待接收。
示例如下:

while True:    if uart.in_waiting:        # str = uart.read(uart.in_waiting).decode("utf-8")   # 以字符串接收        str = uart.read().hex()# 以16进制(hex)接收        print(str)             # 打印数据

扫描端口。
在不知道串口端口号的情况下可以先扫描一下可用的端口。
示例如下:

import serial import serial.tools.list_portsport_list = list(serial.tools.list_ports.comports())print(port_list)if len(port_list) == 0:   print('无可用串口')else:    for i in range(0,len(port_list)):        print(port_list[i])

3.3 完善整个收发流程

根据上面举的一些例子,我们把整个流程补充完整。
示例如下:

# 导入模块import threadingimport timeimport serialimport serial.tools.list_ports# 自定义变量port = "COM6"  # 端口号,根据自己实际情况输入,可以在设备管理器查看bps = 9600     # 串口波特率,根据自己实际情况输入timeout = 5       # 超时时间,None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒)rxdata = ''    # 接收的数据# 扫描端口def check_uart_port():    port_list = list(serial.tools.list_ports.comports())    # print(port_list)    if len(port_list) == 0:        print('can not fine uart port')        return False    else:        for i in range(0,len(port_list)):            print(port_list[i])    return True# 打开串口def open_uart(port, bps, timeout):    try:        # 打开串口,并返回串口对象        uart = serial.Serial(port, bps, timeout=timeout)        return uart    except Exception as result:        print("can not open uart")        print(result)        return False# 发送数据def uart_send_data(uart, txbuf):    len = uart.write(txbuf.encode('utf-8'))  # 写数据    return len# 接收数据def uart_receive_data(uart):    if uart.in_waiting:        rxdata = uart.read(uart.in_waiting).decode("utf-8")   # 以字符串接收        # rxdata = uart.read().hex()  # 以16进制(hex)接收        print(rxdata)  # 打印数据# 关闭串口def close_uart(uart):    uart.close()# 创建一个线程用来等待串口接收数据class myThread (threading.Thread):   # 继承父类threading.Thread    def __init__(self, uart):        threading.Thread.__init__(self)        self.uart = uart    def run(self):                   # 把要执行的代码写到run函数里面 线程在创建后会直接运行run函数        while True:            # print("thread_uart_receive")            uart_receive_data(self.uart)  # 接收数据            # time.sleep(0.01)# 主函数def main():    # 扫描端口    result = check_uart_port()    if(result == False):        return    # 打开串口    result = open_uart(port, bps, timeout)    if (result == False):        return    else:        uart1 = result    # 创建一个线程用来接收串口数据    thread_uart = myThread(uart1)    thread_uart.start()    while True:        # 定时发送数据        txbuf = "hello world"        len = uart_send_data(uart1, txbuf)        print("send len: ", len)        time.sleep(1)# 启动主函数main()

运行测试:
在这里插入图片描述
这里还是自发自收,但是改成定时1s循环发送一帧数据,如果是实际使用的话就不要短接TX和RX了,串口是全双工,收发是可以同步进行的。

结束语

关于如何使用Python实现串口通信就讲到这里,在Python这个领域我也是小白一个,我只是根据以往嵌入式的经验写了这么一套代码,如果有哪里写的不对或者写的不够好的,欢迎评论区留言指正,谢谢!

来源地址:https://blog.csdn.net/ShenZhen_zixian/article/details/127397779

--结束END--

本文标题: Python应用开发——串口通信

本文链接: https://www.lsjlt.com/news/420654.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python应用开发——串口通信
    Python应用开发——串口通信 目录 Python应用开发——串口通信前言1 环境搭建2 硬件准备3 代码编写与测试3.1 简单测一下串口收发3.2 补充细节3.3 完善整个收发流程 ...
    99+
    2023-09-28
    python 串口 嵌入式
  • Python应用开发之实现串口通信
    目录前言1.环境搭建2.硬件准备3.代码编写与测试3.1 简单测一下串口收发3.2 补充细节3.3 完善整个收发流程前言 在嵌入式开发中我们经常会用到串口,串口通信简单,使用起来方便...
    99+
    2024-04-02
  • Android串口开发之使用JNI实现ANDROID和串口通信
    导语:Android串口通信在物联网、智能家居等领域具有广泛的应用。本文将详细介绍如何使用JNI技术实现Android设备与串口的通信,包括串口的打开、设置参数和读写数据等过程。 目录 一...
    99+
    2023-10-20
    android java android studio 串口通信 JNI
  • Python的串口通信(pyserial
    串口通信是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。串口是计算机上一种非常通用的设备通信协议。pyserial...
    99+
    2023-01-31
    串口 通信 Python
  • STM32-串口通信(串口的接收和发送)
    文章目录 STM32的串口通信一、STM32里的串口通信二、串口的发送和接收串口发送串口接收 三、串口在STM32中的配置四、串口接收的两种实现方式1. 需要更改的地方2. 查询RXNE标...
    99+
    2023-10-12
    stm32 单片机 arm c语言 学习
  • python http通信接口开发示例
    目录前言一、flask框架1.1,简介1.2,参数说明 get 和 post的区别二、使用步骤1.引入库2.完整代码实现3.测试总结前言 需求背景来源于AI算法通信接口编写&hell...
    99+
    2023-05-18
    python http通信接口 python 通信接口
  • 【Python】Python实现串口通信(Python+Stm32)
    🎉欢迎来到Python专栏~Python实现串口通信 ...
    99+
    2023-08-31
    python stm32 开发语言 串口通信 嵌入式硬件 Python+Stm32
  • python+嵌入式——串口通信篇(收发解包)
    目录 前言安装pyserialpyserial大致概括整体流程硬件连接例子(简单版) 详细使用serial初始化参数发包收包收包 检查包并解包python struct模块结语 ...
    99+
    2023-09-10
    python 开发语言
  • Android硬件通信之 串口通信
    一,串口介绍 1 串口简介 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口; 串行接口(SerialInterface)是指数据一位一位地顺序传送。其特点是通信线路简单,只要一对传输线就可...
    99+
    2023-08-31
    android 硬件工程
  • PHP怎么使用串口通信
    本篇内容主要讲解“PHP怎么使用串口通信”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP怎么使用串口通信”吧!php在部分应用偶尔和串口直接通信,需要和rs232、rs485接口上的数据进行...
    99+
    2023-06-20
  • Java 串口通信(RS232/485)
    Java 串口通信(RS232/485) 一.串口通信页面二.串口服务实现1.Java 串口通信配置1.扩展包和依赖库2.Pom配置 2.启动类3.工具包类1.Common2.Crc16Modbus3.SerialUtil ...
    99+
    2023-08-17
    java 串口通信 rs232/rs485 rxtxserial.dll RXTXcomm.jar
  • Android应用中怎么将USB装换为串口通信
    Android应用中怎么将USB装换为串口通信?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 Android USB转串口通信开发实例详解1.发现设备...
    99+
    2023-05-31
    android usb 串口通信
  • Qt开发实现跨窗口信号槽通信
    多窗口通信,如果是窗口类对象之间互相包含,则可以直接开放public接口调用,不过,很多情况下主窗口和子窗口之间要做到异步消息通信,就必须依赖到跨窗口的信号槽,以下是一个简单的示例。...
    99+
    2024-04-02
  • Android USB通信(host转串口)
    前言:公司属于北斗通信行业,项目大多都需要和各式各样的硬件设备相结合来满足项目需求,因此所涉及到的各种技术也相对比较冷门。前段时间有个项目用到了一款定制 Android 设备,其中有多个接口,包括两个 USB 接口和一个 RS232 串口,...
    99+
    2023-09-24
    android
  • .Net Core跨平台应用开发串口篇HelloArm
    目录引言硬件环境硬件资源特性支持的系统平台系统平台.NET Core支持的Linux版本系统平台选择连接嵌入式Linux系统物理连接串口连接网络连接.NET Core跨平台验证验证程...
    99+
    2024-04-02
  • 怎么使用Java实现串口通信
    要使用Java实现串口通信,可以使用Java的RXTX库。以下是一个简单的示例代码: import gnu.io.CommPort;...
    99+
    2023-10-22
    Java
  • delphi串口通信怎么编写
    在Delphi中实现串口通信,可以使用Windows API函数来进行操作。 首先,在程序的uses部分,添加Windows单元。...
    99+
    2023-10-28
    delphi
  • C#怎么实现串口通信
    本篇内容介绍了“C#怎么实现串口通信”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!框架准备出于简单考虑,首先创建一个Winform项目,本文...
    99+
    2023-07-05
  • C#实现简单串口通信
    串口通信(Serial Communications)是指外设和计算机间通过数据信号线、地线等按位(bit)进行传输数据的一种通信方式,属于串行通信方式,能够实现远距离通信,长度可达...
    99+
    2024-04-02
  • 基于C#实现串口通信
    本文实例为大家分享了C#实现串口通信的具体代码,供大家参考,具体内容如下 1.基本概念 2.前端winForm布局如下(仅仅为了实现功能,布局略丑) 3.代码实现如下 names...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作