×

Python+树莓派 是谁在开门?

96
高杆python
2017.10.09 16:00* 字数 561

貌似已经好久没有鼓弄树莓派啦,这么有意思的东西,不能让它就这么吃灰了!
今天要和大家分享一个利用树莓派实现开门监控的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服务便可直接访问到拍摄的照片。

树莓派
Web note ad 1