Как запустить две PiCameras с двумя PIR-датчиками и отправить видеофайл на электронную почту, используя Raspberry Pi 3B + с мультиплексором arducam - PullRequest
0 голосов
/ 29 января 2019

Изображение

Наш текущий проект предусматривает создание устройства с этими функциями с использованием Rasberry PI 3B +:

1.) Обнаружение движения с помощью двух или более ИК-датчиков

2.) PIR-датчики, запускающие две или более PiCameras на мультиплексоре для записи видео (PIR-датчик 1, соответствующий камере 1 / датчик 2, соответствующий камере 2)

3.) Отправка полученноговидеофайлы на адрес электронной почты.

Следующий код позволяет устройству выполнять эти функции, хотя только с одной камерой и ИК-датчиком без использования мультиплексора:

from gpiozero import MotionSensor
from picamera import PiCamera
from datetime import datetime
from time import sleep
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
import email.encoders
import smtplib
import os
import email
import sys
import time

camera = PiCamera()
pir = MotionSensor(4)
camera.rotation = 180 # delete or adjust to 90, 180, or 270 accordingly
h264_video = ".h264" 
mp4_video = ".mp4" 

while True:

    # record h264 video then save as mp4
    pir.wait_for_motion()
    video_name = datetime.now().strftime("%m-%d-%Y_%H.%M.%S")
    camera.start_recording(video_name + h264_video)
    pir.wait_for_no_motion()
    sleep(5)
    camera.stop_recording()
    os.system("MP4Box -add " + video_name + h264_video + " " + video_name + mp4_video) # tutorial for install to make this conversion possible at: http://raspi.tv/2013/another-way-to-convert-raspberry-pi-camera-h264-output-to-mp4
    os.system("rm " + video_name + h264_video) # delete h264 file
    footage = video_name + mp4_video

    # prepare the email
    f_time = datetime.now().strftime("%A %B %d %Y @ %H:%M:%S")
    msg = MIMEMultipart()
    msg["Subject"] = f_time
    msg["From"] = "your_address@gmail.com"
    msg["To"] = "to_address@gmail.com"
    text = MIMEText("WARNING! Motion Detected!")
    msg.attach(text)

    # attach mp4 video to email
    part = MIMEBase("application", "octet-stream")
    part.set_payload(open(footage, "rb").read())
    email.encoders.encode_base64(part)
    part.add_header("Content-Disposition", "attachment; filename= %s" % os.path.basename(footage))
    msg.attach(part)

    # access Gmail account and send email
    server = smtplib.SMTP("smtp.gmail.com:587")
    server.starttls()
    server.login("jeyessalazar@gmail.com","js04221997")
    server.sendmail("jeyessalazar@gmail.com", "salazarjohnseth@gmail.com", msg.as_string())
    server.quit()

    # delete mp4 from Pi after it has been emailed
    os.system("rm " + footage)

Чтомы хотим перенести эти функции на еще один PIR-датчик и камеру с помощью мультиплексора arducam, всего 2 камеры и 2 PIR-датчика, и отправить два видеофайла с этих двух камер.Тем не менее, с нашим ограниченным знанием Python, как вы можете видеть из нашего кода, в основном вставленного с копией, мы не можем понять, как это сделать, не испортив ничего.Обычно мы пытаемся устранить неполадки, но у нас есть ограниченный период времени для завершения проекта.

Что-то вроде этого:

import os

gp.setwarnings(False)
gp.setmode(gp.BOARD)

gp.setup(7, gp.OUT)
gp.setup(11, gp.OUT)
gp.setup(12, gp.OUT)

gp.setup(15, gp.OUT)
gp.setup(16, gp.OUT)
gp.setup(21, gp.OUT)
gp.setup(22, gp.OUT)

gp.output(11, True)
gp.output(12, True)
gp.output(15, True)
gp.output(16, True)
gp.output(21, True)
gp.output(22, True)

def main():
    gp.output(7, False)
    gp.output(11, False)
    gp.output(12, True)
    capture(1)

    gp.output(7, False)
    gp.output(11, True)
    gp.output(12, False)
    capture(3)

def capture(cam):
    cmd = "raspistill -o capture_%d.jpg" % cam
    os.system(cmd)

if __name__ == "__main__":
    main()

    gp.output(7, False)
    gp.output(11, False)
    gp.output(12, True)

, но с функцией, которая позволяет двум отдельным камерам бытьзапускается двумя датчиками PIR и отправляет полученный видеофайл на указанный адрес электронной почты.Было бы здорово, если бы кто-то мог помочь.Спасибо!

...