100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 【物联网实训项目】------(四)家庭智慧安防系统之智能温控

【物联网实训项目】------(四)家庭智慧安防系统之智能温控

时间:2022-06-16 12:13:44

相关推荐

【物联网实训项目】------(四)家庭智慧安防系统之智能温控

1.所需材料:

树莓派、面包板、温湿度传感器DHT11、直流电机、风扇、L298N电机驱动模块。

2.树莓派从DHT11温湿度传感器读取数据

(1)DHT11 介绍

DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度+-5%RH, 温度+-2℃,量程湿度20-90%RH, 温度0~50℃。

(2)硬件连接图

(3)具体流程

DHT11的读取需要遵循特定的信号协议完成,为了方便使用Adafruit DHT库。

a.软件安装

sudo apt-get install build-essential python-dev

b.从GitHub获取Adafruit库

sudo git clone /adafruit/Adafruit_Python_DHT.gitcd Adafruit_Python_DHT

c.给python2和python3安装该库

sudo python setup.py installsudo python3 setup.py install

d.书写dht.py程序引入Adafruit库来读取DHT11的数据

import Adafruit_DHT# Set sensor type : Options are DHT11,DHT22 or AM2302sensor=Adafruit_DHT.DHT11# Set GPIO sensor is connected togpio=17# Use read_retry method. This will retry up to 15 times to# get a sensor reading (waiting 2 seconds between each retry).humidity, temperature = Adafruit_DHT.read_retry(sensor, gpio)# Reading the DHT11 is very sensitive to timings and occasionally# the Pi might fail to get a valid reading. So check if readings are valid.if humidity is not None and temperature is not None:print('Temp={0:0.1f}*C Humidity={1:0.1f}%'.format(temperature, humidity))else:print('Failed to get reading. Try again!')

e.运行结果图

3.树莓派从DHT11温湿度传感器读取数据写入到数据库中

(1)在树莓派上安装MySQL数据库

a.安装MySQL

使用管理员权限运行获取最新的MySQL及Python编程接口。

$ sudo apt-get install mysql-server python-mysqldb

安装过程中需要输入root管理员的密码,该密码用于之后访问数据库。

b.登录MySQL

mysql -u root -pEnter password:Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 53Server version: 5.5.60-0+deb8u1 (Raspbian)Copyright (c) 2000, , Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

c.查看当前的数据库

mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema |+--------------------+3 rows in set (0.00 sec)

d.创建一个新的数据库

mysql> CREATE DATABASE jiankong;Query OK, 1 row affected (0.00 sec)

e.在jiankong数据库下创建dht2的表

mysql> use jiankong;Database changedmysql> create tabledht2(id int auto_increment primary key not null, time char(255),temperature int,humidity int);Query OK, 0 rows affected (0.03 sec)

f.查看表是否创建成功。

mysql> describe dht2;+-------------+-----------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-------------+-----------+------+-----+---------+----------------+| id | int(11) | NO | PRI | NULL | auto_increment || time | char(255) | YES | | NULL | || temperature | int(11) | YES | | NULL | || humidity | int(11) | YES | | NULL | |+-------------+-----------+------+-----+---------+----------------+4 rows in set (0.00 sec)

(2)在树莓派上通过python来对mysql数据库进行存储操作

书写测试文件mysql_test.py来测试是否成功

