.. note::
Ciao, benvenuto nella Community di appassionati di SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Approfondisci Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.
**Perché unirti a noi?**
- **Supporto 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 omaggi**: Partecipa a omaggi e promozioni festive.
👉 Pronto a esplorare e creare con noi? Clicca su [|link_sf_facebook|] e unisciti oggi stesso!
.. _1.1.1_c_pi5:
1.1.1 LED Lampeggiante
=========================
Introduzione
-----------------
In questo progetto, impareremo come creare un LED lampeggiante tramite la
programmazione. Attraverso le tue impostazioni, il tuo LED potrà produrre
una serie di fenomeni interessanti. Andiamo, inizia subito!
Componenti necessari
------------------------------
In questo progetto, abbiamo bisogno dei seguenti componenti.
.. image:: ../img/blinking_led_list.png
:width: 800
:align: center
È sicuramente conveniente acquistare un intero kit, ecco il link:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Nome
- COMPONENTI IN QUESTO KIT
- LINK
* - Raphael Kit
- 337
- |link_Raphael_kit|
Puoi anche acquistarli separatamente dai link sottostanti.
.. list-table::
:widths: 30 20
:header-rows: 1
* - INTRODUZIONE COMPONENTI
- LINK PER L'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|
Schema di collegamento
---------------------------
In questo esperimento, collega una resistenza da 220Ω all'anodo
(il pin lungo del LED), poi collega la resistenza a 3.3V, e collega
il catodo (il pin corto) del LED a GPIO17 del Raspberry Pi. Quindi,
per accendere il LED, dobbiamo impostare il livello basso (0V) su GPIO17.
Questo fenomeno può essere ottenuto tramite la programmazione.
.. note::
**Pin11** si riferisce all'11° pin del Raspberry Pi da sinistra a destra,
e i numeri di pin corrispondenti **wiringPi** e **BCM** sono mostrati nella
tabella seguente.
Nel contenuto relativo al linguaggio C, facciamo corrispondere GPIO0 a 0 in wiringPi.
Nel contenuto relativo al linguaggio Python, BCM 17 è 17 nella colonna BCM della tabella
seguente. Allo stesso tempo, essi corrispondono all'11° pin sul Raspberry Pi, Pin 11.
============ ======== ======== ===
T-Board Name physical wiringPi BCM
GPIO17 Pin 11 0 17
============ ======== ======== ===
.. image:: ../img/image48.png
:width: 800
:align: center
Procedure sperimentali
-----------------------------
**Passo 1:** Costruisci il circuito.
.. image:: ../img/image49.png
:width: 800
:align: center
**Passo 2:** Vai alla cartella del codice.
1) Se utilizzi uno schermo, ti consigliamo di seguire i seguenti passaggi.
Vai su **~/** e trova la cartella **raphael-kit**.
Trova **C** nella cartella, fai clic destro su di essa e seleziona **Apri nel Terminale**.
.. image:: ../img/image50.png
:width: 800
:align: center
Apparirà una finestra come mostrato di seguito. Ora sei nel percorso del
codice **1.1.1_BlinkingLed.c** .
.. image:: ../img/image51.png
:width: 800
:align: center
Nei progetti successivi, useremo il comando per entrare nel file di codice
invece di fare clic destro. Ma puoi scegliere il metodo che preferisci.
2) Se accedi al Raspberry Pi da remoto, usa ``cd`` per cambiare directory:
.. raw:: html
.. code-block::
cd ~/raphael-kit/c/1.1.1/
.. note::
Cambia directory nel percorso del codice di questo esperimento tramite cd.
In entrambi i modi, ora ti trovi nella cartella C. Le procedure successive si
basano su questi due metodi e sono le stesse. Andiamo avanti.
**Passo 3:** Compila il codice
.. raw:: html
.. code-block::
gcc 1.1.1_BlinkingLed.c -o BlinkingLed -lwiringPi
.. note::
gcc è la Collezione di Compilatori GNU. Qui, funziona come compilatore del
file C ``1.1.1_BlinkingLed.c`` e produce un file eseguibile.
Nel comando, ``-o`` indica l'output (il carattere subito dopo -o è il nome del
file generato dopo la compilazione, e qui verrà creato un eseguibile chiamato
``BlinkingLed``) e ``-lwiringPi`` serve a caricare la libreria wiringPi (``l`` è
l'abbreviazione di library).
**Passo 4:** Esegui il file eseguibile prodotto nel passaggio precedente.
.. raw:: html
.. code-block::
sudo ./BlinkingLed
.. note::
Se non funziona dopo l'esecuzione o viene visualizzato un errore come: \"wiringPi.h: No such file or directory\", consulta :ref:`install_wiringpi_pi5`.
Per controllare il GPIO, è necessario eseguire il programma utilizzando il
comando ``sudo`` (superuser do). Il comando ``./`` indica la directory corrente.
L'intero comando serve a eseguire ``BlinkingLed`` nella directory corrente.
Dopo l'esecuzione del codice, vedrai il LED lampeggiare.
Se desideri modificare il file di codice ``1.1.1_BlinkingLed.c``, interrompi il
codice e digita il seguente comando per aprirlo:
.. raw:: html
.. code-block::
nano 1.1.1_BlinkingLed.c
Premi ``Ctrl+X`` per uscire. Se hai modificato il codice, apparirà un prompt che
chiederà se salvare o meno le modifiche. Digita ``Y`` (salva) o ``N`` (non salvare).
Quindi premi ``Invio`` per uscire. Ripeti ``Passo 3`` e ``Passo 4`` per vedere l'effetto
dopo la modifica.
.. image:: ../img/image53.png
:width: 800
:align: center
**Codice**
Il codice del programma è mostrato di seguito:
.. code-block:: c
#include
#include
#define LedPin 0
int main(void)
{
// Quando l'inizializzazione di wiring fallisce, stampa un messaggio a schermo
if(wiringPiSetup() == -1){
printf("setup wiringPi failed !");
return 1;
}
pinMode(LedPin, OUTPUT);// Imposta LedPin come uscita per scriverci il valore.
while(1){
// Accensione LED
digitalWrite(LedPin, LOW);
printf("...LED on\n");
delay(500);
// Spegnimento LED
digitalWrite(LedPin, HIGH);
printf("LED off...\n");
delay(500);
}
return 0;
}
**Spiegazione del Codice**
.. code-block:: c
#include
La libreria di driver hardware è progettata per il linguaggio C di Raspberry Pi.
Aggiungere questa libreria facilita l'inizializzazione dell'hardware e l'output
delle porte I/O, PWM, ecc.
.. code-block:: c
#include
Libreria di I/O standard. La funzione printf utilizzata per la stampa dei dati
sullo schermo è realizzata tramite questa libreria. Ci sono molte altre funzioni
utili da esplorare.
.. code-block:: c
#define LedPin 0
Il pin GPIO17 della T_Extension Board corrisponde a GPIO0 in wiringPi. Assegna GPIO0
a LedPin, e LedPin rappresenta GPIO0 nel codice successivo.
.. code-block:: c
if(wiringPiSetup() == -1){
printf("setup wiringPi fallito!");
return 1;
Questa funzione inizializza wiringPi e presume che il programma che la chiama utilizzi
lo schema di numerazione dei pin di wiringPi.
Questa funzione deve essere chiamata con privilegi di root. Se l'inizializzazione di
wiring fallisce, stampa un messaggio a schermo. La funzione ``return`` viene utilizzata
per uscire dalla funzione corrente. Usare return nella funzione ``main()`` termina il programma.
.. code-block:: c
pinMode(LedPin, OUTPUT);
Imposta ``LedPin`` come uscita per scriverci il valore.
.. code-block:: c
digitalWrite(LedPin, LOW);
Imposta GPIO0 a 0V (livello basso). Poiché il catodo del LED è collegato a GPIO0, il LED
si accenderà se GPIO0 è impostato su basso. Al contrario, impostando GPIO0 su livello alto,
il LED si spegnerà.
.. code-block:: c
printf("...LED off\n");
La funzione printf è una funzione della libreria standard e il suo prototipo si trova
nell'header file ``stdio.h``.
La forma generale della chiamata è: ``printf(" stringa di controllo del formato ",
colonne della tabella di output)``. La stringa di controllo del formato è utilizzata
per specificare il formato dell'output, che è suddiviso in stringa formattata e stringa
non formattata. La stringa formattata inizia con ``%`` seguita da caratteri di formato,
come ``%d`` per l'output intero decimale. Le stringhe non formattate vengono stampate
come sono. Qui viene utilizzata una stringa non formattata, seguita da ``\n`` che è un
carattere di nuova riga, che rappresenta il ritorno a capo automatico dopo la stampa
di una stringa.
.. code-block:: c
delay(500);
Mantiene lo stato attuale HIGH o LOW per 500 ms.
Questa è una funzione che sospende il programma per un certo periodo di tempo. E la
velocità del programma è determinata dal nostro hardware. Qui accendiamo o spegniamo
il LED. Se non ci fosse la funzione di ritardo, il programma eseguirebbe molto velocemente
l'intero ciclo in loop continuo. Quindi abbiamo bisogno della funzione di ritardo per
aiutarci a scrivere e testare il programma.
.. code-block:: c
return 0;
Di solito viene posizionato alla fine della funzione principale, indicando che la
funzione restituisce 0 al termine dell'esecuzione con successo.
Immagine del Fenomeno
----------------------------
.. image:: ../img/image54.jpeg
:width: 800
:align: center