Python+mysql数据库+传感器(将传感器获得数据存入数据库)

您所在的位置:网站首页 蓝牙数据采集及传输实验 Python+mysql数据库+传感器(将传感器获得数据存入数据库)

Python+mysql数据库+传感器(将传感器获得数据存入数据库)

2024-01-09 16:01| 来源: 网络整理| 查看: 265

这次介绍一下,如何从传感器获得数据,并存入本地数据库中, 推介一个简易版:https://blog.csdn.net/qq_43433255/article/details/86985964

在这里首先,要感谢我的老师—蒋老师,因为,他提供了传感器的连接,让我顺利完成这次实验。也在蒋老师的指导下,知道一套完整的流程走向:

需要连接传感器,现在的笔记本一般没有端口,所以用的是虚拟端口;用传感器获得数据,将传感器获得数据存入本地数据库;通过另外的一个程序,将本地的数据库中数据传入一个服务器中(这个步骤没有完成,如果完成了,我会记得更新的)

安装mysql可以参考我这一个博客: https://blog.csdn.net/qq_43433255/article/details/86076126

现在的笔记本电脑,一般没有串口,采用虚拟串口; 在这里插入图片描述 在这里插入图片描述 先来展示一下实验效果: 在这里插入图片描述 数据库中内容:

在这里插入图片描述

接下来是代码部分:

先来实验两个串口间的相互通信: 串口1代码:

#!/usr/bin/env python3 # -*- coding:utf-8 -*- u''' Created on 2018年12月27日 @author: wuluo ''' __author__ = 'wuluo' __version__ = '1.0.0' __company__ = u'重庆交大' __updated__ = '2018-12-27' import serial # 打开串口 serialPort = "COM1" # 串口 baudRate = 9600 # 波特率 ser =serial.Serial(serialPort, baudRate, timeout=0.5) print("参数设置:串口=%s ,波特率=%d" % (serialPort, baudRate)) # 收发数据 while 1: str = input("请输入要发送的数据(非中文)并同时接收数据: ") ser.write((str + '\n').encode()) print(ser.readline()) # 可以接收中文 ser.close() if __name__ == "__main__": pass

串口2的代码:

#!/usr/bin/env python3 # -*- coding:utf-8 -*- u''' Created on2018年12月27日 @author: wuluo ''' __author__ = 'wuluo' __version__ = '1.0.0' __company__ = u'重庆交大' __updated__ = '2018-12-27' import serial # 打开串口 serialPort = "COM2" # 串口 baudRate = 9600 # 波特率 ser =serial.Serial(serialPort, baudRate, timeout=0.5) print("参数设置:串口=%s ,波特率=%d" % (serialPort, baudRate)) # 收发数据 while 1: str = input("请输入要发送的数据(非中文)并同时接收数据: ") ser.write((str + '\n').encode()) print(ser.readline()) # 可以接收中文 ser.close() if __name__ == "__main__": pass

实验结果: 在这里插入图片描述

下面,介绍,如何通过一个串口,将传感器得到的数据传回到本地数据库,

准备一个数据库,我采用的是mysql,具体安装教程,以及相关的问题,上面有链接, 数据库的创建语言:

create table wensidu( id varchar(50 ), wendu varchar(50), sidu varchar(50), primary key(id) )

然后就是两个串口部分的代码:

The one:

#!/usr/bin/env python3 # -*- coding:utf-8 -*- u''' Created on 2019年1月6日 @author: wuluo ''' __author__ = 'wuluo' __version__ = '1.0.0' __company__ = u'重庆交大' __updated__ = '2019-01-11' import threading import time import jpyc.jserial as jserial import socket import codecs import pymysql # mysql数据库的连接 con = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='123456', db='python_wensidu', charset='utf8' ) cur = con.cursor() # 定义一个游标,通过游标来操作数据库 class U2S(): def __init__(self, us_address, s_para): self.isalive = True self.us_address = us_address self.s_para = s_para self.serial = jserial.JSerial() self.serial.setsettings(s_para) self.serial.open() self.udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.udp.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.udp.settimeout(5) self.th = threading.Thread(target=self.recvfromserial, args=()) self.th.setDaemon(True) self.th.start() self.th_udp = threading.Thread(target=self.recvfromudp, args=()) self.th_udp.setDaemon(True) self.th_udp.start() def __del__(self): self.serial.close() self.udp.close() def recvfromudp(self): while self.isalive: try: data, addr = self.udp.recvfrom(8192) data = codecs.encode(data, 'hex') r = bytes(data).decode('utf-8') # 解码 shidu = int(r[6:10], 16) / 100 wendu = int(r[10:14], 16) / 100 localtimes = time.strftime( "%Y-%m-%d %H:%M:%S", time.localtime()) print(localtimes) print("温度:%s,湿度:%s\n" % (wendu, shidu)) cur.executemany("INSERT wensidu VALUE(%s,%s,%s)", [ (localtimes, str(wendu), str(shidu))]) # int转str con.commit() print("---------显示数据库内容------------") #===读取数据库 select = cur.execute('SELECT * FROM wensidu') all = cur.fetchall() print(all) except socket.timeout: pass def quit(self): self.isalive = False def recvfromserial(self): while self.isalive: data = self.serial.recv() if not data: continue print('从串口接收到:%s' % data) self.udp.sendto(data, self.us_address) if __name__ == "__main__": u2s = U2S(('10.1.156.82', 8001), 'com1,9600,8,N,1') try: while u2s.th.is_alive(): time.sleep(1) finally: if u2s.th.is_alive(): u2s.quit()

The two:

#!/usr/bin/env python3 # -*- coding:utf-8 -*- u''' Created on 2019年1月6日 @author: wuluo ''' __author__ = 'wuluo' __version__ = '1.0.0' __company__ = u'重庆交大' __updated__ = '2019-01-08' import serial import codecs import time import datetime if __name__ == "__main__": while True: com = serial.Serial() com.port = 'com2' com.baudrate = 9600 com.bytesize = 8 com.stopbits = 1 com.parity = 'N' com.timeout = 5 com.open() cmd = b'030300000002c5e9' cmd = codecs.decode(cmd, encoding='hex') try: com.write(cmd) data = com.read(9) shijian = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) print(shijian) print('接收到:%s' % codecs.encode(data, encoding='hex')) except: print('超时') finally: com.close()

到此,传感器的数据传入本地数据库中,已经完成了, 原理其实非常简单,也可以用十分简单的代码做完,其简易版,也会补充上;

还要完成的工作是,将本地数据库中数据,传入一个云端数据库,也就是一个远程数据库; 这时,就必须考虑数据库中值是否合理,在传送值时,考虑是波动范围之类的, 如果后面,我完成相应的代码,会补充近来, 当然,有想法的朋友,也可以与我联系,或者自己进行补充。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3