Python通过串口实现51单片机传输数据

之前查阅资料关于如何将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)

希望有需要的大佬可以改进发布。

 

 

 

 

 

 

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值