实现流程
1, STM32下位机通过蓝牙串口发送数据
2, 上位机使用PySerial库进行接收
3, 使用re正则表达式获取数据串中的不同相关内容
4, 把正则生成的列表类型数据转换成字符串
5, 再通过PyMySQL把数据存进相应的MySQL数据表单
代码图
因为要写一个升级版///手动备份
# coding=gb18030
# 导入三个包
import serial # 串口库
import time # 时间库
import re # 正则表达式库
import pymysql # Python3的MySQL数据库
log = 0 # 设置一个log记录,初始值0,用于记录数据次数
s = serial.Serial('com7', 9600, timeout=3) # 打开串口,配置com7 波特率9600 时间延迟3秒 这里就是下位机传给上位机的端口
db = pymysql.connect("localhost", "root", "q1w2e3", "pigwebdb") # 连接数据库
cursor = db.cursor() # 数据库操作标记
while True: # 无限循环,无线读取数据
log += 1 # 每次接收数据,log变量加一
localtime = time.asctime(time.localtime(time.time())) # 调用本地时间
data_pre = s.readline() # 读取一行数据
# 初步处理数据
data = str(data_pre)[2:-3] # 把最先用n读取的数据强制性转换成字符串 去掉接受到数据的 b'' 头尾
device_name = ''.join(re.findall(r"n(.+?)t", data)) # 使用正则表达式 截取相关内容 再把列表转成字符串
temp_value = ''.join(re.findall(r"t(.+?)h", data))
humi_value = ''.join(re.findall(r"h(.+?)l", data))
light_value = ''.join(re.findall(r"l(.+?)a", data))
ammonia_value = ''.join(re.findall(r"a(.+?)e", data))
local_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) # 规定接收时间
if data == 0000:
d_name = 'none'
td = 'unkown'
hd = 'unkown'
ld = 'unkown'
ad = 'unkown'
print('the monitor system cant receive the data from hardware...Please chick the device running status..')
# SQL语言,把数据插入数据库表
sql = "INSERT INTO monitor_MonitorData02DB(log_id,d_name,rec_time,tem_v,rh_v,light_v,ag_v)VALUES('%d','%s','%s','%d','%d','%f','%f')" % (
log, d_name, local_time, td, hd, ld, ad)
cursor.execute(sql) # 执行上述数据库语言
db.commit() # 提交命令
else:
d_name = device_name
td = int(temp_value)
hd = int(humi_value)
ld = float(light_value)
ad = float(ammonia_value)
print("NO.", log, "rectime is:", local_time, "value is :", d_name, td, hd, ld, ad)
# SQL语言,把数据插入数据库表
sql = "INSERT INTO monitor_MonitorData02DB(log_id,d_name,rec_time,tem_v,rh_v,light_v,ag_v)VALUES('%d','%s','%s','%d','%d','%f','%f')" % (
log, d_name, local_time, td, hd, ld, ad)
cursor.execute(sql) # 执行上述数据库语言
db.commit() # 提交命令
cursor.close() # 结束数据库标记
db.close() # 关闭数据库连接