Nota

Ciao, benvenuto nella community SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Esplora più a fondo Raspberry Pi, Arduino ed ESP32 con altri appassionati.

Perché unirti?

  • Supporto Esperti: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra comunità e del nostro team.

  • Impara e Condividi: Scambia suggerimenti e tutorial per migliorare le tue abilità.

  • Anteprime Esclusive: Ottieni l’accesso anticipato agli annunci di nuovi prodotti e anticipazioni.

  • Sconti Speciali: Goditi sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni e Giveaway Festivi: Partecipa a concorsi e promozioni per le festività.

👉 Pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi!

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 può produrre una serie di fenomeni interessanti. Ora, mettiti alla prova.

Componenti Necessari

In questo progetto, ci servono i seguenti componenti.

../_images/blinking_led_list.png

È decisamente comodo acquistare un kit completo, ecco il link:

Nome

COMPONENTI IN QUESTO KIT

LINK

Kit Raphael

337

Raphael Kit

Puoi anche acquistarli separatamente dai link sottostanti.

INTRODUZIONE AI COMPONENTI

LINK D’ACQUISTO

Scheda di estensione GPIO

ACQUISTA

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Resistore

ACQUISTA

LED

ACQUISTA

Schema Circuitale

In questo esperimento, collega una resistenza da 220Ω all’anodo (il pin lungo del LED), quindi la resistenza a 3.3 V, e collega il catodo (il pin corto) del LED al GPIO17 del Raspberry Pi. Pertanto, per accendere un LED, dobbiamo impostare il GPIO17 su basso livello (0V). Possiamo ottenere questo fenomeno programmando.

Nota

Pin11 si riferisce all’11° pin del Raspberry Pi da sinistra a destra, e i suoi numeri di pin wiringPi e BCM corrispondenti sono mostrati nella tabella seguente.

Nel contenuto relativo al linguaggio C, rendiamo GPIO0 equivalente a 0 in wiringPi. Tra i contenuti relativi al linguaggio Python, BCM 17 è 17 nella colonna BCM della tabella seguente. Allo stesso tempo, sono uguali all’11° pin sul Raspberry Pi, Pin 11.

Nome T-Board

fisico

wiringPi

BCM

GPIO17

Pin 11

0

17

../_images/image48.png

Procedure Sperimentali

Passo 1: Costruisci il circuito.

../_images/image49.png

Passo 2: Vai nella cartella del codice.

  1. Se utilizzi uno schermo, ti consigliamo di seguire questi passaggi.

Vai su ~/ e trova la cartella raphael-kit.

Trova C nella cartella, fai clic con il tasto destro su di essa e seleziona Apri nel Terminale.

../_images/image50.png

Quindi verrà visualizzata una finestra come mostrato di seguito. Ora sei entrato nel percorso del codice 1.1.1_BlinkingLed.c.

../_images/image51.png

Nei progetti seguenti, useremo il comando per entrare nel file di codice anziché fare clic con il tasto destro. Ma puoi scegliere il metodo che preferisci.

  1. Se accedi al Raspberry Pi da remoto, usa cd per cambiare directory:

cd ~/raphael-kit/c/1.1.1/

Nota

Cambia directory al percorso del codice in questo esperimento tramite cd.

In entrambi i casi, ora sei nella cartella C. Le procedure successive basate su questi due metodi sono le stesse. Andiamo avanti.

Passo 3: Compila il codice

gcc 1.1.1_BlinkingLed.c -o BlinkingLed -lwiringPi

Nota

gcc è la GNU Compiler Collection. Qui, funziona come compilatore del file in linguaggio C 1.1.1_BlinkingLed.c e genera un file eseguibile.

Nel comando, -o significa che stai generando un output (il carattere subito dopo -o è il nome del file di output dopo la compilazione, qui verrà generato un eseguibile chiamato BlinkingLed) e -lwiringPi serve per caricare la libreria wiringPi (l è l’abbreviazione di library).

Passo 4: Esegui il file eseguibile generato nel passaggio precedente.

sudo ./BlinkingLed

Nota

Se non funziona dopo l’esecuzione o compare un errore: "wiringPi.h: Nessun file o directory", fai riferimento a Installa e Controlla wiringPi.

