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.

../_images/3.1.19components.png

Il est très pratique d’acheter un kit complet, voici le lien :

Nom

ARTICLES DANS CE KIT

LIEN

Kit Raphael

337

Raphael Kit

Vous pouvez également les acheter séparément via les liens ci-dessous.

INTRODUCTION DES COMPOSANTS

LIEN D’ACHAT

Carte d’extension GPIO

ACHETER

Plaque d’expérimentation (Breadboard)

ACHETER

Fils de Liaison

ACHETER

Résistance

ACHETER

Bouton

ACHETER

Module Audio et Haut-parleur

-

Module de Caméra

ACHETER

Schéma de Connexion

Nom T-Board

physique

wiringPi

BCM

GPIO27

Pin 13

2

27

../_images/3.1.19_schematic.png

Procédures Expérimentales

Étape 1 : Construisez le circuit.

../_images/3.1.19fritzing.png

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.mp4 dans 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+C pour 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

  1. 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}")
    
  2. 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)
    
  3. Configure le bouton GPIO sur GPIO18 comme 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)
    
  4. Charge et initialise le mélangeur audio utilisé pour jouer le son de la sonnette.

    mixer.init()
    
  5. Enregistre une fonction de rappel (callback) qui définit status à True lorsque le bouton est pressé.

    GPIO.add_event_detect(BtnPin, GPIO.FALLING,
                          callback=button_pressed, bouncetime=250)
    
  6. 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)
    
  7. Enregistre une vidéo de 5 secondes et l’enregistre sous le nom visitor.mp4.

    time.sleep(5)
    camera.stop_recording()
    camera.stop_preview()
    
  8. Nettoie toutes les ressources lorsque le programme est arrêté avec Ctrl+C.

    mixer.quit()
    GPIO.cleanup()
    camera.close()
    

Photo du Phénomène

../_images/4.1.5door_bell.JPG