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

实现流程

1, STM32下位机通过蓝牙串口发送数据

2, 上位机使用PySerial库进行接收

3, 使用re正则表达式获取数据串中的不同相关内容

4, 把正则生成的列表类型数据转换成字符串

5, 再通过PyMySQL把数据存进相应的MySQL数据表单

代码图

20170828172724068

20170828172734903

因为要写一个升级版///手动备份

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值