基于GD32F303和Python温湿度数据保存到数据库

[复制链接]
2740|36
 楼主| zeshoufx 发表于 2021-2-25 17:14 | 显示全部楼层 |阅读模式
#申请原创#一、硬件开发平台硬件开发平台采用兆易创新的gd32f303vc-EVAL开发板,传感器采用DHT11,单片机连接关系为PB11--------》DATA
14852603769ec1dec2.png
 楼主| zeshoufx 发表于 2021-2-25 17:17 | 显示全部楼层
二、传感器参数及程序
  1. void DHT11_io_set(void)
  2. {
  3.     rcu_periph_clock_enable(RCU_GPIOB);
  4.    
  5.     gpio_init(GPIOB,GPIO_MODE_OUT_PP,GPIO_OSPEED_MAX,GPIO_PIN_11);
  6. }
  7. static void DHT11_out_set(void)
  8. {
  9.         gpio_init(GPIOB,GPIO_MODE_OUT_PP,GPIO_OSPEED_MAX,GPIO_PIN_11);
  10. }
  1. static void DHT11_in_set(void)
  2. {
  3.         gpio_init(GPIOB,GPIO_MODE_IN_FLOATING,GPIO_OSPEED_MAX,GPIO_PIN_11);
  4. }

  5. static void DHT11_rst(void)
  6. {
  7.     DHT11_out_set();
  8.     DHT11_out=0;
  9.     delay_ms(20);
  10.     DHT11_out=1;
  11.     delay_us(30);
  12. }
  1. u8 DHT11_check(void)
  2. {
  3.     u8 retry=0;
  4.     DHT11_in_set();
  5.     while((DHT11_in==SET)&&retry<100)
  6.     {
  7.         retry++;
  8.         delay_us(1);
  9.     }
  10.     if(retry>100)
  11.     {
  12.         return ERROR;
  13.     }
  14.     else
  15.     {
  16.         retry=0;
  17.     }
  18.    
  19.     while((DHT11_in!=SET)&&retry<100)
  20.     {
  21.         retry++;
  22.         delay_us(1);
  23.     }
  24.     if(retry>100)
  25.     {
  26.         return ERROR;
  27.     }
  28.     else
  29.     {
  30.         return SUCCESS;
  31.     }
  32. }


  33. static u8 DHT11_read_bit(void)
  34. {
  35.     u8 retry=0;
  36.    
  37.     while((DHT11_in==SET)&&retry<100)
  38.     {
  39.         retry++;
  40.         delay_us(1);
  41.     }
  42.    
  43.     retry=0;
  44.    
  45.     while((DHT11_in!=SET)&&retry<100)
  46.     {
  47.         retry++;
  48.         delay_us(1);
  49.     }
  50.     delay_us(40);
  51.    
  52.     if(DHT11_in==SET)
  53.     {
  54.         return 1;
  55.     }
  56.     else
  57.     {
  58.         return 0;
  59.     }
  60. }
  1. u8 DHT11_get_zvalue(u8* humi,u8* temp)
  2. {
  3.     u8 buf[5]={0};
  4.     u8 i=0;
  5.     DHT11_rst();
  6.     if(DHT11_check()==SUCCESS)
  7.     {
  8.         for(i=0;i<5;i++)
  9.         {
  10.             buf[i]=DHT11_read_byte();
  11.         }
  12.         if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
  13.         {
  14.             *humi=buf[0];
  15.             *temp=buf[2];
  16.         }
  17.     }
  18.     else
  19.     {
  20.         return ERROR;
  21.     }
  22.    
  23.     return SUCCESS;
  24. }


  25. u8 DHT11_get_fvalue(float* humi,float* temp)
  26. {
  27.     u8 buf[5]={0};
  28.     u8 i=0;
  29.     DHT11_rst();
  30.     if(DHT11_check()==SUCCESS)
  31.     {
  32.         for(i=0;i<5;i++)
  33.         {
  34.             buf[i]=DHT11_read_byte();
  35.         }
  36.         if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
  37.         {
  38.             *humi=((buf[0]*10.0)+buf[1])/10.0;
  39.             *temp=((buf[2]*10.0)+buf[3])/10.0;
  40.         }
  41.     }
  42.     else
  43.     {
  44.         return ERROR;
  45.     }
  46.    
  47.     return SUCCESS;
  48. }


 楼主| zeshoufx 发表于 2021-2-25 17:21 | 显示全部楼层
