Controllo GPIO Raspberry Pi Zero W

2022-09-13

Questo articolo introduce il controllo GPIO diRaspberry Pi Zero We usa il LED per vedere l'effetto.

0.1 Lampone PiMetodo di numerazione GPIO
Pin fisico della funzione
Da sinistra a destra, dall'alto in basso: sinistra dispari, destra pari: 1-40

raspberry pi

  • BCM
    La numerazione si concentra sui registri della CPU, in base alla numerazione dei registri GPIO del BCM2835.

    cablaggioPi
    La numerazione si concentra sulla logica di implementazione e le porte GPIO estese sono numerate da 0, il che è conveniente per la programmazione. Come mostrato nella colonna WiringPi.

raspberry pi zero w

Quando si utilizza GPIO, è necessario prima sapere quale set di numeri utilizzare.

1. Prepararsi
1.1 Hardware
Raspberry Pi Zero W
LED (3 mm o 5 mm)
Resistenza da 1KΩ
3 fili Dupont
Computer (io uso Windows 7)

1.2 Interfaccia GPIO

raspberry pi 3

1.3 Cablaggio
Per prima cosa colleghiamo il LED al Raspberry Pi. Il polo positivo del LED è collegato in serie con un resistore da 1KΩ al GPIO18 (pin12) del Raspberry Pi e il polo negativo è collegato a terra. (Nota che ho preso in prestito un'immagine da altri di seguito. Nella foto, il polo positivo del LED è collegato al pin11 e noi siamo collegati al pin12)

raspberry pi

2. Prova
2.1 Collega PC e Pi Zero W
Usa stucco per collegare il computer e Pi Zero W, vedi il documento di riferimento alla fine di questo articolo. Inserisci raspberrypi.local per Nome host, porta 22, nome utente pi e password raspberry.

Nota: nella partizione di avvio è presente un file di testo vuoto denominato ssh. Questo file ssh è facile da perdere. Se non è possibile accedere a ssh, verifica prima se ssh è perso.

2.2 Controllare GPIO direttamente con i comandi Shell
Esponi GPIO18 dallo spazio del kernel allo spazio utente
pi@raspberrypi:~ $ sudo echo 18 > /sys/class/gpio/export

> è il simbolo di reindirizzamento IO. Il reindirizzamento IO si riferisce alla modifica del dispositivo predefinito di input e output standard di Linux in modo che punti a un dispositivo definito dall'utente. echo 18 > export è scrivere 18 nel file di esportazione.

Dopo aver eseguito questa operazione, verrà aggiunta una cartella gpio18 alla directory /sys/class/gpio.

Visualizza il pin GPIO18 (in Liunx, il dispositivo ha la forma di un file e anche il pin è un dispositivo)

pi@raspberrypi:~ $ cd /sys/class/gpio/gpio18

pi@raspberrypi:/sys/class/gpio/gpio18 $ ls

raspberry pi

  • Imposta GPIO18 in modalità di uscita
    pi@raspberrypi:/sys/class/gpio/gpio18 $ sudo echo out > direzione

    Immettere 1 nel file del valore, il GPIO emette un livello alto e il LED si accende
    pi@raspberrypi:/sys/class/gpio/gpio18 $ sudo echo 1 > valore

    Immettere 0 nel file del valore, l'uscita GPIO è bassa e il LED è spento
    pi@raspberrypi:/sys/class/gpio/gpio18 $ sudo echo 0 > valore

    torna alla home directory
    pi@raspberrypi:/sys/class/gpio $ cd ~

    Disconnettersi dall'interfaccia GPIO18
    pi@raspberrypi:~ $ sudo echo 18 > /sys/class/gpio/unexport

    2.3 Controllo di GPIO con lo script della shell
    Crea un nuovo script chiamato ledonoff.sh.
    pi@raspberrypi:~ $ sudo nano ledonoff.sh

    Lo script scrive quanto segue:

    echo $1 > /sys/class/gpio/export

    echo out > /sys/class/gpio/gpio$1/direction

    echo 1 > /sys/class/gpio/gpio$1/valore

    sonno 5 # ritardo 5 secondi

    echo 0 > /sys/class/gpio/gpio$1/valore

    echo $1 > /sys/class/gpio/unexport

    Nota: lo script della shell può passare parametri, ad esempio, $1 rappresenta il primo parametro, $2 rappresenta il secondo parametro e così via.

    Aggiungi il permesso eseguibile per ledonoff.sh
    pi@raspberrypi:~ $ sudo chmod +x ledonoff.sh

    eseguire lo script
    pi@raspberrypi:~ $ sudo ./ledonoff.sh 18

    Risultato dell'operazione: il LED si accende e si spegne per 5 secondi.

    2.4 Utilizzo di Python per controllare GPIO tramite il comando PRI.GPIO
    Il modo più conveniente per controllare GPIO con Python è utilizzare una libreria di classi Python, come RPi.GPIO integrata nelSistema Raspberry Pisi.

    Immettere il comando nel terminale ssh di putty:

    Accedi all'interfaccia interattiva di Python
    pi@raspberrypi:~ $ pitone

    >>> Questo è il prompt di Python.

    Importa la libreria di classi Python RPi.GPIO, denominata e alias GPIO
    >>> importa RPi.GPIO come GPIO

    Dopo l'introduzione, puoi utilizzare le funzioni del modulo GPIO.

    Imposta il metodo di codifica BOARD, basato su BCM
    Lampone Pi 3GPIO è suddiviso nei seguenti tre metodi di codifica: codifica pin fisica BOARD, codifica BCM e codifica wirePi.

    >>> GPIO.setmode(GPIO.BCM)

    modalità di uscita
    >>> GPIO.setup(18,GPIO.OUT)

    GPIO18 emette un livello alto, il LED si accende
    >>> GPIO.output(18,GPIO.HIGH)

    Livello basso dell'uscita GPIO18, LED spento
    >>> GPIO.output(18,GPIO.LOW)

    Pulisci dopo l'uso
    >>> GPIO.cleanup()

    Esci dall'interfaccia Python
    >>> CTRL+D

    2.5 Controllo GPIO con script Python
    Crea un nuovo script chiamato blinky.py.
    pi@raspberrypi:~ $ sudo nano blinky.py

    Lo script scrive quanto segue:

    importa RPi.GPIO come GPIO

    tempo di importazione

    GPIO.setmode(GPIO.BCM)

    GPIO.setup(18,GPIO.OUT)

    mentre Vero:

    GPIO.output(18,GPIO.HIGH)

    tempo.sonno(1)

    GPIO.output(18,GPIO.LOW)

    tempo.sonno(1)

    GPIO.cleanup()

    Descrizione: il corpo del ciclo in basso mentre True deve essere rientrato, basta usare i tasti spazio o Tab (ma non misti) per indentare.

    Aggiungi l'autorizzazione eseguibile a blinky.py
    pi@raspberrypi:~ $ sudo chmod +x blinky.py

    Esegui lo script Python
    pi@raspberrypi:~ $ sudo python blinky.py

    Il LED lampeggia.

    Smetti di correre
    Usa Ctrl+C per interrompere il ciclo.

    3. Controlla GPIO in linguaggio C con cablaggioPi GPIO
    Il kernel Raspberry Pi è stato compilato con un driver gpio integrato. Usiamo spesso alcune funzioni di libreria scritte da terze parti per completare operazioni specifiche. Le funzioni della libreria delle operazioni più comuni sono:

    Python GPIO
    Python GPIO è stato integrato nel kernel Raspberry Pi, consigliato nelle informazioni ufficiali di Raspberry Pi e facile da usare. python GPIO è una piccola libreria python che può aiutare gli utenti a completare le operazioni della porta IO relative a raspberry, ma la libreria python GPIO non supporta ancora interfacce bus come SPI, I2C o 1-wire.

    Le librerie di linguaggio C comuni sono:

    cablaggioPi
    cablaggioPi è adatto a coloro che hanno una base nel linguaggio C e sono stati esposti a microcontroller o sviluppo embedded prima di contattare Raspberry Pi. La funzione API di cablaggioPi è molto simile ad arduino, il che lo rende anche popolare. L'autore fornisce molte istruzioni e codici di esempio, che includono anche dispositivi UART, dispositivi I2C e dispositivi SPI, ecc.

    Libreria BCM2835 C

La libreria C BCM2835 può essere intesa come driver sottostanti correlati implementati in linguaggio C. La libreria dei driver della libreria C BCM2835 include GPIO, SPI e UART, ecc. Puoi imparare la libreria C BCM2835 per familiarizzare con le operazioni di registro relative a BCM2835. Se hai l'opportunità di sviluppare un driver Linux su Raspberry Pi, o sviluppare il tuo driver di estensione Python o PHP, puoi trovare molta "ispirazione" dalla libreria C BCM2835.

3.1 Installazione di WiringPi GPIO
WiringPi è una funzione di libreria di controllo GPIO applicata alla piattaforma Raspberry Pi. WiringPi è conforme a GUN Lv3. cablaggioPi è sviluppato in C o C++ e può essere impacchettato da altri linguaggi come python, ruby ​​o PHP.

cablaggioPi include una serie di comandi di controllo gpio, che possono essere utilizzati per controllare i pin GPIO del Raspberry Pi. Gli utenti possono utilizzare i comandi gpio per controllare o eseguire query sui pin GPIO tramite script di shell.

installazione di cablaggioPi
elenco di aggiornamento:

pi@raspberrypi:~ $ sudo apt-get update

Aggiornamento software:

pi@raspberrypi:~ $ sudo apt-get upgrade

Installare:

pi@raspberrypi:~ $ sudo apt-get install wiringpi

test
cablaggioPi include una serie di comandi gpio, che possono essere utilizzati per controllare varie interfacce sul Raspberry Pi. I seguenti comandi possono essere utilizzati per verificare se il cablaggioPi è installato correttamente.

pi@raspberrypi:~ $ gpio -v

raspberry pi zero

  • Visualizza il diagramma GPIO

pi@raspberrypi:~ $ gpio readall

raspberry pi 3

3.2 Scrittura del codice
Crea un nuovo programma sorgente chiamato led_blink.c
pi@raspberrypi:~ $ sudo nano led_blink.c

Il contenuto è il seguente
#includere

int principale (vuoto) {

cablaggioPiSetup();

pinMode (1, USCITA);

per(;;) {

digitalWrite(1, HIGH); ritardo(500);

digitalWrite(1, LOW); ritardo (500) ;

}

}

Spiegazione: Guardando l'immagine nella sezione precedente, il pin GPIO18 del numero BCM è 1 nel numero cablaggioPi.

3.3 Compilare ed eseguire
compilare
pi@raspberrypi:~ $ gcc led_blink.c -o led_blink -l cablaggioPi

-l wirePi significa caricare dinamicamente la libreria condivisa wirelingPi.

correre
pi@raspberrypi:~ $ sudo ./led_blink

Usa Ctrl+C per interrompere il ciclo.

4. Controllare GPIO in linguaggio C con la libreria C BCM2835
4.1 Scarica e installa

raspberry pi zero

  • scarica bcm2835-1.56.tar.gz
    pi@raspberrypi:~ $ wget //www.airspayce.com/mikem/bcm2835/bcm2835-1.56.tar.gz

    decomprimere
    pi@raspberrypi:~ $ tar xvzf bcm2835-1.56.tar.gz

    configurare la compilazione
    Vai alla directory compressa:

    pi@raspberrypi:~ $ cd bcm2835-1.56

    Esegui il comando di configurazione:

    pi@raspberrypi:~/bcm2835-1.56 $ ./configure

    pi@raspberrypi:~/bcm2835-1.56 $ make

    eseguire l'ispezione
    pi@raspberrypi:~/bcm2835-1.56 $ sudo make check

    Installa la libreria bcm2835:
    pi@raspberrypi:~/bcm2835-1.56 $ sudo make install

    4.2 Scrittura del codice
    Crea un nuovo programma sorgente chiamato blink_led.c
    pi@raspberrypi:~/bcm2835-1.56 $ cd ~

    pi@raspberrypi:~ $ sudo nano blink_led.c

    Il contenuto è il seguente
    #includere

    #definisci PIN RPI_GPIO_P1_12

    int main(int argc, char **argv) {

    se (!bcm2835_init())

    ritorno 1;

    bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP);

    mentre (1) {

    bcm2835_gpio_write(PIN, ALTO);

    bcm2835_delay(500);

    bcm2835_gpio_write(PIN, BASSO);

    bcm2835_delay(500);

    }

    bcm2835_close();

    restituire 0;

    }

    Nota: il metodo di numerazione di GPIO è diverso. Viene utilizzato il numero di interfaccia fisica della scheda PCB e il led è collegato ai 12 pin della scheda Raspberry Pi Zero W.

    4.3 Compilare ed eseguire
    compilare
    pi@raspberrypi:~ $ gcc blink_led.c -o blink_led -l bcm2835

    -l bcm2835 significa caricare dinamicamente la libreria condivisa bcm2835

    correre
    sudo ./blink_led

    Usa Ctrl+C per interrompere il ciclo.