赞
踩
记录一下做的实验
传感器:星仪压力变送器
先放一张整体的连接图
一、硬件连接细节
1.压力变送器引出线介绍
压力变送器的RS485引出线是四芯的屏蔽线(如图,红和蓝接电源正负黄A 白B银色的是屏蔽线)。电源正负线连上直流电源的正负就行,AB线和RS485转USB模块的AB接线口相连。
2.电源
电源用的是明纬的24v开关电源,左边三个接线端连接三插电源线(下下图)的零线火线和地线,右边是输出电压正负极,连接压力变送器输出引线的电源正负极。
3.RS485转USB模块
RS485转USB模块有5个接口,只需要将AB接口和压力变送器引出线的AB接口相连就行了,然后USB端接在电脑USB口上,下载一个驱动,就可以在电脑的设备管理器上看到这个端口了。
二、软件部分
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()

结果展示:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。