记录一下做的实验
传感器:星仪压力变送器
先放一张整体的连接图
一、硬件连接细节
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()
结果展示:
还没有评论,来说两句吧...