之前查阅资料关于如何将51单片机的串口数据传送到数据库,网上许多是通过上位机进行读取串口信息写入数据库,关于上位机没有学习过,便十分头疼,查阅了许多资料,发现有博主通过Python进行实现,并且比较简单,代码易实现,我便花费几个小时进行修改,查阅的原文(25条消息) python实现读取串口数据,并写入数据库_忘尘的世界的博客-CSDN博客_python读取串口数据
还有解决其中一个问题的博客是【python向mysql数据库中插入数据时不报错但是未成功插入的解决办法】https://mbd.baidu.com/ma/s/W3udXi23
但是发现有点错误,个人基础比较差改了很久,查阅了许多资料,终于成功了,怀着激动的心写下这篇文章。Python需要下载pyserial 和pymysql。我是在命令行下载
python -m pip install pyserial
python -m pip install pymysql
下面是我修改的代码:
import serial
import time
import pymysql # 导入pymysql包
# import easygui
log = 0
ser = serial.Serial()
ser.baudrate = 9600 # 设置波特率(这里使用的是stc89c52)
ser.port = 'COM3' # 端口是COM3
print(ser)
ser.open() # 打开串口
print(ser.is_open) # 检验串口是否打开
autocommit=True
db = pymysql.connect(host="localhost",user= "root",password= "123456", database="test",charset="utf8",autocommit=True) # 打开数据库,配置数据库
cursor = db.cursor() # 数据库操作
cursor.execute("DROP TABLE IF EXISTS B") # 如果存在表则重新创建,其实这里有点问题,不能重新创建表了因为我改了一些错误,如果串口重新启动可能要修改数据库名称,之前的不可用,有待改进
creatTab = """CREATE TABLE B( # 创建表
LOG INT NOT NULL,
TIME CHAR(50),
DRUG CHAR(50) #这里的话可以看个人需求设置
)"""
cursor.execute(creatTab) # 执行数据库语句
while (1):
localtime = time.asctime(time.localtime(time.time()))
s = ser.readline()
log += 1 # 传输次数记录+1
local_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) #个人想要显示数据的时间因为需要
data_pre = str(s)
data=data_pre[2:7] #这里不知道怎么设置可以先print自己串口传输的数据,然后数从0开始,到几位结束。
print(local_time)
print(data_pre)
print(data)
sql = " INSERT INTO B(LOG,TIME,DRUG) VALUES('%d','%s','%s')" % (log,local_time,data) # 存入数据
cursor.execute(sql)
希望有需要的大佬可以改进发布。