摘要:

idity`double(255,0)DEFAULTNULL,PRIMARYKEY(`Id`))ENGINE=InnoDBAUTO_INCREMENT=1211DEFAULTCHARSET=utf8;主监控脚本SmartHomeScreen.py内容创建mysql连接通过DHT11获取温湿度将数据异步写入MySql(每小时一次)#coding=utf-8fromUtility.MySqlHelpe

【前言】

一个热爱技术的人一定向往有一个科技感十足的环境吧,那何不亲自实践一下属于技术人的座右铭:“技术改变世界”。

ERRY_PI_PATH_ROOT=""#getconfigurationconfig=configparser.ConfigParser()config.read(RASPBERRY

就让我们一步步动手搭建一个属于自己的“智能家居平台”吧(不要对这个名词抬杠啦,技术在手,怎么设计实现因人而异),本文只做抛砖引玉,各路大神如果有更好的想法可以各显神通,当然能在评论区留下更好的想法让大家共同学习是再好不过啦。

消除很多尚未接触过.NETCore的读者对未知世界的恐惧,我们先通过几个简单的HelloWorld应用让大家感受一下在Windows上的.NETCore全新的开发体验。一、安装开发环境.NETCore

在文章最后附有所有源代码,有需要的可以自行下载,感谢Star~

NETCore项目依然由一个对应的.csproj文件来定义,图3所示的helloworld.csproj就是这么一个文件。对于传统的.NETFramework应用来说,即使是一个空的C#项目,定义该项

【系列目录】

【本节概要】

上一节我们介绍了树莓派以及树莓派的GPIO的简单使用,这一节基于上一节的知识点采集屋内的温度和湿度数据,并且构建python脚本将采集到的数据写入到mysql数据库持久化。

感谢Star~【系列目录】树莓派GPIO简介(Python版)温湿度数据采集存储(DHT11,MySql)温湿度数码管展示(四位共阳数码管)构建App展示温湿度报表(ApiCloud,PythonFl

效果图:

那么接下来我们就一步步讲解这个折腾的过程...

m/sevenTiny/SevenTiny.SmartHome微软在千禧年推出.NET战略,并在两年后推出第一个版本的.NETFramework和IDE(VisualStudio.NET2002,后来

【硬件采购】

”某宝“购买一个DHT11模块,大概¥6,为了方便线路灵活连接,我们购买了面包板和杜邦线若干。

终会封装成一个NuGet包,我们可以通过执行dotnetnew-i或者dotnetnew--install命令对其进行安装。除此之外,对于已经安装的模板,我们可以通过执行dotnetnew-u或者do

硬件采购完毕,我们开始搞软件部分~~~

化到了MySql中,作为我们后续监控面板和监控报表的基础数据。后续章节我们会介绍利用我们采集的24小时温湿度数据制作温湿度报表...效果预热:【源码地址】Github:https://github.c

【DHT11模块获取温湿度】

DHT11硬件接口

DHT11有三个IO接口,一个VCC(正极)接3.3v,一个GND接GND,剩下一个DATA接树莓派的任意一个GPIO。在设备上有印刷的字体标明了引脚,可以根据指示接到树莓派上。

两种模板类型。如果这些预定义的脚手架模板不能满足我们的需求,我们还可以创建自定义的Project或者Item模板,至于自定义模板该如何定义,有兴趣的读者朋友可以参考.NETCore官方文档。自定义模板

使用开源类库Adafruit_DHT获取温湿度

读取温度和湿度我们可以使用已经封装好的开源库:Adafruit_DHT

的时候,我们也可以直接指定启动程序集的路径(dotnetbinDebug

etcoreapp3.0helloworld.dll)。[ASP.NETCore3框架揭秘]跨平台开发体验:Windows[上

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,内容如下:

置文件SmartHome.ini放在项目根目录即可。内容如下:[MySql]connectionstring=1host=192.168.0.1port=3306user=prodpasswd=123

# 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 读写配置文件,内容如下:

息采集脚本就一直在工作中了,每小时会采集一次温湿度,并存储到数据库表中。【注意事项】树莓派中默认安装的python版本是2.7,我们的代码是采用python3编写的,可能有不兼容的情况,需要重新安装p

# 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 放在项目根目录即可。内容如下:

式执行命令行“dotnetnew--list”列出当前安装的脚手架模板。上图列出的就是NETCoreSDK安装后提供的预定义的脚手架模板,这些模板大致分为ProjectTemp

[MySql]

connectionstring = 1

host = 192.168.0.1

port = 3306

user = prod

passwd = 123456xxx

数据库表结构:

很明显helloworld.exe是一个可以直接运行的可执行文件,而helloworld.dll仅仅是一个单纯的动态链接库,需要借助命令行dotnet.exe才能执行。如图5所示,当我们在项目目录下执

/*

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远程连接到树莓派的终端

OT=""#getconfigurationconfig=configparser.ConfigParser()config.read(RASPBERRY_PI_PATH_ROOT+&

通过FTP将我们的项目上传到树莓派服务器

们通过SSH远程连接到树莓派的终端通过FTP将我们的项目上传到树莓派服务器采用后台进程的方式运行我们的主脚本(关闭终端进程不会退出)nohuppythonSmartHomeScreen.py这样我们的

采用后台进程的方式运行我们的主脚本(关闭终端进程不会退出)

下。如果查看编译的输出目录,我们会发现两个同名(“helloworld”)的文件,一个是helloworld.dll,另一个是helloworld.exe,后者在尺寸上会大很多

nohup python SmartHomeScreen.py

这样我们的信息采集脚本就一直在工作中了,每小时会采集一次温湿度,并存储到数据库表中。

据写入mysqlifhasWriteToDbHour==timenow.hour:_thread.start_new_thread(WriteToDb,(timenow,timenow.year,ti

【注意事项】

树莓派中默认安装的python版本是2.7,我们的代码是采用python3编写的,可能有不兼容的情况,需要重新安装python3.6以上版本

我们的GPIO类库是不能在没有GPIO支持的设备上调试的,也就是说在windows本地调试毫无意义,并且安装GPIO的包会出现各种问题,建议直接将代码复制到树莓派调试,无需在本地调试

【总结】

通过本节内容,我们实现了利用树莓派的GPIO和DHT11温湿度采集模块24小时实时采集环境中的温湿度,并且持久化到了MySql中,作为我们后续监控面板和监控报表的基础数据。

样也是个跨平台的IDE,我们可以同时在Windows、MaxOSX以及各种桌面版本的LinuxDistribution上使用它。不过这不是一款免费的IDE,对它感兴趣的朋友可以在官方站点载30天试用版

后续章节我们会介绍利用我们采集的24小时温湿度数据制作温湿度报表... 效果预热:

,它可以在无需任何修改的情况下直接编译和运行。针对.NETCore应用的编译和运行同样是利用这个dotnet.exe命令行来完成的。如下图所示,在进入当前项目所在目录之后,我们执行dotnetbuil

【源码地址】

dht11 python mysql,自己动手实现智能家居之温湿度数据采集存储(DHT11,MySql)相关推荐

  1. dht11 python mysql_自己动手实现智能家居之温湿度数据采集存储(DHT11,MySql)

    [前言] 一个热爱技术的人一定向往有一个科技感十足的环境吧,那何不亲自实践一下属于技术人的座右铭:"技术改变世界". 就让我们一步步动手搭建一个属于自己的"智能家居平台& ...

  2. 《动手搭建智能家居系统》——2.5 遥控设备

    本节书摘来异步社区<动手搭建智能家居系统>一书中的第2章,第2.5节,作者: [德]Othmar Kyas,更多章节内容可以访问云栖社区"异步社区"公众号查看 2.5 ...

  3. 基于python的智能家居系统_基于Python Django的可扩展智能家居系统

    基于 Python Django 的可扩展智能家居系统 龚 鸣,余杨志,邓宏涛 * [摘 要] 针对现阶段智能家居系统智能化迭代开发的需求,分析当前智能家居 系统主控的相关实现技术,提出了基于 Pyt ...

  4. 智能家居之温湿度传感器

    智能家居之温湿度传感器 前言 一.DHT11 二.步骤 1.初始化 2.数据读取配置 – 前言 此模块用于智能家居项目中 项目中含有模块: 温湿度传感器 光照强度传感器 ONENET-MQTT服务器 ...

  5. 自己动手做智能家居之:智能空调控制

    阅读本文需要 2 分钟. 夏天天气非常热的时候整晚吹空调经常会吹得整个人都不舒服,早上起来很疲惫,达不到轻松睡眠的效果.空调吹久了还是会感觉到冷,定时功能不能完全满足需求,半夜醒来开了关,关了开实在是 ...

  6. mysql报文格式_GitHub - YMBo/sflow_traffic: python解析报文(支持格式sflow、gre等)并存储到mysql...

    sflow_traffic python解析sflow或TCP报文(多种格式)并存储到mysql,可多个机器部署 说明 sflowtool version: 5.02 Python version 2 ...

  7. ios php mysql实例_php – 从iOS应用程序将图像存储到MYSQL数据库中

    我正在使用MYSQL数据库从我的iOS应用程序中存储图像.我使用base64encoding和解码技术来存储图像. 问题: 它将名称存储在数据库中作为字符串即可.但它不是将图像存储在htdocs文件夹 ...

  8. 基于Arduino的智能家居系统【ESP8266WIFI模块 DHT11温湿度模块 继电器 加湿模块 APP远程控制 数据上传机智云】

  9. esp8266数据上传到mysql数据库_03-STM32+ESP8266+AIR202/302终端管理篇-把设备温湿度数据存储到MySQL数据库(Windows)...

    前言 这一节把设备通过MQTT上报的数据写入MySQL数据库. 注:关于MySQL数据库的安装和基本使用请用户参考基础开源教程学习! 说明 此节代码使用的 IntelliJ IDEA 软件编写. 整个 ...

最新文章

  1. 共识算法的比较:Casper vs Tendermint
  2. maven可选依赖(Optional Dependencies)和依赖排除(Dependency Exclusions)
  3. Java字符编码的转化问题
  4. 学习笔记7-C语言-进制转换、原返补、位运算、函数
  5. 多元样条函数及其应用_B样条算法(B-spline)
  6. 样本期望的期望 总体期望_您所在领域的人才期望开放
  7. 无人机集群定位与编队方式研究总结(最详细的鸟群模型分析)
  8. notepad++下的字体设置
  9. 32位单片机应用场合_全球首款基于 RISC-V 的 32 位通用单片机出现
  10. vue项目引入sass
  11. 数电-汽车尾灯控制电路设计
  12. java jsp 乱码_JSP中文乱码问题
  13. Win7+vmware+xpsp3+vs2010驱动开发环境搭建及调试方法
  14. 安卓防盗软件_Android勒索软件分析
  15. Xcode8 官方下载地址
  16. 烽火超微信息科技 服务器,智算升级 烽火超微发布新一代V6服务器
  17. 强化学习算法TRPO之共轭梯度优化
  18. 电商平台-会员积分系统的设计与架构
  19. QQ昵称字段 特殊字符的数据库存储
  20. Unit Of Measure UOM in Oracle Applications Inventory

热门文章

  1. RouterOS建立PPPOE服务器
  2. Flutter(一):用BottomNavigationBar实现常规的底部导航
  3. 在koa中想要优雅的发送响应?看这就对了
  4. windows 下xampp集成环境安装mongodb扩展
  5. Centos下源码安装git
  6. JAVA的abstract修饰符 接口interface用法 抽象类和interface的差别
  7. effective java读书笔记5:避免创建不必要的对象
  8. SQL Server 重置SA密码语句
  9. 抓包工具tcpdump及分析工具wireshark
  10. 容斥原理学习(Hdu 4135,Hdu 1796)