 
.. 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 [|link_sf_facebook|] et rejoignez-nous aujourd'hui !

.. _4.1.1_py:

4.1.1 Appareil photo
============================

Introduction
-----------------

Ici, nous allons fabriquer un appareil photo avec un déclencheur. Lorsque vous appuyez sur le bouton, l'appareil photo prend une photo pendant que la LED clignote.

Composants nécessaires
------------------------------

Dans ce projet, nous avons besoin des composants suivants.

.. image:: ../img/3.1.15camera_list.png
  :width: 800
  :align: center

Il est certainement pratique d'acheter un kit complet, voici le lien :

.. list-table::
    :widths: 20 20 20
    :header-rows: 1

    *   - Nom	
        - ÉLÉMENTS DANS CE KIT
        - LIEN
    *   - Kit Raphael
        - 337
        - |link_Raphael_kit|

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

.. list-table::
    :widths: 30 20
    :header-rows: 1

    *   - INTRODUCTION DES COMPOSANTS
        - LIEN D'ACHAT

    *   - :ref:`cpn_gpio_extension_board`
        - |link_gpio_board_buy|
    *   - :ref:`cpn_breadboard`
        - |link_breadboard_buy|
    *   - :ref:`cpn_wires`
        - |link_wires_buy|
    *   - :ref:`cpn_resistor`
        - |link_resistor_buy|
    *   - :ref:`cpn_led`
        - |link_led_buy|
    *   - :ref:`cpn_button`
        - |link_button_buy|
    *   - :ref:`cpn_camera_module`
        - |link_camera_buy|

Schéma de câblage
-----------------------

============ ======== ======== ===
Nom T-Board  physique wiringPi BCM
GPIO17       Pin 11   0        17
GPIO18       Pin 12   1        18
============ ======== ======== ===

.. image:: ../img/camera_schematic.png
   :width: 500
   :align: center

Procédures expérimentales
------------------------------

**Étape 1 :** Construire le circuit.

.. image:: ../img/3.1.15camera_fritzing.png
  :width: 800
  :align: center

**Étape 2 :** Pour connecter le module caméra et compléter la configuration, veuillez vous référer à : :ref:`cpn_camera_module`.

**Étape 3 :** Accédez au bureau de la Raspberry Pi. Vous aurez peut-être besoin d'un écran pour une meilleure expérience, référez-vous à : `Connect your Raspberry Pi <https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up/3>`_. Ou accédez au bureau de la Raspberry Pi à distance, pour un tutoriel détaillé, veuillez vous référer à : :ref:`remote_desktop`.

**Étape 4 :** Ouvrez un terminal et accédez au dossier du code.

.. raw:: html

   <run></run>

.. code-block::

    cd ~/raphael-kit/python/

**Étape 5 :** Exécutez le code.

.. raw:: html

   <run></run>

.. code-block::

    sudo python3 4.1.1_Camera.py

Après l'exécution du code, appuyez sur le bouton, la Raspberry Pi fera clignoter la LED et prendra une photo. La photo sera nommée ``my_photo.jpg`` et stockée dans le répertoire ``~``.

.. note::

    Vous pouvez également ouvrir ``4.1.1_Camera.py`` dans le chemin ``~/raphael-kit/python/`` avec un IDE Python, cliquer sur le bouton Run pour exécuter et sur le bouton Stop pour arrêter le code.

Si vous souhaitez télécharger la photo sur votre PC, veuillez vous référer à : :ref:`filezilla`.

**Code**

.. note::
    Vous pouvez **Modifier/Réinitialiser/Copier/Exécuter/Arrêter** le code ci-dessous. Mais avant cela, vous devez vous rendre 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.

.. raw:: html

    <run></run>

.. code-block:: python

	#!/usr/bin/env python3

	from picamera import PiCamera
	import RPi.GPIO as GPIO
	import time
    import os
    user = os.getlogin()
    user_home = os.path.expanduser(f'~{user}')


	camera = PiCamera()

	LedPin = 17 # Set GPIO17 as LED pin
	BtnPin = 18 # Set GPIO18 as button pin

	status = False

	def setup():
		GPIO.setmode(GPIO.BCM)
		GPIO.setup(LedPin, GPIO.OUT, initial=GPIO.HIGH)
		GPIO.setup(BtnPin, GPIO.IN)
		camera.start_preview(alpha=200)

	def takePhotos(pin):
		global status
		status = True

	def main():
		global status
		GPIO.add_event_detect(BtnPin, GPIO.FALLING, callback=takePhotos)
		while True:
			if status:
				for i in range(5):
					GPIO.output(LedPin, GPIO.LOW)
					time.sleep(0.1)
					GPIO.output(LedPin, GPIO.HIGH)
					time.sleep(0.1)
				camera.capture(f'{user_home}/my_photo.jpg')
				print ('Take a photo!')          
				status = False
			else:
				GPIO.output(LedPin, GPIO.HIGH)
			time.sleep(1)

	def destroy():
		camera.stop_preview()
		GPIO.output(LedPin, GPIO.HIGH)
		GPIO.cleanup()

	if __name__ == '__main__':
		setup()
		try:
			main()
		except KeyboardInterrupt:
			destroy()

**Explication du Code**


.. code-block:: python

    GPIO.add_event_detect(BtnPin, GPIO.FALLING, callback=takePhotos)

Définir l'événement de ``BtnPin``, lorsque le bouton est pressé (le signal de niveau passe de haut à bas), appeler la fonction ``takePhotos()``.

.. code-block:: python

    def takePhotos(pin):
        global status
        status = True

Lorsque ``takePhotos()`` est appelée, modifier ``status`` à ``True``.

.. code-block:: python

    if status:
        for i in range(5):
            GPIO.output(LedPin, GPIO.LOW)
            time.sleep(0.1)
            GPIO.output(LedPin, GPIO.HIGH)
            time.sleep(0.1)
        camera.capture(f'{user_home}/my_photo.jpg')
        print ('Take a photo!')          
        status = False
    else:
        GPIO.output(LedPin, GPIO.HIGH)
    time.sleep(1)

Lorsque ``status`` est ``True``, la Raspberry Pi fera clignoter la LED et prendra une photo. La photo sera nommée ``my_photo.jpg`` et stockée dans le répertoire ``~``.


Photo du Phénomène
------------------------

.. image:: ../img/4.1.1camera.JPG
   :align: center
