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

实现流程

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



  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值