import MySQLdbsql='show databases';conn=MySQLdb.connect(host='localhost',user='root',passwd='root',db='jiankong',port=3306)cur=conn.cursor(cur.execute(sql)print cur.fetchone()

测试成功结果图

(3)将树莓派读取到的温湿度信息写入到我们mysql数据库,对dht.py文件进行修改

#coding: utf8import Adafruit_DHTimport MySQLdb import datetime#引入gpio的模块import RPi.GPIO as GPIOimport time# Set sensor type : Options are DHT11,DHT22 or AM2302sensor=Adafruit_DHT.DHT11# Set GPIO sensor is connected togpio=4dt=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") # Use read_retry method. This will retry up to 15 times to# get a sensor reading (waiting 2 seconds between each retry).humidity, temperature = Adafruit_DHT.read_retry(sensor, gpio)# Reading the DHT11 is very sensitive to timings and occasionally# the Pi might fail to get a valid reading. So check if readings are valid.if humidity is not None and temperature is not None:print('Temp={0:0.1f}*C Humidity={1:0.1f}%'.format(temperature, humidity))print "temperature:",temperatureprint "humidity:",humidity conn=MySQLdb.connect(host='localhost',port=3306,user='root',passwd='root',db='jiankong',)sql="insert into dht2(time,temperature,humidity) values('%s','%d','%d')"%(dt,temperature,humidity)cur=conn.cursor()cur.execute(sql)cur.close()mit()conn.close()else:print('Failed to get reading. Try again!')

查看一下数据表dht2中的数据

4.树莓派结合L298N模块驱动直流电机

(1)L298N模块的介绍

接口说明:INT1、INT2、INT3、INT4分别接了树莓派的GPIO13、GPIO15、GPIO16、GPIO18。+5V接树莓派5V,GND接地。

(2)Python代码:

#!/usr/bin/python#coding: utf8#引入gpio的模块import RPi.GPIO as GPIOimport time#设置GPIO模式GPIO.setmode(GPIO.BOARD)#设置in1到in4接口IN1 = 13IN2 = 15IN3 = 16IN4 = 18#初始化接口def init():GPIO.setup(IN1,GPIO.OUT)GPIO.setup(IN2,GPIO.OUT)GPIO.setup(IN3,GPIO.OUT)GPIO.setup(IN4,GPIO.OUT)#前进的代码def qianjin(sleep_time):GPIO.output(IN1,GPIO.HIGH)GPIO.output(IN2,GPIO.LOW)GPIO.output(IN3,GPIO.HIGH)GPIO.output(IN4,GPIO.LOW)time.sleep(sleep_time)GPIO.cleanup()#后退def cabk(sleep_time):GPIO.output(IN1,GPIO.LOW)GPIO.output(IN2,GPIO.HIGH)GPIO.output(IN3,GPIO.LOW)GPIO.output(IN4,GPIO.HIGH)time.sleep(sleep_time)GPIO.cleanup()#左转def left(sleep_time):GPIO.output(IN1,False)GPIO.output(IN2,False)GPIO.output(IN3,GPIO.HIGH)GPIO.output(IN4,GPIO.LOW)time.sleep(sleep_time)GPIO.cleanup()#右转def right(sleep_time):GPIO.output(IN1,GPIO.HIGH)GPIO.output(IN2,GPIO.LOW)GPIO.output(IN3,False)GPIO.output(IN4,False)time.sleep(sleep_time)GPIO.cleanup()init()#调用初始化方法初始化接口cabk(10)#调用后退方法,并且10秒后停止

运行该程序,直流电机可运行10s。

5.树莓派智能调温综合

对dhp.py程序进行修改,使其测温度、湿度的时候,如果温度超过25℃,会自启动风扇降温。

#coding: utf8import Adafruit_DHTimport MySQLdb import datetime#引入gpio的模块import RPi.GPIO as GPIOimport time# Set sensor type : Options are DHT11,DHT22 or AM2302sensor=Adafruit_DHT.DHT11# Set GPIO sensor is connected togpio=4dt=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") #设置GPIO模式GPIO.setmode(GPIO.BOARD)#设置in1到in4接口IN1 = 13IN2 = 15IN3 = 16IN4 = 18#初始化接口def init():GPIO.setup(IN1,GPIO.OUT)GPIO.setup(IN2,GPIO.OUT)GPIO.setup(IN3,GPIO.OUT)GPIO.setup(IN4,GPIO.OUT)#后退def cabk(sleep_time):GPIO.output(IN1,GPIO.LOW)GPIO.output(IN2,GPIO.HIGH)GPIO.output(IN3,GPIO.LOW)GPIO.output(IN4,GPIO.HIGH)time.sleep(sleep_time)GPIO.cleanup()# Use read_retry method. This will retry up to 15 times to# get a sensor reading (waiting 2 seconds between each retry).humidity, temperature = Adafruit_DHT.read_retry(sensor, gpio)# Reading the DHT11 is very sensitive to timings and occasionally# the Pi might fail to get a valid reading. So check if readings are valid.if humidity is not None and temperature is not None:print('Temp={0:0.1f}*C Humidity={1:0.1f}%'.format(temperature, humidity))print "temperature:",temperatureprint "humidity:",humidity conn=MySQLdb.connect(host='localhost',port=3306,user='root',passwd='root',db='jiankong',)sql="insert into dht2(time,temperature,humidity) values('%s','%d','%d')"%(dt,temperature,humidity)cur=conn.cursor()cur.execute(sql)cur.close()mit()conn.close()if temperature > 25:init()cabk(30)else:print('Failed to get reading. Try again!')

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。