Windows下使用Python实现串口通信

Windows下使用Python实现串口通信

  • 基本信息
  • 配置过程
    • 配置思路
    • 详细配置过程
      • 安装USB装TTL驱动
      • 配置serial库
      • 获取设备端口号
      • 配置串口通信
        • 配置说明
        • 测试过程
  • 其他学习记录
  • 参考资料

基本信息

端口号:COM5

使用语言:Python

使用串口通信库:python的serial库

测试环境:Windows-Jeston nano

使用硬件:笔记本电脑windows系统、USB转ttl、Jeston nano(做数据接受)

配置过程

配置思路

这里配置思路和之前发的博文使用Jeston nano配置串口通信的思路一致,均调用python的serial库实现相应的功能,只是这里的端口号不像linux下ttyUSB这种形式,而是类似于COM5这种,这与第一步使用的驱动软件有关。


详细配置过程

安装USB装TTL驱动

浏览器搜索ch340:

Windows下使用Python实现串口通信_第1张图片

选择安装即可:

Windows下使用Python实现串口通信_第2张图片

配置serial库

你可以直接用pip下载serial库

pip install pyserial

但是可能因为你换源的关系找不到这个库,当然你也可以直接从github下载:

github地址:https://github.com/pyserial/pyserial

配置过程:直接下载上述链接 zip 文件,将其中serial文件夹复制到您 使用的python工程目录下的 Lib/site-packages下即可

在这里插入图片描述

我这里是在anaconda环境下;

当然你也可以直接在pycharm编辑器上下载(如果能搜得到的话);

测试:import serial 无报错即可。

获取设备端口号

COM5 为例

这里可以在设备管理器中直接查看ch340的端口号:右击 此电脑-属性-设备管理器-端口

Windows下使用Python实现串口通信_第3张图片

也可以使用代码查看:

Windows下使用Python实现串口通信_第4张图片

代码如下:

import serial
import serial.tools.list_ports

plist = list(serial.tools.list_ports.comports())

if len(plist) <= 0:
    print("The Serial port can't find!")
else:
    plist_0 = list(plist[0])
    serialName = plist_0[0]
    serialFd = serial.Serial(serialName, 9600, timeout=60)
    print("check which port was really used >", serialFd.name)

配置串口通信

配置说明

说明

因为手里没有两个USB转ttl,不能做到在windows下同时发送和接受数据,所以借助手边的jeston nano来完成数据传输测试;对于你,如果有两个USB转ttl,你可以开一个串口调试软件测试;当然,你可以用单片机通信,如51、32、arduino;

测试平台

​ Windows-pycharm-python-serial

​ Jeston nano-CuteCom

(CuteCom为一linux下的串口调试sudo apt-get install cutecom软件,你可以通过:sudo apt-get install cutecom 安装,通过:sudo CuteCom 使用)

测试效果:代码实现双方发送接受数据,并将数据打印出来;这里因为我还不会用python实现多线程,所以只能用两个代码分别实现发送和接受。

测试过程

测试效果:

​ windows端:

Windows下使用Python实现串口通信_第5张图片

​ Jeston nano端:

​ 配置;这里可以直接看见Jeston nano3个串口

发送接收:

Windows下使用Python实现串口通信_第6张图片

windows端代码:

import time
import serial

print("UART Demonstration Program")
print("NVIDIA Jetson Nano Developer Kit")


serial_port = serial.Serial(
    port="COM5",                #记得替换此处端口号
    baudrate=115200,
    bytesize=serial.EIGHTBITS,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
)
# Wait a second to let the port initialize
time.sleep(1)

try:
    # Send a simple header
    serial_port.write("UART Demonstration Program\r\n".encode())
    serial_port.write("NVIDIA Jetson Nano Developer Kit\r\n".encode())
    while True:
        if serial_port.inWaiting() > 0:
            data = serial_port.read()
            print(data)
            serial_port.write(data)
            # if we get a carriage return, add a line feed too
            # \r is a carriage return; \n is a line feed
            # This is to help the tty program on the other end
            # Windows is \r\n for carriage return, line feed
            # Macintosh and Linux use \n
            if data == "\r".encode():
                # For Windows boxen on the other end
                serial_port.write("\n".encode())


except KeyboardInterrupt:
    print("Exiting Program")

except Exception as exception_error:
    print("Error occurred. Exiting Program")
    print("Error: " + str(exception_error))

finally:
    serial_port.close()
    pass

后续有时间可以试试python多线程或者windows下使用C++调用相应的库实现串口通信…

其他学习记录

python部分:

​ python环境的包都在Lib/site-packages下;

​ Communication.Print_Used_Com() :Communication类调用Print_Used_Com()函数;

​ Python有3种方法,静态方法(staticmethod),类方法(classmethod)和实例方法 代码:global Ret ,声明rect为全局变量

global Ret 声明rect为全局变量(在类中)

关于通信:

​ 如果要同时收发数据,要使用python多线程实现;

​ 可以直接用printf方法发送数据

​ serial.Serial(serialName, 9600, timeout=60) 这里赋值为 5、‘com5’、“com5”、‘COM5’、“COM5”都可以 不区分大小写

serial.printf("%c", a);

这里找一种电脑和Jeston nano传输文件的方式,要求:不使用外网、互联网连接。

参考资料

1、pyserial官方github仓库:https://github.com/pyserial/pyserial.

2、这篇博客稍微总结了一下serial库的常用参数: https://www.cnblogs.com/-wenli/p/11261109.html .

3、https://www.cnblogs.com/dongxiaodong/p/9992083.html .

你可能感兴趣的:(通信测试,windows,python,开发语言)