如何用python实现串口通信

前言
    公司写界面的小伙伴离职了,下一个项目不得不承担起来,公司需要什么就要补上。
**

目录

1、准备工作

**1.1 上位机和下位机的概念

1.2 串口是什么?

1.3 环境搭建

2、程序

2.1 上位机代码

2.2 下位机代码


1、准备工作

**
1.1 上位机和下位机的概念


        简单来说,上位机是发出命令的计算机,承担主要命令的发布;下位机是执行命名的计算机,承担功能实现和错误信息返回。简而言之,一个是领导(上位机),一个是员工(下位机)。
        接下来为官方概念,可跳过。上位机和下位机是分布式系统中的两个重要概念。
        上位机通常指的是更高级别的计算机设备,如桌面计算机、服务器或嵌入式计算机等。它们在系统中负责控制和管理整个系统,收集并处理数据,执行复杂的算法和逻辑操作。上位机通常运行着高级语言编写的软件程序,提供用户友好的图形界面,以便用户可以与系统进行交互。
        下位机通常指的是更低级别的计算机设备,如微控制器、单片机、传感器等。它们在系统中负责执行简单的控制任务,收集传感器数据并将其传递给上位机,或执行上位机发送的指令。下位机通常使用低级语言编写的程序,可以直接与硬件交互。
        在分布式系统中,上位机和下位机之间通过通信协议进行通信。例如,可以使用不同的通讯协议(如RS232的串口通讯或者RS485串行通讯)实现上位机和下位机之间的远程控制和监控,以及实时数据和状态信息的获取。


1.2 串口是什么?


        既然双方已经准备好了,那上位机如何将命令传输为下位机,这就涉及到数据传输的通道,也就是串口通信接口,或者COM接口。
        我用的是232转USB的通信方式,需要先安装驱动;电脑上相对应的COM口自然就出现啦!win键点击右键,选择设备管理器。![在这里插入图片描述](https://img-blog.csdnimg.cn/487064b5a4854151914f62bdeb13cf84.png)


1.3 环境搭建


        因为我的上位机和下位机都是计算机,所以在两个设备上分别装上了驱动以及串口通信工具。
        备注:用串口通信工具主要为了排查是连接以及设备硬件出现了问题,否则python通信代码写错了再归为硬件的问题。

2、程序

2.1 上位机代码


        上位机主要是发指令。

```python
import serial #导入模块
import time

# 端口号,根据自己实际情况输入,可以在设备管理器查看
port = "COM1"
# 串口波特率,根据自己实际情况输入(232的都是9600)
bps = 9600
# 超时时间,None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒)
# 打开串口,并返回串口对象
ser = serial.Serial(port, bps, timeout=0.1)
# 发送数据的代码
def receive_command():
    data = ser.readline().hex().strip()
    if data != '':
        print('Received:', data)
def send_command(hex_command):
    try:
        # 串口发送一个字符串
        # len = ser.write("hello world".encode('utf-8'))
        command = bytes.fromhex(hex_command)
        len = ser.write(command)
        print("send len: ", len)
        receive_command()
        # 关闭串口
        # ser.close()
    except Exception as result:
        print("******error******:", result)
def main():
    while True:
            # 定时发送数据
            # 关机指令,16进制编码
            hex_command = '24 00 00 00 00 00 00 00 00 00 00 00 00 01 00 01 03 06 66 2A'
            send_command(hex_command)
            # print("send len: ", len)
            time.sleep(10)

main()
```

2.2 下位机代码


        下位机主要是收指令。

```python
import serial #导入模块
import time
# 端口号,根据自己实际情况输入,可以在设备管理器查看
port = "COM1"
# 串口波特率,根据自己实际情况输入
bps = 9600
# 超时时间,None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒)

# 打开串口,并返回串口对象
ser = serial.Serial(port, bps, timeout=0.1)
# 发送数据的代码
def receive_command():
    data = ser.readline().hex().strip()
    if data != '':
        print('Received:', data)
def main():
    while True:
            receive_command()
main()
```


3、结束
        当上位机和下位机通信正常后,剩下就是基于指令信息完成相应功能,那我开发新功能去了呀!!
        
 

猜你喜欢

转载自blog.csdn.net/qq_25993375/article/details/134271832