貌似已经好久没有鼓弄树莓派啦,这么有意思的东西,不能让它就这么吃灰了!
今天要和大家分享一个利用树莓派实现开门监控的DIY小设备,直接上图。
1.准备材料
1.树莓派(Raspberry Pi 3B)
2.树莓派摄像头
3.电磁感应门控磁条(我用的是常开常闭型)
4.面包板
5.树莓派T型扩展板
2.模块链接说明
将红外感应模块的两条不相邻的链接线(一共三根线)分别链接raspberry pi 3b 的GPIO 针脚2(5V)和针脚23(反过来链接也可以)
3. Python源码(python2.x版本)
之前一直使用python3.x版本写程序的,但是不知道为什么在这块树莓派上安装python3操作mysql数据库模块pymysql一直报错,而在python2环境下安装MySQLdb模块非常顺利,所以在这里改用了python2.7.9进行本次程序的测试。在这里说明一下,因为要记录一下开门和关门的时间和门当前的状态,所以将这些数据存入MySQL数据库,方便统计管理。下面是程序源码。
import RPi.GPIO as GPIO
import MySQLdb
import time
import picamera
def init():
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(23,GPIO.OUT)
def send_data():
cursor.execute("use 数据库名称")
cursor.execute("insert into door_tbl (door_num,zhuangtai) values(%s,%s)",('1号门','打开'))
connect.commit()
#connect.close()
def take_picture():
camera.vflip = True
camera.capture('image.jpg')
if __name__ == '__main__':
camera = picamera.PiCamera()
connect = MySQLdb.connect(
host='MySQL数据库的IP地址',
user='数据库的用户名',
passwd='数据库的密码',
db='使用的数据库名称',
port=3306,
charset='utf8'
)
cursor = connect.cursor()
init()
while True:
if GPIO.input(23) == True:
print "门的状态:关闭"
else:
send_data()
take_picture()
print "门的状态:打开"
time.sleep(3)
GPIO.cleanup()
4.代码分析
首先实例化 树莓派摄像头picamera.PiCamera(),并连接通过MySQLdb库连接MySQL数据库,之后利用while True:循环每隔三秒检测树莓派GPIO23号针脚第电流变化情况,当无电流说明,门控电磁感应模块处于分离状态,门是打开状态,调用send_data()函数,将开门状态和开门时间插入数据库,之后调用take_picture()函数拍摄照片存至python文件的同一目录下。拍摄照片后可以参考之前的文章《Python+树莓派 实现微信拍照、摄相机器人》和《Python+树莓派+人体红外感应模块 实现微信监控》中利用微信机器人将拍摄照片传到制定微信当中,也可以在树莓派段建立web服务便可直接访问到拍摄的照片。