zeshoufx 发表于 2021-2-25 17:17
二、传感器参数及程序

三、Python脚本平台
GD32F303将温湿度数据通过串口发送出去,Python实现将温湿度接收并保存到sqlite数据库
  1. import sqlite3
  2. import serial

  3. ser=serial.Serial("COM4",9600,timeout=6)
  4. print("串口参数:",ser)
  5.    
  6. conn=sqlite3.connect('lx.db')

  7. cursor=conn.cursor()

  8. for i in range(200):
  9.     r1=ser.read()
  10.     r1_list=int.from_bytes(r1,byteorder='big', signed=False)
  11.     r2=ser.read()
  12.     r2_list=int.from_bytes(r2,byteorder='big', signed=False)
  13.    
  14.     data=[r1_list,r2_list]
  15.     print(data)
  16.    
  17.     sql_humi='insert into temp_data(湿度,温度) values(?,?)'
  18.     cursor.execute(sql_humi,data)
  19.    

  20. cursor.close()

  21. conn.commit()

  22. conn.close()

  23. ser.close()
在Python 的IDLE里可以看到数据结果如下:
2509360376c25b1c68.png
 楼主| zeshoufx 发表于 2021-2-25 17:24 | 显示全部楼层
zeshoufx 发表于 2021-2-25 17:21
三、Python脚本平台
GD32F303将温湿度数据通过串口发送出去,Python实现将温湿度接收并保存到sqlite数据 ...

四、数据库平台数据库平台采用sqlite3,sqlite的占位符为“?”,通过利用Navicat软件查看数据如图:
5401360376cad10889.png

 楼主| zeshoufx 发表于 2021-2-25 17:27 | 显示全部楼层
zeshoufx 发表于 2021-2-25 17:24
四、数据库平台数据库平台采用sqlite3,sqlite的占位符为“?”,通过利用Navicat软件查看数据如图:

五、注意的地方:
1、ser=serial.Serial("COM4",9600,timeout=6)超时参数一定要大于单片机串口发送的数据的延时,否则会在数据库接收到一些乱码
2、Python接收到的数据为字符串,需要通过下面语句进行转换
    r1=ser.read()
    r1_list=int.from_bytes(r1,byteorder='big', signed=False)

3、sqlite的占位符为“?”,MySQL的占位符为“%s”
 楼主| zeshoufx 发表于 2021-2-25 17:33 | 显示全部楼层
zeshoufx 发表于 2021-2-25 17:27
五、注意的地方:
1、ser=serial.Serial("COM4",9600,timeout=6)超时参数一定要大于单片机串口发送的数据 ...

GD32f303工程和Python脚本

demo.zip

7.52 MB, 下载次数: 15

工程文件

lianxi2.zip

482 Bytes, 下载次数: 5

Python脚本

 楼主| zeshoufx 发表于 2021-2-26 11:21 | 显示全部楼层
zeshoufx 发表于 2021-2-25 17:33
GD32f303工程和Python脚本

在MySQL平台下实现,在原来基础上,增加了ID序号,作为主键,增加采集的时间
  1. import pymysql
  2. import serial
  3. '''from datetime'''
  4. import datetime

  5. ser=serial.Serial("COM4",9600,timeout=6)
  6. print("串口参数:",ser)
  7.    
  8. conn=pymysql.connect(host="localhost",user="root",password="123456",db="pytest",port=3306)

  9. cursor=conn.cursor()

  10. cursor.execute('create table temp_data1(id int(4) not null auto_increment,湿度 int(2),温度 int(2),采集时间 datetime,primary key(id))')

  11. for i in range(8):
  12.     r1=ser.read()
  13.     r1_list=int.from_bytes(r1,byteorder='big', signed=False)
  14.     r2=ser.read()
  15.     r2_list=int.from_bytes(r2,byteorder='big', signed=False)

  16.     time_now=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  17.     data=[r1_list,r2_list,time_now]
  18.     print(data)
  19.    
  20.     sql_humi='insert into temp_data1(湿度,温度,采集时间) values(%s,%s,%s)'
  21.     cursor.execute(sql_humi,data)
  22.    

  23. cursor.close()

  24. conn.commit()

  25. conn.close()

  26. ser.close()


 楼主| zeshoufx 发表于 2021-2-26 11:23 | 显示全部楼层
