Nota
Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Approfondisci le tue conoscenze di Raspberry Pi, Arduino ed ESP32 con altri appassionati.
Perché unirti a noi?
Supporto esperto: Risolvi i problemi post-vendita e le sfide tecniche con l’aiuto della nostra comunità e del nostro team.
Impara e condividi: Scambia consigli e tutorial per migliorare le tue competenze.
Anteprime esclusive: Ottieni accesso anticipato a nuovi annunci di prodotti e anteprime esclusive.
Sconti speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
Promozioni e omaggi festivi: Partecipa a omaggi e promozioni speciali durante le festività.
👉 Sei pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi stesso!
4.1.5 Campanello intelligente con videocamera
Introduzione
In questo progetto, creiamo un campanello intelligente con videocamera fai-da-te.
Componenti necessari
In questo progetto, avremo bisogno dei seguenti componenti.
È sicuramente conveniente acquistare un kit completo, ecco il link:
Nome |
ELEMENTI IN QUESTO KIT |
LINK |
|---|---|---|
Kit Raphael |
337 |
Puoi anche acquistarli separatamente dai link sottostanti.
INTRODUZIONE AI COMPONENTI |
LINK PER L’ACQUISTO |
|---|---|
- |
|
Schema elettrico
T-Board Name |
physical |
wiringPi |
BCM |
GPIO27 |
Pin 13 |
2 |
27 |
Procedura sperimentale
Passo 1: Costruisci il circuito.
Prima di iniziare questo progetto, assicurati di aver completato 3.1.3 Modulo Audio e 3.1.2 Modulo Video.
Passo 2: Accedi alla cartella del codice.
cd ~/raphael-kit/python/
Passo 3: Esegui.
python3 4.1.5_DoorBell.py
Dopo l’esecuzione del programma:
Il sistema attende che venga premuto il pulsante del campanello.
Quando il pulsante viene premuto, viene riprodotto il suono del campanello e viene registrato un video di 5 secondi.
Il video viene salvato come
visitor.mp4nella directory home dell’utente.Il sistema ritorna quindi in modalità standby in attesa della successiva pressione del pulsante.
Premere
Ctrl+Cper uscire dal programma e liberare correttamente tutte le risorse.
Codice
Nota
Puoi Modificare/Resettare/Copiare/Eseguire/Fermare il codice qui sotto. Ma prima di farlo, devi accedere al percorso del codice sorgente come raphael-kit/python. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l’effetto.
#!/usr/bin/env python3
import time
import os
import RPi.GPIO as GPIO
from pygame import mixer
from picamera2 import Picamera2, Preview
from picamera2.encoders import H264Encoder
from picamera2.outputs import FfmpegOutput
# --------------------------------------------------
# USER DIRECTORY
# --------------------------------------------------
user = os.getlogin()
user_home = os.path.expanduser(f"~{user}")
# --------------------------------------------------
# CAMERA SETUP (Picamera2)
# --------------------------------------------------
camera = Picamera2()
# Create a video configuration WITHOUT the deprecated "video=" argument
video_config = camera.create_video_configuration(
main={"size": (1280, 720), "format": "XBGR8888"}
)
camera.configure(video_config)
# Create H264 encoder (10 Mbps is good quality for doorbell)
encoder = H264Encoder(bitrate=10_000_000)
# --------------------------------------------------
# GPIO SETUP
# --------------------------------------------------
BtnPin = 18
status = False
def setup():
GPIO.setmode(GPIO.BCM)
GPIO.setup(BtnPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
mixer.init()
def button_pressed(pin):
"""Button callback"""
global status
status = True
# --------------------------------------------------
# MAIN LOOP
# --------------------------------------------------
def main():
global status
GPIO.add_event_detect(BtnPin, GPIO.FALLING,
callback=button_pressed, bouncetime=250)
print("Doorbell system running... Press the button to record.")
while True:
if status:
print("Visitor detected!")
# Play doorbell sound
mixer.music.load(f"{user_home}/raphael-kit/music/doorbell.wav")
mixer.music.set_volume(0.7)
mixer.music.play()
# Use QTGL preview
camera.start_preview(Preview.QTGL)
# Output file
output_path = f"{user_home}/visitor.mp4"
output = FfmpegOutput(output_path)
# Start recording
camera.start_recording(encoder, output)
print(f"Recording video to {output_path}")
time.sleep(5) # Record for 5 seconds
# Stop everything
mixer.music.stop()
camera.stop_recording()
camera.stop_preview()
print("Recording finished.\n")
status = False
time.sleep(0.05)
# --------------------------------------------------
# CLEAN EXIT
# --------------------------------------------------
def destroy():
print("\nExiting...")
mixer.quit()
GPIO.cleanup()
camera.close()
print("Program exited cleanly.")
if __name__ == "__main__":
setup()
try:
main()
except KeyboardInterrupt:
destroy()
Spiegazione del Codice
Recupera la directory home dell’utente corrente per salvare il video registrato.
user = os.getlogin() user_home = os.path.expanduser(f"~{user}")
Crea un’istanza di Picamera2 e la configura per la registrazione video.
camera = Picamera2() video_config = camera.create_video_configuration( main={"size": (1280, 720), "format": "XBGR8888"} ) camera.configure(video_config)
Configura il pulsante su
GPIO18come ingresso con resistenza di pull-up.GPIO.setmode(GPIO.BCM) GPIO.setup(BtnPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
Carica e inizializza il mixer audio utilizzato per riprodurre il suono del campanello.
mixer.init()
Registra una callback che imposta
statussuTruequando il pulsante viene premuto.GPIO.add_event_detect(BtnPin, GPIO.FALLING, callback=button_pressed, bouncetime=250)
Riproduce il suono del campanello, avvia la finestra di anteprima e inizia la registrazione video.
mixer.music.load(f"{user_home}/raphael-kit/music/doorbell.wav") mixer.music.play() camera.start_preview(Preview.QTGL) camera.start_recording(encoder, output)
Registra un video di 5 secondi e lo salva come
visitor.mp4.time.sleep(5) camera.stop_recording() camera.stop_preview()
Ripristina tutte le risorse quando il programma viene interrotto con
Ctrl+C.mixer.quit() GPIO.cleanup() camera.close()