Note
Bonjour et bienvenue dans la Communauté Facebook des passionnés de Raspberry Pi, Arduino et ESP32 de SunFounder ! Plongez plus profondément dans l’univers des Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.
Pourquoi rejoindre ?
Support d’experts : Résolvez les problèmes après-vente et les défis techniques avec l’aide de notre communauté et de notre équipe.
Apprendre et partager : Échangez des astuces et des tutoriels pour améliorer vos compétences.
Aperçus exclusifs : Accédez en avant-première aux annonces de nouveaux produits et aux aperçus.
Réductions spéciales : Profitez de réductions exclusives sur nos produits les plus récents.
Promotions festives et cadeaux : Participez à des cadeaux et des promotions de vacances.
👉 Prêt à explorer et à créer avec nous ? Cliquez [Ici] et rejoignez-nous aujourd’hui !
4.1.5 Sonnette Visuelle Intelligente
Introduction
Dans ce projet, nous allons fabriquer une sonnette visuelle intelligente DIY.
Composants Nécessaires
Pour ce projet, nous avons besoin des composants suivants.
Il est très pratique d’acheter un kit complet, voici le lien :
Nom |
ARTICLES DANS CE KIT |
LIEN |
|---|---|---|
Kit Raphael |
337 |
Vous pouvez également les acheter séparément via les liens ci-dessous.
INTRODUCTION DES COMPOSANTS |
LIEN D’ACHAT |
|---|---|
- |
|
Schéma de Connexion
Nom T-Board |
physique |
wiringPi |
BCM |
GPIO27 |
Pin 13 |
2 |
27 |
Procédures Expérimentales
Étape 1 : Construisez le circuit.
Avant ce projet, vous devez vous assurer d’avoir terminé 3.1.3 Module Audio et 3.1.2 Module Vidéo.
Étape 2 : Allez dans le dossier du code.
cd ~/raphael-kit/python/
Étape 3 : Exécutez.
python3 4.1.5_DoorBell.py
Après l’exécution du code :
Le programme attend que le bouton de la sonnette soit pressé.
Lorsqu’il est pressé, un son de sonnette est joué et une vidéo de 5 secondes est enregistrée.
La vidéo est sauvegardée sous
visitor.mp4dans le répertoire personnel de l’utilisateur.Le système revient ensuite en mode veille en attendant la prochaine pression du bouton.
Appuyez sur
Ctrl+Cpour quitter et libérer les ressources.
Code
Note
Vous pouvez Modifier/Réinitialiser/Copier/Exécuter/Arrêter le code ci-dessous. Mais avant cela, vous devez aller dans le chemin du code source comme raphael-kit/python. Après avoir modifié le code, vous pouvez l’exécuter directement pour voir l’effet.
#!/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()
Explication du code
Récupère le répertoire personnel de l’utilisateur actuel pour y enregistrer la vidéo.
user = os.getlogin() user_home = os.path.expanduser(f"~{user}")
Crée une instance de Picamera2 et la configure pour l’enregistrement vidéo.
camera = Picamera2() video_config = camera.create_video_configuration( main={"size": (1280, 720), "format": "XBGR8888"} ) camera.configure(video_config)
Configure le bouton GPIO sur
GPIO18comme entrée avec une résistance de tirage vers le haut (pull-up).GPIO.setmode(GPIO.BCM) GPIO.setup(BtnPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
Charge et initialise le mélangeur audio utilisé pour jouer le son de la sonnette.
mixer.init()
Enregistre une fonction de rappel (callback) qui définit
statusàTruelorsque le bouton est pressé.GPIO.add_event_detect(BtnPin, GPIO.FALLING, callback=button_pressed, bouncetime=250)
Joue le son de la sonnette, démarre la fenêtre d’aperçu et lance l’enregistrement vidéo.
mixer.music.load(f"{user_home}/raphael-kit/music/doorbell.wav") mixer.music.play() camera.start_preview(Preview.QTGL) camera.start_recording(encoder, output)
Enregistre une vidéo de 5 secondes et l’enregistre sous le nom
visitor.mp4.time.sleep(5) camera.stop_recording() camera.stop_preview()
Nettoie toutes les ressources lorsque le programme est arrêté avec
Ctrl+C.mixer.quit() GPIO.cleanup() camera.close()