zeshoufx 发表于 2021-2-26 11:21
在MySQL平台下实现,在原来基础上,增加了ID序号,作为主键,增加采集的时间

在Python IDLE和MySQL运行的结果如图:
6240860386982c6217.png


245436038699daa532.png
 楼主| zeshoufx 发表于 2021-2-26 11:25 | 显示全部楼层
zeshoufx 发表于 2021-2-26 11:23
在Python IDLE和MySQL运行的结果如图:

基于MySQL的Python脚本

lianxi3.zip

663 Bytes, 下载次数: 4

Python的MySQL脚本

 楼主| zeshoufx 发表于 2021-2-26 16:54 | 显示全部楼层
zeshoufx 发表于 2021-2-26 11:25
基于MySQL的Python脚本

为了直观将温湿度的变化绘出来,对Python脚本进行了修改
  1. import matplotlib.pyplot as plt
  2. import pymysql
  3. import serial
  4. '''from datetime'''
  5. import datetime

  6. sd=[]
  7. wd=[]

  8. ser=serial.Serial("COM4",9600,timeout=6)
  9. print("串口参数:",ser)
  10.    
  11. conn=pymysql.connect(host="localhost",user="root",password="123456",db="pytest",port=3306)

  12. cursor=conn.cursor()

  13. #cursor.execute('create table temp_data1(id int(4) not null auto_increment,湿度 int(2),温度 int(2),采集时间 datetime,primary key(id))')

  14. for i in range(50):
  15.     r1=ser.read()
  16.     r1_list=int.from_bytes(r1,byteorder='big', signed=False)
  17.     r2=ser.read()
  18.     r2_list=int.from_bytes(r2,byteorder='big', signed=False)

  19.     time_now=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  20.     data=[r1_list,r2_list,time_now]
  21.     print(data)
  22.    
  23.     sql_humi='insert into temp_data1(湿度,温度,采集时间) values(%s,%s,%s)'
  24.     cursor.execute(sql_humi,data)

  25.     sd.append(r1_list)
  26.     wd.append(r2_list)

  27. cursor.close()

  28. conn.commit()

  29. conn.close()

  30. ser.close()

  31. plt.plot(list(range(50)),sd)
  32. plt.plot(list(range(50)),wd)
  33. plt.show()


 楼主| zeshoufx 发表于 2021-2-26 16:55 | 显示全部楼层
zeshoufx 发表于 2021-2-26 16:54
为了直观将温湿度的变化绘出来,对Python脚本进行了修改

修改后的运行结果为:蓝色为湿度,橙色为温度,由于数据量小,很简单
395116038b7575a5ba.png 173926038b7baecc26.png
kkzz 发表于 2021-3-3 22:41 | 显示全部楼层
ESP8266+AIR202/302终端管理  
hudi008 发表于 2021-3-3 22:41 | 显示全部楼层
GD32相关软件和工具  
lzmm 发表于 2021-3-3 22:41 | 显示全部楼层
分布式温湿度采集系统  
minzisc 发表于 2021-3-3 22:42 | 显示全部楼层
采用数字式温湿度传感器SHT11采集环境的湿度值  
selongli 发表于 2021-3-3 22:42 | 显示全部楼层
温度湿度检测功能怎么实现  
fentianyou 发表于 2021-3-3 22:42 | 显示全部楼层
谢谢楼主分享 的     
xiaoyaodz 发表于 2021-3-3 22:42 | 显示全部楼层
温湿度监测系统数据库怎么修改和删除
febgxu 发表于 2021-3-3 22:43 | 显示全部楼层
怎么与DHT11温湿度传感器连接  
sdlls 发表于 2021-3-3 22:43 | 显示全部楼层
-温湿度传感器模块(DHT11)实验
您需要登录后才可以回帖 登录 | 注册

本版积分规则

67

主题

1991

帖子

15

粉丝
快速回复 在线客服 返回列表 返回顶部