- 自己动手实现智能家居之温湿度数据采集存储(DHT11,MySql)
- 来源:BigDataKer
【前言】
一个热爱技术的人一定向往有一个科技感十足的环境吧,那何不亲自实践一下属于技术人的座右铭:“技术改变世界”。
就让我们一步步动手搭建一个属于自己的“智能家居平台”吧(不要对这个名词抬杠啦,技术在手,怎么设计实现因人而异),本文只做抛砖引玉,各路大神如果有更好的想法可以各显神通,当然能在评论区留下更好的想法让大家共同学习是再好不过啦。
在文章最后附有所有源代码,有需要的可以自行下载,感谢Star~
【系列目录】
- 树莓派GPIO简介(Python版)
- 温湿度数据采集存储(DHT11,MySql)
- 温湿度数码管展示(四位共阳数码管)
- 构建App展示温湿度报表(ApiCloud,Python Flask)
- 普通家用排插集成继电器手工改造
- App远程控制“自制智能”排插
- 使用花生棒内网穿透实现外网访问
- App远程监控(摄像头模块集成)
【本节概要】
上一节我们介绍了树莓派以及树莓派的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小时温湿度数据制作温湿度报表... 效果预热:
【源码地址】
Github:https://github.com/sevenTiny/SevenTiny.SmartHome
【博主声明】
本文为七小站主原创作品,转载请注明出处://www.cnblogs.com/7tiny/ 且在文章页面明显位置给出原文链接。
数码
-
- 智能家居无线通讯技术的宠儿Zigbee你了解吗?
- 1、Zigbee协议是基于IEEE802.15.4标准的低功耗局域网协议,是一种短距离、低功耗的无线通信技术。是由ZigBee联盟制定的无线通信标准,该联盟成立于2001年8月。2002年下半年,英国
- 快乐的探索者
-
- 全息投影智能音箱?还可升级打怪,HE叶修让你玩转荣耀
- 近几年国产动漫发展还是比较迅速的,经常能看到一些比较好的动漫作品,此前《全职高手》更是被翻拍成真人版电视剧。《全职高手》里面的主角叶修是荣耀网游全职业精通的"全职高手",帅气的人物造型以及超强的职业技
- 小强玩科技
-
- 智能家居变智障?亲身体验4款口碑硬货 绝不踩雷
- 近年来,智能家居炙手可热,小到智能门锁、智能音箱,大到智能家电,都已经深入到很多人的生活。 然而智能家居高开低走的不在少数,曾经在网上被疯狂吐槽的智能扫地机,出现满屋子乱跑、怼墙怼凳子、被头发缠住等等
- 驱动之家
-
- 解密林荫大院学舍 智能家居成为大卖的重要因素
- 随着智能化时代的来临,以及物联网和AI等技术迅猛发展,智能家居也日渐成熟和普及,行业将迎来最好的发展年份,市场规模日益增长,根据研究报告显示,今年全球智能家居市场规模将达1020亿美元。同时,预计到2
- 河北房产报道
-
- 你该了解!智能家居在不同人群中有哪些不一样的应用
- 根据《2019家居生活及消费趋势报告》显示,六成家庭的装修预算超过20万元,这标志着人们对于家装越来越重视。和过去的简单装修不同,现代人更愿意自己主导装修设计,同时也更愿意接受新鲜事物,这也让智能家居
- 智哪儿
-
- 智能化行业智能锁的安全防范技术与应用
- 传统的门锁是需要用钥匙开启的,而如今我们用一根手指就可方便又快捷的开门,还可借助智能手机远程开门,这些高科技带给我们生活的便利,让我们在享受智能生活中得到便利。那么我们拥有的智能门锁安全性如何?下面小
- Pheenet菲尼特
-
- 茶几里还能放冰激凌?刷新你对智能家居的认知
- 冰箱是现代人离不开的家电产品,冰箱不仅可以延长食品的保存期限,还可以冰镇食物,给人冰爽食用体验。 相较于智能手机、可穿戴设备来说,大家电冰箱这些年来的进步并不是这么明显,但这也不意味着它们驻足不前,冰
- 驻马店网
-
- 茶几里还能放冰激凌?刷新你对智能家居的认知
- 冰箱是现代人离不开的家电产品,冰箱不仅可以延长食品的保存期限,还可以冰镇食物,给人冰爽食用体验。 相较于智能手机、可穿戴设备来说,大家电冰箱这些年来的进步并不是这么明显,但这也不意味着它们驻足不前,冰
- 驻马店网
-
- 科技智能住宅正火热 买房应该怎么选
- 随着人类文明的进步和发展,科技的腾飞让人们的衣食住行得到了很大的便利。房子不仅仅是房子,它变得越来越智能、越来越绿色环保、也越来越懂人性。不仅是遮风避雨,更是一种赏心悦目的舒心感。 被动式住宅一开始普
- 石家庄买房通
-
- 打造智能家庭,其实仅需几百块就可以搞定
- 目前,世界上很多富豪们在全球各地都有数不清的房产。他们有私人管家,不用动嘴就能享受到最好的服务,堪称“智能”。但对于我们普通人来说,想要这么“智能”的生活,就需要借助智能家居来解决了。 事实上,当
- e科技观潮
-
- 企业抢风口、消费者仍观望,中国智能家居行业“单相思”
- 文章来源:经济观察报 作 者:叶心冉 导读:现今,智能家居行业面临的最核心的问题,是消费者如何去认可产品的价值。 “扫地机器人像个傻白甜一样,只会说‘我被卡住啦’‘我被卡住啦’,地垫都过不去,使用感不
- 雅观实验室
-
- 逐鹿万亿智能家居市场,为何欧瑞博斩获颇丰?
- 文/杨剑勇 5G将至,以及物联网和AI等技术迅猛发展,智能家居逐渐成熟和普及,行业将迎来最好的发展年份,市场规模日益增长,Strategy Analytics研究报告显示,今年全球智能家居市场规模将达
- 杨剑勇
-
- 自己动手实现智能家居之温湿度数据采集存储(DHT11,MySql)
- 【前言】 一个热爱技术的人一定向往有一个科技感十足的环境吧,那何不亲自实践一下属于技术人的座右铭:“技术改变世界”。 就让我们一步步动手搭建一个属于自己的“智能家居平台”吧(不要对这个名词抬杠啦,技术
- BigDataKer
-
- 我花了700块 把家改造成了“标配”智能家庭
- 前段时间,笔者在油管上看了一部英国纪录片《有钱人生》,采访对象是一些超级富豪。对于他们来说生活里是没有“家”的概念的。 这些富豪在全球各地都有数不清的房产。他们有私人管家,不用动嘴就能享受到最好的服务
- 中关村在线
-
- 智能家居时代,怎样选择一把你心底里切实需要的智能门锁?
- 智能家居时代,怎样选择一把你心底里切实需要的智能门锁?这是就你要考虑的问题。 你可能会告诉我:“安全的、好看的、好用的、服务好的、性价比高的就是我要的。”这也许是每个消费者的共同标准,可当你上网或到市
- 多智时代