博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【物联网实训项目】------(四)家庭智慧安防系统之智能温控
阅读量:1886 次
发布时间:2019-04-26

本文共 7162 字,大约阅读时间需要 23 分钟。

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 https://github.com/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, 2018, 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 table dht2(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:",temperature  print "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()  conn.commit()  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:",temperature  print "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()  conn.commit()  conn.close()  if temperature > 25:    init()    cabk(30)else:  print('Failed to get reading. Try again!')

 

你可能感兴趣的文章
树莓派“小霸王学习机”来了,一个自带键盘的电脑,售价不到500元
查看>>
为什么LED灯会越用越暗?
查看>>
这100道Linux常见面试题,看看你会多少?
查看>>
为什么你学C++这么难?
查看>>
无人机破巡检难题,秒变电网卫士
查看>>
五年,我成为了一名嵌入式工程师。
查看>>
2020年电赛题目,命题专家们怎么看?
查看>>
PCB元器件摆放不可忽略的10个技巧
查看>>
掌握AI核心技术没有秘籍,能自己创造就是王道
查看>>
大学老师的月薪多少?实话实说:4万多一点……
查看>>
2020年电赛题目,命题专家权威解析!
查看>>
写论文,这个神器不能少!
查看>>
美国无人机在火星首飞成功,创造历史,3米飞行高度悬停30秒
查看>>
缺货涨价很久的MCU的国产和国外厂家汇总!(80家)
查看>>
华为重磅反击,鸿蒙来了!
查看>>
常用电子接口大全,遇到不认识的,就翻出来对照辨认!
查看>>
芯片IC附近为啥要放0.1uF的电容?
查看>>
电赛 | 19年全国一等奖,北航学子回忆录。
查看>>
电赛 | 19年全国一等奖,北航学子回忆录(上)
查看>>
电赛 | 19年全国一等奖,北航学子回忆录(下)
查看>>