【已解决】Python3.6+PySerial+PyMySQL+正则表达式来读串口存数据库

来源:互联网 发布:dojo 对象数组转json 编辑:程序博客网 时间:2024/06/05 14:26

实现流程

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()  # 关闭数据库连接



原创粉丝点击