Per controllare il GPIO, devi eseguire il programma con il comando sudo (superuser do). Il comando ./ indica la directory corrente. L’intero comando serve per eseguire il file BlinkingLed nella directory corrente.

Dopo aver eseguito il codice, vedrai il LED lampeggiare.

Se vuoi modificare il file di codice 1.1.1_BlinkingLed.c, interrompi l’esecuzione del codice e poi digita il seguente comando per aprirlo:

nano 1.1.1_BlinkingLed.c

Premi Ctrl+X per uscire. Se hai modificato il codice, verrà visualizzato un prompt che chiede se salvare o meno le modifiche. Digita Y (salva) o N (non salvare). Poi premi Invio per uscire. Ripeti Passo 3 e Passo 4 per vedere l’effetto dopo la modifica.

../_images/image53.png

Codice

Il codice del programma è mostrato di seguito:

#include <wiringPi.h>
#include <stdio.h>
#define LedPin      0
int main(void)
{
   // Se l'inizializzazione di wiring fallisce, stampa il messaggio sullo schermo
   if(wiringPiSetup() == -1){
      printf("setup wiringPi failed !");
      return 1;
   }
   pinMode(LedPin, OUTPUT);// Imposta LedPin come output per scrivere un valore su di esso.
   while(1){
      // Accendi il LED
      digitalWrite(LedPin, LOW);
      printf("...LED on\n");
      delay(500);
      // Spegni il LED
      digitalWrite(LedPin, HIGH);
      printf("LED off...\n");
      delay(500);
   }
   return 0;
}

Spiegazione del Codice

#include <wiringPi.h>

La libreria di driver hardware è progettata per il linguaggio C del Raspberry Pi. L’aggiunta di questa libreria facilita l’inizializzazione dell’hardware e l’output delle porte I/O, PWM, ecc.

#include <stdio.h>

Libreria standard di input/output. La funzione printf utilizzata per stampare i dati visualizzati sullo schermo è realizzata da questa libreria. Ci sono molte altre funzioni che puoi esplorare.

#define LedPin 0

Il pin GPIO17 della T_Extension Board corrisponde al GPIO0 in wiringPi. Assegna GPIO0 a LedPin, LedPin rappresenta GPIO0 nel codice successivo.

if(wiringPiSetup() == -1){
   printf("setup wiringPi failed !");
   return 1;

Questa funzione inizializza wiringPi e presume che il programma chiamante utilizzi lo schema di numerazione dei pin di wiringPi.

Questa funzione deve essere chiamata con privilegi di root. Se l’inizializzazione wiring fallisce, stampa un messaggio sullo schermo. La funzione return viene utilizzata per uscire dalla funzione corrente. Usare return nella funzione main() termina il programma.

pinMode(LedPin, OUTPUT);

Imposta LedPin come output per scrivere un valore su di esso.

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 livello basso. Al contrario, impostando GPIO0 su livello alto, il LED si spegnerà.

printf("...LED off\n");

La funzione printf è una funzione di libreria standard e il suo prototipo di funzione è nel file di intestazione stdio.h.

La forma generale della chiamata è: printf(" stringa di controllo del formato ", colonne della tabella di output). La stringa di controllo del formato viene utilizzata per specificare il formato di output, che è diviso in stringa di formato e stringa non formattata. La stringa di formato inizia con % seguita da caratteri di formato, come %d per l’output di interi decimali. Le stringhe non formattate vengono stampate come prototipi. Qui viene utilizzata una stringa non formattata, seguita da \n che è un carattere di nuova linea, che rappresenta l’interruzione automatica della riga dopo la stampa di una stringa.

delay(500);

Mantiene lo stato corrente ALTO o BASSO per 500ms.

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 l’intero programma molto velocemente e in loop continuo. Quindi abbiamo bisogno della funzione di ritardo per aiutarci a scrivere e debugare il programma.

return 0;

Di solito, viene posizionato alla fine della funzione main, indicando che la funzione restituisce 0 al termine dell’esecuzione.

Immagine del Fenomeno

../_images/image54.jpeg