#!/usr/bin/python #-*- coding: utf-8 -*- import pygame import pygame.camera import time import signal import RPi.GPIO as GPIO from pygame.locals import * from ftplib import FTP ON=1 OFF=0 # I/O Pin connected to PIN#16, BCM code pin number is 23 and wPi pin number is 4 infrared_pin=16 # I/O Pin connected to PIN#12, which can set be PWM mode buzzer_pin=12 # I/O Pin connected to PIN#18, BCM code pin number is 24 and wPi pin number is 5 relay_pin=18 capture_times=2 local_image="rpi_capture.jpg" def turn_relay(cmd): if OFF == cmd: print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) +" turn relay off"); GPIO.output(relay_pin, GPIO.LOW) else: GPIO.output(relay_pin, GPIO.HIGH) print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) +" turn relay on"); def sig_proc(signum, frame): print("Catch stop signal and program exit now...") GPIO.cleanup() exit() def alarm_handler(signum, frame): turn_relay(OFF) signal.signal(signal.SIGALRM, alarm_handler) signal.signal(signal.SIGINT, sig_proc) signal.signal(signal.SIGTERM, sig_proc) def module_int(): #Raspberry Python GPIO Initialise GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) # Initialise infrared GPIO port GPIO.setup(infrared_pin, GPIO.IN) # Initialise relay GPIO port GPIO.setup(relay_pin, GPIO.OUT) # Initialise camera library pygame.init() pygame.camera.init() def turn_buzzer_on(): GPIO.setup(buzzer_pin, GPIO.OUT) p = GPIO.PWM(buzzer_pin, 2800) #p.ChangeFrequency(2800) #p.ChangeDutyCycle(50); p.start(50) time.sleep(1.5) p.stop() GPIO.setup(buzzer_pin, GPIO.IN) def ftp_connect(host, username, password): ftp = FTP() ftp.connect(host, 21) ftp.login(username, password) return ftp def upload_file(ftp, remotepath, localpath): bufsize = 1024 fp = open(localpath, 'rb') ftp.storbinary('STOR '+ remotepath , fp, bufsize) fp.close() def detect_handler(channel): print( time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) + " Someone is closing on!") #turn_buzzer_on() turn_relay(ON) signal.alarm(30) camera = pygame.camera.Camera("/dev/video0",(1024,768)) camera.start() time.sleep(3) for i in range(capture_times): #print("start camera capture image times [%d]" % (i+1)); image = camera.get_image() pygame.image.save(image, local_image) #print("Start FTP upload image file"); remote_image="StudioCapture_"+time.strftime('%Y%m%d_%H%M%S',time.localtime(time.time()))+".jpg" ftp = ftp_connect("master.iot-yun.com", "raspberry", "raspberry@pi") upload_file(ftp, remote_image, local_image) ftp.quit() print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) +" camere capture and ftp upload done"); time.sleep(2) camera.stop() if __name__ == "__main__": module_int() GPIO.add_event_detect(infrared_pin, GPIO.RISING, detect_handler) while True: if GPIO.input(infrared_pin) == False: print time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" No one nearby!" time.sleep(1);