New file |
| | |
| | | #!/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); |
| | | |