dht11 python mysql_自己动手实现智能家居之温湿度数据采集存储(DHT11,MySql)
【前言】
一个热爱技术的人一定向往有一个科技感十足的环境吧,那何不亲自实践一下属于技术人的座右铭:“技术改变世界”。
就让我们一步步动手搭建一个属于自己的“智能家居平台”吧(不要对这个名词抬杠啦,技术在手,怎么设计实现因人而异),本文只做抛砖引玉,各路大神如果有更好的想法可以各显神通,当然能在评论区留下更好的想法让大家共同学习是再好不过啦。
在文章最后附有所有源代码,有需要的可以自行下载,感谢Star~
【系列目录】
【本节概要】
上一节我们介绍了树莓派以及树莓派的GPIO的简单使用,这一节基于上一节的知识点采集屋内的温度和湿度数据,并且构建python脚本将采集到的数据写入到mysql数据库持久化。
效果图:
那么接下来我们就一步步讲解这个折腾的过程...
【硬件采购】
”某宝“购买一个DHT11模块,大概¥6,为了方便线路灵活连接,我们购买了面包板和杜邦线若干。
硬件采购完毕,我们开始搞软件部分~~~
【DHT11模块获取温湿度】
DHT11硬件接口
DHT11有三个IO接口,一个VCC(正极)接3.3v,一个GND接GND,剩下一个DATA接树莓派的任意一个GPIO。在设备上有印刷的字体标明了引脚,可以根据指示接到树莓派上。
使用开源类库Adafruit_DHT获取温湿度
读取温度和湿度我们可以使用已经封装好的开源库:Adafruit_DHT
import Adafruit_DHT
# Use read_retry method. This will retry up to 15 times to
# get a sensor reading (waiting 2 seconds between each retry).
# this is bcm code
humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT11, 4)
构建数据存储部分
为了便于我们读写MySql,我们需要一个 MySqlHelper.py,内容如下:
# coding=utf-8
import pymysql
from Utility.Configs import Cfg_MySql
class MySqlHelper:
conn = None
def __init__(self, db):
cfg_mysql = Cfg_MySql()
self.conn = pymysql.connect(host=cfg_mysql.get('host'), port=int(cfg_mysql.get('port')), user=cfg_mysql.get('user'), passwd=cfg_mysql.get('passwd'), db=db)
def getConnAndCur(self):
return self.conn,self.conn.cursor()
def executeSql(self,sql):
conn,cur = self.getConnAndCur()
cur.execute(sql)
conn.commit()
cur.close()
conn.close()
# 用完记得释放
# cur.close()
# conn.close()
mysql的连接信息是通过ini配置文件存储的,我们还需要一个 Configs.py 读写配置文件,内容如下:
# coding=utf-8
import configparser
# 树莓派的ubuntu系统里面如果要使用计划任务,则必须写成绝对路径,意味着这里需要加前缀
# RASPBERRY_PI_PATH = '/7tniy/SevenTiny.SmartHome'
# Windows调试不需要加绝对路径
RASPBERRY_PI_PATH_ROOT = ''
# get configuration
config = configparser.ConfigParser()
config.read(RASPBERRY_PI_PATH_ROOT + 'SmartHome.ini',encoding='UTF-8')
class Cfg_MySql:
__tag = 'MySql'
def __init__(self):
pass
def get(self, name):
return config.get(self.__tag, name)
我们的配置文件 SmartHome.ini 放在项目根目录即可。内容如下:
[MySql]
connectionstring = 1
host = 192.168.0.1
port = 3306
user = prod
passwd = 123456xxx
数据库表结构:
/*
Navicat MySQL Data Transfer
Source Server :
Source Server Version : 50644
Source Host :
Source Database : SmartHome
Target Server Type : MYSQL
Target Server Version : 50644
File Encoding : 65001
Date: 2019-10-08 21:38:09
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for DailyMonitor
-- ----------------------------
DROP TABLE IF EXISTS `DailyMonitor`;
CREATE TABLE `DailyMonitor` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`DateTime` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP,
`Year` int(11) DEFAULT NULL,
`Month` int(11) DEFAULT NULL,
`Day` int(11) DEFAULT NULL,
`Hour` int(11) DEFAULT NULL,
`Temperature` double(255,0) DEFAULT NULL,
`Humidity` double(255,0) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=1211 DEFAULT CHARSET=utf8;
主监控脚本 SmartHomeScreen.py 内容
创建mysql连接
通过DHT11获取温湿度
将数据异步写入MySql(每小时一次)
# coding=utf-8
from Utility.MySqlHelper import MySqlHelper
import _thread
import Adafruit_DHT
import time
import datetime
import RPi.GPIO as GPIO
import sys
sys.path.append('..')
def WriteToDb(timenow, year, month, day, hour, temp, humi):
smartHomeDb = MySqlHelper("SmartHome")
smartHomeDb.executeSql("INSERT INTO DailyMonitor (DateTime,Year,Month,Day,Hour,Temperature,Humidity) VALUES ('{0}',{1},{2},{3},{4},{5},{6})".format(
timenow, year, month, day, hour, temp, humi))
# 已经写入数据库的小时标识,插入数据的同时,修改为下一个小时,用于比较是否需要写入
hasWriteToDbHour = datetime.datetime.now().hour
while(True):
# time
timenow = datetime.datetime.now()
# Use read_retry method. This will retry up to 15 times to
# get a sensor reading (waiting 2 seconds between each retry).
# this is bcm code
humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT11, 4)
print('time:{0},humidity:{1}%,temperature:{2}*C'.format(
datetime.datetime.now(), humidity, temperature))
# 异步将数据写入mysql
if hasWriteToDbHour == timenow.hour:
_thread.start_new_thread(WriteToDb, (timenow, timenow.year,
timenow.month, timenow.day, timenow.hour, temperature, humidity))
if hasWriteToDbHour == 23:
hasWriteToDbHour = 0
else:
hasWriteToDbHour = hasWriteToDbHour + 1
time.sleep(2)
【温湿度监控】
我们通过SSH远程连接到树莓派的终端
通过FTP将我们的项目上传到树莓派服务器
采用后台进程的方式运行我们的主脚本(关闭终端进程不会退出)
nohup python SmartHomeScreen.py
这样我们的信息采集脚本就一直在工作中了,每小时会采集一次温湿度,并存储到数据库表中。
【注意事项】
树莓派中默认安装的python版本是2.7,我们的代码是采用python3编写的,可能有不兼容的情况,需要重新安装python3.6以上版本
我们的GPIO类库是不能在没有GPIO支持的设备上调试的,也就是说在windows本地调试毫无意义,并且安装GPIO的包会出现各种问题,建议直接将代码复制到树莓派调试,无需在本地调试
【总结】
通过本节内容,我们实现了利用树莓派的GPIO和DHT11温湿度采集模块24小时实时采集环境中的温湿度,并且持久化到了MySql中,作为我们后续监控面板和监控报表的基础数据。
后续章节我们会介绍利用我们采集的24小时温湿度数据制作温湿度报表... 效果预热:
【源码地址】
关于找一找教程网
本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[自己动手实现智能家居之温湿度数据采集存储(DHT11,MySql)]http://www.zyiz.net/tech/detail-92509.html
dht11 python mysql_自己动手实现智能家居之温湿度数据采集存储(DHT11,MySql)相关推荐
- dht11 python mysql,自己动手实现智能家居之温湿度数据采集存储(DHT11,MySql)
摘要: idity`double(255,0)DEFAULTNULL,PRIMARYKEY(`Id`))ENGINE=InnoDBAUTO_INCREMENT=1211DEFAULTCHARSET=u ...
- 《动手搭建智能家居系统》——2.5 遥控设备
本节书摘来异步社区<动手搭建智能家居系统>一书中的第2章,第2.5节,作者: [德]Othmar Kyas,更多章节内容可以访问云栖社区"异步社区"公众号查看 2.5 ...
- 基于python的智能家居系统_基于Python Django的可扩展智能家居系统
基于 Python Django 的可扩展智能家居系统 龚 鸣,余杨志,邓宏涛 * [摘 要] 针对现阶段智能家居系统智能化迭代开发的需求,分析当前智能家居 系统主控的相关实现技术,提出了基于 Pyt ...
- 智能家居之温湿度传感器
智能家居之温湿度传感器 前言 一.DHT11 二.步骤 1.初始化 2.数据读取配置 – 前言 此模块用于智能家居项目中 项目中含有模块: 温湿度传感器 光照强度传感器 ONENET-MQTT服务器 ...
- 自己动手做智能家居之:智能空调控制
阅读本文需要 2 分钟. 夏天天气非常热的时候整晚吹空调经常会吹得整个人都不舒服,早上起来很疲惫,达不到轻松睡眠的效果.空调吹久了还是会感觉到冷,定时功能不能完全满足需求,半夜醒来开了关,关了开实在是 ...
- mysql报文格式_GitHub - YMBo/sflow_traffic: python解析报文(支持格式sflow、gre等)并存储到mysql...
sflow_traffic python解析sflow或TCP报文(多种格式)并存储到mysql,可多个机器部署 说明 sflowtool version: 5.02 Python version 2 ...
- 基于Arduino的智能家居系统【ESP8266WIFI模块 DHT11温湿度模块 继电器 加湿模块 APP远程控制 数据上传机智云】
- (转)如何动手打造属于自己的智能家居
转自:http://www.cocoachina.com/programmer/20140629/8974.html 2014-06-29 14:11 编辑: suiling 分类:程序人生 来源:C ...
- 程序员如何动手打造属于自己的智能家居
本文转自 奔跑的小乌龟 的博客 自己动手打造属于自己的智能家居(一) 最近智能家居比较火,各种电子产品也层出不穷,于是利用业余时间,学了学,将自己的房子简单改造了一下,也算体验一下智能家居.在开始正文 ...
最新文章
- java sftp nologin_SFTP连接通过Java询问奇怪的身份验证
- python培训出来的有公司要吗-参加Python培训到底需要学什么?好程序员
- 破解32位NT6内核系统(vista/win7 8G以上)的内存限制,完美支持4GB至128GB内存,全新教程!
- 计算机硬盘清理,电脑磁盘清理,详细教您电脑磁盘怎么清理
- java ee实验新闻_JAVAEE第四次作业-JSP显示新闻
- 基于图嵌入的兵棋联合作战态势实体知识表示学习方法
- 深源恒际医疗票据OCR落地九省市 服务范围覆盖过半市场
- Entity Framework 学习中级篇2—存储过程(上)(转)
- ajax 文件上传,ajax
- linux网络适配器驱动程序怎么安装,英特尔?服务器适配器 — Linuxixgbe* 基础驱动程序概述和安装...
- python打印四种三角形
- 开源大数据:Alluxio 云原生数据编排
- 从头配置一台医学影像处理的电脑 Ubuntu20.04
- 别说你不知道光纤有这七种类型!
- php5市场占有率,javascript,php_目前国内浏览器的市场占有率?,javascript,php,html,html5,css - phpStudy...
- 云原生中为什么需要API网关?
- javafx 教程_JavaFX,Jigsaw项目和JEP 253
- 校准报告确认有哪些方法?为什么需要进行确认?
- 【JY】基于性能的抗震设计浅析(二)
- [转载] 信息系统项目管理师视频教程——29 信息系统监理