.. note::
Ciao, benvenuto nella Community di SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Approfondisci il mondo di Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.
**Perché unirti a noi?**
- **Supporto Tecnico Esperto**: Risolvi problemi post-vendita e 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 agli annunci di nuovi prodotti e alle anteprime.
- **Sconti Speciali**: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
- **Promozioni Festive e Giveaway**: Partecipa a giveaway e promozioni durante le festività.
👉 Sei pronto a esplorare e creare con noi? Clicca [|link_sf_facebook|] e unisciti oggi stesso!
.. _2.1.1_py_pi5:
2.1.1 Pulsante
==================
Introduzione
--------------------
In questo progetto, impareremo come accendere o spegnere il LED utilizzando un pulsante.
Componenti Necessari
------------------------------
Per questo progetto, avremo bisogno dei seguenti componenti.
.. image:: ../python_pi5/img/2.1.1_Button_list.png
È decisamente conveniente acquistare un kit completo, ecco il link:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Nome
- COMPONENTI NEL KIT
- LINK
* - Raphael Kit
- 337
- |link_Raphael_kit|
Puoi anche acquistarli separatamente dai link sottostanti.
.. list-table::
:widths: 30 20
:header-rows: 1
* - INTRODUZIONE AI COMPONENTI
- LINK D'ACQUISTO
* - :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|
Schema Elettrico
---------------------
Utilizza un pulsante normalmente aperto come input per Raspberry Pi, la connessione è mostrata nello schema elettrico qui sotto. Quando il pulsante viene premuto, il GPIO18 passerà ad un livello alto (3,3V). Possiamo rilevare lo stato del GPIO18 tramite la programmazione. Cioè, se il GPIO18 passa ad un livello alto, significa che il pulsante è stato premuto. Puoi eseguire il codice corrispondente quando il pulsante viene premuto e poi il LED si accenderà.
.. note::
Il pin più lungo del LED è l'anodo e quello più corto è il catodo.
.. image:: ../python_pi5/img/2.1.1_Button_schematic_1.png
.. image:: ../python_pi5/img/2.1.1_Button_schematic_2.png
Procedure Sperimentali
----------------------------
**Passo 1:** Costruisci il circuito.
.. image:: ../python_pi5/img/2.1.1_Button_circuit.png
**Passo 2:** Apri il file del codice.
.. raw:: html
.. code-block::
cd ~/raphael-kit/python-pi5
**Passo 3:** Esegui il codice.
.. raw:: html
.. code-block::
sudo python3 2.1.1_Button_zero.py
Ora, premi il pulsante e il LED si accenderà; rilascia il pulsante e il LED si spegnerà.
.. warning::
Se viene visualizzato l'errore ``RuntimeError: Cannot determine SOC peripheral base address``, fare riferimento a :ref:`faq_soc`.
**Code**
.. note::
Puoi **Modificare/Resettare/Copiare/Eseguire/Fermare** il codice qui sotto. Ma prima, devi andare nella directory del codice come ``raphael-kit/python-pi5``. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l'effetto.
.. raw:: html
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import LED, Button # Importa le classi LED e Button da gpiozero
from signal import pause # Importa la funzione pause dal modulo signal
# Inizializza un oggetto LED sul pin GPIO 17
led = LED(17)
# Inizializza un oggetto Button sul pin GPIO 18
button = Button(18)
# Collega l'evento "when_pressed" del pulsante al metodo on() del LED
button.when_pressed = led.on
# Collega l'evento "when_released" del pulsante al metodo off() del LED
button.when_released = led.off
# Esegui un ciclo di eventi che attende eventi del pulsante e mantiene attivo lo script
pause()
**Spiegazione del Codice**
#. Lo script è scritto in Python3 e importa le classi ``LED`` e ``Button`` dalla libreria ``gpiozero``, e ``pause`` dal modulo ``signal``.
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import LED, Button # Importa le classi LED e Button da gpiozero
from signal import pause # Importa la funzione pause dal modulo signal
#. Inizializza un oggetto ``LED`` sul pin GPIO 17 e un oggetto ``Button`` sul pin GPIO 18.
.. code-block:: python
# Inizializza un oggetto LED sul pin GPIO 17
led = LED(17)
# Inizializza un oggetto Button sul pin GPIO 18
button = Button(18)
#. Configura i gestori di eventi in modo che il LED si accenda quando il pulsante viene premuto e si spenga quando viene rilasciato.
.. code-block:: python
# Collega l'evento "when_pressed" del pulsante al metodo on() del LED
button.when_pressed = led.on
# Collega l'evento "when_released" del pulsante al metodo off() del LED
button.when_released = led.off
#. Questo mantiene lo script attivo in un ciclo di eventi, in attesa degli eventi di pressione e rilascio del pulsante.
.. code-block:: python
# Esegui un ciclo di eventi che attende eventi del pulsante e mantiene attivo lo script
pause()