Advertisement

树莓派通过RS485(modbus RTU协议)通信

阅读量:

了解 Modbus RTU 协议相关内容可以自行查阅相关资料

在这我做的是RS485转usb口,用树莓派获取数据。

我的数据来源于 pySerial 平台

在确定设备没问题、PC也可以正常获取数据后,连接树莓派

首先查看串口号

复制代码
    ls /dev/ttyUSB*
    
    bash

确定串口号之后,写程序

复制代码
 import time

    
 import serial
    
  
    
 # 初始化串口
    
 s = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
    
  
    
 # Modbus RTU请求帧,以十六进制字符串形式给出
    
 temp_send = '01 03 00 00 00 01 84 0A'
    
  
    
 # 将十六进制字符串转换为字节串
    
 temp_send = bytes.fromhex(temp_send)
    
  
    
 # 保存数据
    
 def save_data(data, file_name):
    
     with open(file_name, 'a', encoding='utf-8') as f:
    
     f.write(data + '\n')
    
     f.close()
    
  
    
 # 无限循环读取数据
    
 while True:
    
     if s.is_open:
    
     s.write(temp_send)
    
     time.sleep(0.1)
    
     
    
     # 获取串口缓冲区中的数据长度
    
     buffer_data = s.in_waiting
    
     
    
     if buffer_data:
    
         # 读取缓冲区中的所有数据
    
         return_data = s.read(buffer_data)
    
         
    
         # 将返回的二进制数据转换为十六进制字符串
    
         return_data_hex = return_data.hex()
    
         
    
         # 解析返回数据,获取压力数据
    
         pressure = int(return_data_hex[6:10], 16) / 100
    
         
    
         # 获取当前时间
    
         local_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    
         
    
         print("当前时间为:", local_time)
    
         print("当前压力为:", pressure)
    
         
    
         # 保存数据
    
         texts = str(local_time) + ',' + str(pressure) + "\n"
    
         save_data(texts, 'data.txt')
    
         print("保存的数据为:", texts)
    
             
    
         time.sleep(0.5)
    
    
    
    
    python
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-13/0lYfCXSzNy8HL9QeZhOom6P52tRI.png)

全部评论 (0)

还没有任何评论哟~