python写的串口助手并连接腾讯云服务器数据库

结合上一期的基于pyqt5开发的图书管理系统UI(带登录页面)文章做一个此章节的补充。因为老师说需要结合数据库实现登录系统。于是我就想起了自己在腾讯云上买的一个服务器。因此经过百度查询大量的资料,功夫不负有心人,在这个Pyqt5实现的可视化界面上,实现了通过服务器的数据库实现登录、和注册账号。因为老师要求我们做一个串口助手,因此也简单实现了串口助手的功能。

一、python登录系统接入腾讯云服务器数据库

由于Python和服务器相关的知识都是自己自学的,所有很多专业知识可能自己阐述不清楚,有什么疑问欢迎大家在评论区留言。

首先大家需要购买一台服务器,至于什么品牌的大家可以自行选择。对于第一次接触服务器相关知识来说,大家可以在服务器中安装宝塔面板。至于怎么在自己服务器安装宝塔面板,大家可以参考宝塔官网的教程宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板,安装好后打开如下:

 然后直接创建数据库,随便取一个名字,比如wqeq并点击进入phpmyadmin

 进入后找到你创建的数据库

 输入自己想创建的数据表名,字段数代表有几个输入框,比如:账号、密码,那么字段数为2。点击创建即可

 

创建后如上,类型选择TEXT(按照直接需求填写),长度值就代表 usname和password用户设置用户名和密码的长度,其实这就相当于excel表格,剩下的参数我也没有探究,直接点击保存即可。创建好后。

