传感器通过RS485转USB和电脑通信

本文详细描述了如何通过Python实现星仪压力变送器与RS485通信,并将数据存储到MySQL数据库。包括硬件连接步骤,以及如何读取数据库中的数据并生成压力波形图。
摘要由CSDN通过智能技术生成

记录一下做的实验

传感器:星仪压力变送器

先放一张整体的连接图

一、硬件连接细节

1.压力变送器引出线介绍

压力变送器的RS485引出线是四芯的屏蔽线(如图,红和蓝接电源正负黄A 白B银色的是屏蔽线)。电源正负线连上直流电源的正负就行,AB线和RS485转USB模块的AB接线口相连。

78a4a0602a2345438e07949cba7a5791.jpg

2.电源

电源用的是明纬的24v开关电源,左边三个接线端连接三插电源线(下下图)的零线火线和地线,右边是输出电压正负极,连接压力变送器输出引线的电源正负极。

70236f852b92490fbedf282295edef46.jpg

 0576b5aaba7a43859cc3bc5f1355d5c1.jpg

 3.RS485转USB模块

RS485转USB模块有5个接口,只需要将AB接口和压力变送器引出线的AB接口相连就行了,然后USB端接在电脑USB口上,下载一个驱动,就可以在电脑的设备管理器上看到这个端口了。

8705faa18ebb46668a1de5c359e0be55.jpg

 9138d2218b2a48e685c87f07f6a314e9.jpg

 二、软件部分

1.python实现读取端口的传感器数据并传给数据库

首先需要知道USB转485所用的端口号,可以在设备管理器的这里看到,然后需要配置好自己的mySQL,另外还要了解自己所用传感器的协议,我用的压力变送器协议是这样的(下图)。这些消息改写代码的时候都需要用到。

代码是参考别的博文后修改的,代码如下:

import serial  # 导入serial包数据存入本地数
import time  # 导入time包
import pymysql  # 导入pymysql包

log = 0  # 设一个log变量用于记录单次接收次数
s = serial.Serial('com7', 9600, timeout=1)  # 打开串口,配置串口参数和你设备通讯参数一致。
db = pymysql.connect(host="xxx", user="xxx", password="xxx", database="xxx")# 打开数据库,配置数据库(按自己的来)
cursor = db.cursor()  # 数据库操作

cursor.execute("DROP TABLE IF EXISTS monitor_data")  # 如果存在表则重新创建
creatTab = """CREATE TABLE monitor_data( # 创建表
    TIME CHAR(50),
    P_DATA FLOAT 
     )"""
cursor.execute(creatTab)  # 执行数据库语句
temp_send = '01 03 00 00 00 01 84 0A'
# 发送的数据转为2进制b'\x01\x03\x00\x00\x00\x02\xc4\x0b'
temp_send = bytes.fromhex(temp_send)
print(temp_send)
while True:  # 无限循环读取数据
    if s.is_open:
        print('port open ok')
        s.write(temp_send)
        time.sleep(0.1)
        # 获取返回的缓冲data,获取的是buffer_data的长度    9
        buffer_data = s.in_waiting
        # print(buffer_data, 'buffer_data')
        if buffer_data:
            # 返回的数据为2进制:b'\x01\x03\x04\x01\x08\x022\xfa\xb8'
            return_data = s.read(buffer_data)
            # print('返回的数据2进制:', return_data)
            # 二进制转换为16进制:010304010802307b79
            return_data_hex = str(return_data.hex())
            print('返回的数据转换为16进制:', return_data_hex)
            # 对返回的数据进行解析,获取温度和湿度数据
            pressure = int(return_data_hex[6:10], 16) / 200
            print("当前压力为:", int(return_data_hex[6:10], 16) / 200)
            #print("当前湿度为:", int(return_data_hex[10:14], 16) / 10)
            localtime = time.asctime(time.localtime(time.time()))  # time包操作,打印本地时间
            local_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())  # 规整本地时间的格式
            sql = "INSERT INTO monitor_data(TIME,P_DATA)VALUES('%s','%.1f')" % (
                local_time, pressure)  # 存入数据库
            cursor.execute(sql)  # 执行数据库语句
            db.commit()  # 提交
            time.sleep(0.5)
cursor.close()
db.close()

结果展示:(因为还没有施加压力,所以读数一直是0)

 

2.python实现读取存放在数据库的传感器数据画波形图

import pandas as pd
import pymysql
# 连接到MySQL数据库
conn = pymysql.connect(host="xxx", user="xxx", password="xxx", database="xxx")
# 查询数据并读取到DataFrame中
query = "SELECT TIME, P_DATA FROM monitor_data"
df = pd.read_sql(query, conn)
# 关闭数据库连接
conn.close()
import matplotlib.pyplot as plt
# 将时间戳转换为datetime类型
df['TIME'] = pd.to_datetime(df['TIME'])
# 设置图像大小和标题
plt.figure(figsize=(10, 6))
plt.title('Pressure Waveform')
# 绘制图形
plt.plot(df['TIME'], df['P_DATA'])
# 设置横轴和纵轴标签
plt.xlabel('TIME')
plt.ylabel('P_DATA')
# 显示图形
plt.show()

结果展示:

  • 10
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值