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

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

码农世界 2024-06-19 后端 89 次浏览 0个评论

记录一下做的实验

传感器:星仪压力变送器

先放一张整体的连接图

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

一、硬件连接细节

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

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

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

2.电源

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

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

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

 3.RS485转USB模块

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

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

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

 二、软件部分

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

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

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

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)

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

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

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()

结果展示:

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

转载请注明来自码农世界,本文标题:《传感器通过RS485转USB和电脑通信》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,89人围观)参与讨论

还没有评论,来说两句吧...

Top