回到宝塔面板,记得设置右边的权限,设置为所有人。

 我们再看Python连接服务器的代码。

 

 需要填写的内容都在这

    def go_to_login(self):
        uname = self.ui.lineEdit_4.text()
        upwd = self.ui.lineEdit_3.text()
        #conn = connect(host='服务器Ip地址', user='test', password='密码',
        #               db='test', port=3306, charset='utf8')
        conn = connect(host='服务器Ip地址', user='用户名', password='密        
         码', db='数据库名', port=3306, charset='utf8')
        #  其他的保持不变
        #  得到一个游标对象
        cs1 = conn.cursor()
        # 2, 执行sql语句
        sql = """select password(创建的列名) from users(创建的表名) where usname(创建的列名) =%s """
        cs1.execute(sql, (uname,))
        result = cs1.fetchone()

        #这里的password和usname跟在表格当中设置的列名一致 

        if result == None:
            self.ui.label_7.setText("用户名错误,登录失败")
        elif result[0] == upwd:
            homepageWindow()
            self.close()
        else:
            self.ui.label_7.setText("密码错误,登录失败")

第一次的小白可以和我的设置的数据名保持一致防止出错。sql = """select password(创建的列名) from users(创建的表名) where usname(创建的列名) =%s """这里一点都不能错哦。

附上完整的登录和注册代码,因为时间关系,还要准备比赛之类的,就写了最简单毫无验证的注册登录。如果闪退就是服务器连接失败了,这里没有写连接失败的函数。如下:

    def go_to_login(self):
        uname = self.ui.lineEdit_4.text()
        upwd = self.ui.lineEdit_3.text()
        conn = connect(host='服务器地址', user='test', password='密码',
                       db='test', port=3306, charset='utf8')
        #  得到一个游标对象
        cs1 = conn.cursor()
        # 2, 执行sql语句
        sql = """select password from users where usname =%s """
        cs1.execute(sql, (uname,))
        result = cs1.fetchone()

        if result == None:
            self.ui.label_7.setText("用户名错误,登录失败")
        elif result[0] == upwd:
            homepageWindow()
            self.close()
        else:
            self.ui.label_7.setText("密码错误,登录失败")

    def go_to_enroll(self):
            uname = self.ui.lineEdit_5.text()
            upwd = self.ui.lineEdit_6.text()

            # 打开与数据库的连接
            conn = connect(host='服务器地址', user='test', password='密码',
                               db='test', port=3306, charset='utf8')
            cur = conn.cursor()
            # 判断用户名是否存在
            sql = 'select count(*) from users where usname=%s'
            # params = [uname]
            cur.execute(sql, (uname,))
            result = cur.fetchone()
            if result[0]:
                self.ui.label_8.setText('用户名已经存在,请重新注册')
            else:
                # 用户名不存在
                sql = 'insert into users(usname, password) values(%s, %s)'
                # params = [uname, upwd]
                result = cur.execute(sql, (uname, upwd))
                conn.commit()
                if result == 1:
                    self.ui.label_8.setText('注册成功')
                else:
                    self.ui.label_8.setText('注册失败')

二、python的串口助手

因为老师想做的是串口采集信息,串口发送指令,本来做了大概的串口助手界面,但是不符合要求,就删掉了,最终界面如下。

 因为采集的信息是温湿度之类的,所有自己也想做一个用matplotlib库的数据可视化,但是确定没有太多的时间就没有深入的去研究,只加入了库,没有设置变量这些。做一个串口助手,重要的地方在,接收信息并处理,发送16进制信息等。接收信息处理等。如何提取数据有效需要实际操作,因为我们是接收stm32的数据,所以用ser.read(100)来处理,ser为一个类,9代表一次读取多少位的数据,如这串FF F5 05 02 01 00 00 01 03数据。如果发送数据则使用b=bytearray([0xFF,0xF5,0x05,0x02,0x01,0x00,0x00,0x01,0x03])
b=bytes.fromhex('FF F5 05 02 01 00 00 01 03')
ser.write(d)

因为stm32的交互大多数都是16进制,这里提供两个发送16进制的方法。

最后如果有小伙伴想要做串口助手,可以下载一个虚拟串口助手,可以模拟两个虚拟串口进行测试。最后上源码:

    def read_msg_thring(self):
        t = Thread(target=self.read_msg)
        t.start()


    # 接收数据
    def read_msg(self):

        global ser
        ser = serial.Serial(port="COM200",
                                baudrate=38200,
                                bytesize=serial.SEVENBITS,
                                parity=serial.PARITY_NONE,
                                stopbits=serial.STOPBITS_TWO,
                                timeout=0.5)
        print("开启成功")
        while True:
            data = ser.read(11)  # 递归读取串口
            if ((data[0] == 0xFF) & (data[1] == 0xFD)):
                if (data[2] == 0x00):
                    x=float(int(chr(data[4]))+(int(chr(data[5]))/10))
                    # y=float(x * 1000 / 3.3)
                    self.ui.label_135.setText((str(x) + '0Lx'))

                if (data[2] == 0x01):
                    self.ui.label_99.setText((str(int(data[4])+(int(data[5]))/10))+"℃")
                    self.ui.label_104.setText((str(int(data[6]) +(int(data[7]))/10))+'%')

 def kaiq(self):
        # data = bytearray([0xFF,0xF5,0x05,0x02,0x01,0x00,0x00,0x01,0x03])
        # ser.write(data)
        d = bytes.fromhex('FF F5 05 02 01 00 00 01 03')
        ser.write(d)
        # ser.write(b'\xFA\xFB\x07\x01\x00\x00\x00\x00\x00')
        print("打开")
       # FF F5 05 02 01 00 00 01 03
def guan(self):
        data = bytearray([0xFF,0xF5,0x05,0x02,0x01,0x00,0x00,0x02,0x02])
        ser.write(data)

这里有接收和发送函数,大家可以参考,因为接收是while True循环,所有加了个多线程,其中完整代码还有信号实现多线程的例子,感兴趣的朋友可以下载完整源码查看。下载完程序直接运行main.py及可以运行,还有一些没有完善的功能就不细说了。希望对于想做串口助手的小伙伴和实现登录验证的小伙伴有所帮助。源码请看我的个人中心,不需要积分纯属免费哦,有什么疑问欢迎评论区打扰。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智奉工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值