如何用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、结束
        当上位机和下位机通信正常后,剩下就是基于指令信息完成相应功能,那我开发新功能去了呀!!
        
 

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 要使用Python实现串口通信服务,需要使用PySerial库。以下是实现串口通信服务的基本步骤: 1. 安装PySerial库。可以使用pip命令进行安装:`pip install pyserial` 2. 导入PySerial库:`import serial` 3. 创建Serial对象并打开串口: ```python ser = serial.Serial() ser.port = 'COM1' # 指定串口号 ser.baudrate = 9600 # 设置波特率 ser.bytesize = serial.EIGHTBITS # 设置数据位数 ser.stopbits = serial.STOPBITS_ONE # 设置停止位数 ser.parity = serial.PARITY_NONE # 设置奇偶校验位 ser.open() # 打开串口 ``` 4. 通过write方法向串口写入数据: ```python ser.write(b'hello') # 向串口写入hello字符串 ``` 5. 使用read方法从串口读取数据: ```python data = ser.read(10) # 从串口读取10个字节的数据 ``` 6. 关闭串口: ```python ser.close() # 关闭串口 ``` 上述步骤可以帮助您实现基本的串口通信服务。您可以根据实际需求对代码进行进一步的修改和完善。 ### 回答2: 要使用Python实现串口通信服务,可以使用Python的`pySerial`库。以下是一个简单的示例代码: ```python import serial # 设置串口参数 ser = serial.Serial('COM1', 9600) # 串口名称和波特率 # 发送数据 ser.write(b'Hello, World!') # 发送字节数据 # 读取数据 data = ser.readline() # 读取一行数据 print(data.decode()) # 打印收到的数据 # 关闭串口 ser.close() ``` 首先,引入`serial`模块并创建一个`Serial`对象,通过指定串口名称和波特率来设置串口参数。然后,可以使用`write()`方法向串口发送字节数据。使用`readline()`方法读取串口接收到的数据,并使用`decode()`方法将字节数据转换为字符串进行打印。最后,使用`close()`方法关闭串口。 以上是一个简单的实现串口通信服务的例子,可以根据需求进一步扩展和优化。 ### 回答3: Python提供了多种方式实现串口通信服务。其中,最常用的是使用第三方库pySerial。 首先,我们需要先安装pySerial库。可以使用pip命令进行安装: pip install pySerial 下面是一个简单的Python代码实现串口通信服务的例子: ``` import serial # 初始化串口 ser = serial.Serial('COM1', 115200, timeout=0.5) # 发送数据 ser.write(b'Hello World') # 接收数据 data = ser.read(10) print(data) # 关闭串口 ser.close() ``` 上述代码中,我们首先使用serial.Serial函数初始化一个串口对象ser,参数依次为串口号(如'COM1')、波特率(如115200)和超时时间(单位为秒)。 然后,我们可以使用ser.write函数向串口发送数据。在例子中,我们发送了一个字符串'Hello World'。 接下来使用ser.read函数读取串口的数据。参数指定了需要读取的字节数。在例子中,我们读取了10个字节的数据,并将其存储在变量data中。 最后,使用ser.close函数关闭串口。 当然,除了上述基本的发送和接收操作,pySerial还提供了更多的功能,如设置串口参数、读取特定数量的字节、非阻塞读写等。你可以根据实际需求,使用pySerial库的其他函数来完成更多复杂的串口通信任务。 需要注意的是,以上代码是在Windows系统上运行的,串口号为'COM1',波特率为115200。如果是在其他操作系统上使用串口,需要根据实际情况修改串口号。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值