Raspberry Pi Zero W GPIO-Steuerung

2022-09-13

Dieser Artikel stellt die GPIO-Steuerung vonRaspberry Pi Zero W, und verwendet LED, um den Effekt zu sehen.

0.1 Himbeer-PiGPIO-Nummerierungsmethode
Funktion Physikalischer Pin
Von links nach rechts, von oben nach unten: links ungerade, rechts gerade: 1-40

raspberry pi

  • BCM
    Die Nummerierung konzentriert sich auf die CPU-Register, entsprechend der GPIO-Registernummerierung des BCM2835.

    VerdrahtungPi
    Die Nummerierung konzentriert sich auf die Implementierungslogik, und die erweiterten GPIO-Ports sind ab 0 nummeriert, was für die Programmierung praktisch ist. Wie in der WiringPi-Spalte gezeigt.

raspberry pi zero w

Beim Betrieb von GPIO müssen Sie zunächst wissen, welche Zahlengruppe verwendet werden soll.

1. Vorbereiten
1.1 Hardware
Raspberry Pi Zero W
LED (3mm oder 5mm)
1KΩ Widerstand
3 Dupont-Drähte
Computer (ich benutze Windows 7)

1.2 GPIO-Schnittstelle

raspberry pi 3

1.3 Verkabelung
Zuerst verbinden wir die LED mit dem Raspberry Pi. Der Pluspol der LED wird mit einem 1KΩ Widerstand in Reihe zum GPIO18 (Pin12) des Raspberry Pi geschaltet, der Minuspol wird geerdet. (Beachten Sie, dass ich unten ein Bild von anderen ausgeliehen habe. Auf dem Bild ist der positive Pol der LED mit Pin11 verbunden, und wir sind mit Pin12 verbunden.)

raspberry pi

2. Testen
2.1 PC und Pi Zero W verbinden
Verwenden Sie Putty, um den Computer und den Pi Zero W zu verbinden, siehe Referenzdokument am Ende dieses Artikels. Geben Sie raspberrypi.local für Hostname, Port 22, Benutzername pi und Passwort raspberry ein.

Hinweis: In der Boot-Partition befindet sich eine leere Textdatei namens ssh. Diese SSH-Datei kann leicht verloren gehen. Wenn ssh nicht angemeldet werden kann, überprüfen Sie zuerst, ob ssh verloren gegangen ist.

2.2 GPIO direkt mit Shell-Befehlen steuern
Setzen Sie GPIO18 vom Kernel-Space zum User-Space frei
pi@raspberrypi:~ $ sudo echo 18 > /sys/class/gpio/export

> ist das IO-Umleitungssymbol. IO-Umleitung bezieht sich auf das Ändern des Standardgeräts der Linux-Standardeingabe und -ausgabe, sodass es auf ein benutzerdefiniertes Gerät zeigt. echo 18 > export soll 18 in die exportdatei schreiben.

Nach Durchführung dieses Vorgangs wird ein gpio18-Ordner zum /sys/class/gpio-Verzeichnis hinzugefügt.

Zeigen Sie den GPIO18-Pin an (in Liunx hat das Gerät die Form einer Datei und der Pin ist auch ein Gerät)

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

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

raspberry pi

  • Stellen Sie GPIO18 auf Ausgabemodus
    pi@raspberrypi:/sys/class/gpio/gpio18 $ sudo echo out > direction

    Tragen Sie 1 in die Wertedatei ein, der GPIO gibt einen High-Pegel aus und die LED leuchtet
    pi@raspberrypi:/sys/class/gpio/gpio18 $ sudo echo 1 > value

    Geben Sie 0 in die Wertedatei ein, der GPIO-Ausgang ist niedrig und die LED ist aus
    pi@raspberrypi:/sys/class/gpio/gpio18 $ sudo echo 0 > value

    zurück zum Home-Verzeichnis
    pi@raspberrypi:/sys/class/gpio $ cd ~

    Melden Sie sich von der GPIO18-Schnittstelle ab
    pi@raspberrypi:~ $ sudo echo 18 > /sys/class/gpio/unexport

    2.3 GPIO mit Shell-Skript steuern
    Erstellen Sie ein neues Skript namens ledonoff.sh.
    pi@raspberrypi:~ $ sudo nano ledonoff.sh

    Das Skript schreibt folgendes:

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

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

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

    sleep 5 # Verzögerung 5 Sekunden

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

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

    Hinweis: Das Shell-Skript kann Parameter übergeben, beispielsweise steht $1 für den ersten Parameter, $2 für den zweiten Parameter und so weiter.

    Ausführbare Berechtigung für ledonoff.sh hinzufügen
    pi@raspberrypi:~ $ sudo chmod +x ledonoff.sh

    Skript ausführen
    pi@raspberrypi:~ $ sudo ./ledonoff.sh 18

    Ergebnis der Operation: LED ist ein und aus für 5 Sekunden.

    2.4 Verwendung von Python zur Steuerung von GPIO über den PRI.GPIO-Befehl
    Der bequemste Weg, GPIO mit Python zu steuern, ist die Verwendung einer Python-Klassenbibliothek, wie z. B. RPi.GPIO, die in die integriert istRaspberry Pi-Systemselbst.

    Geben Sie den Befehl im SSH-Terminal von Putty ein:

    Rufen Sie die interaktive Python-Schnittstelle auf
    pi@raspberrypi:~ $python

    >>> Dies ist die Python-Eingabeaufforderung.

    Importieren Sie die Python-Klassenbibliothek RPi.GPIO mit dem Namen und Alias ​​GPIO
    >>> RPi.GPIO als GPIO importieren

    Nach der Einführung können Sie die Funktionen des GPIO-Moduls nutzen.

    Legen Sie die BOARD-Codierungsmethode basierend auf BCM fest
    Himbeer-Pi 3GPIO ist in die folgenden drei Codierungsmethoden unterteilt: Physical Pin BOARD-Codierung, BCM-Codierung und WiringPi-Codierung.

    >>> GPIO.setmode(GPIO.BCM)

    Ausgabemodus
    >>> GPIO.setup(18,GPIO.OUT)

    GPIO18 gibt High-Pegel aus, die LED leuchtet
    >>> GPIO.Ausgang (18,GPIO.HIGH)

    GPIO18-Ausgang Low-Pegel, LED aus
    >>> GPIO.Ausgang (18,GPIO.LOW)

    Nach Gebrauch aufräumen
    >>> GPIO.cleanup()

    Beenden Sie die Python-Oberfläche
    >>> Strg+D

    2.5 GPIO mit Python-Skript steuern
    Erstellen Sie ein neues Skript namens blinky.py.
    pi@raspberrypi:~ $ sudo nano blinky.py

    Das Skript schreibt folgendes:

    RPi.GPIO als GPIO importieren

    Importzeit

    GPIO.setmode(GPIO.BCM)

    GPIO.setup(18,GPIO.OUT)

    während wahr:

    GPIO.Ausgang (18,GPIO.HIGH)

    time.sleep(1)

    GPIO.Ausgang (18,GPIO.LOW)

    time.sleep(1)

    GPIO.cleanup()

    Beschreibung: Der Schleifenkörper unten muss eingerückt werden, während True eingerückt werden muss. Verwenden Sie zum Einrücken einfach die Leertaste oder die Tabulatortaste (aber nicht gemischt).

    Ausführbare Berechtigung zu blinky.py hinzufügen
    pi@raspberrypi:~ $ sudo chmod +x blinky.py

    Führen Sie das Python-Skript aus
    pi@raspberrypi:~ $ sudo python blinky.py

    LED blinkt.

    Hör auf zu rennen
    Verwenden Sie Strg+C, um die Schleife zu unterbrechen.

    3. Steuern Sie GPIO in C-Sprache mit wiringPi GPIO
    Der Raspberry Pi-Kernel wurde mit einem eingebauten gpio-Treiber kompiliert. Wir verwenden häufig einige Bibliotheksfunktionen, die von Drittanbietern geschrieben wurden, um bestimmte Vorgänge auszuführen. Die gebräuchlicheren Funktionen der Operationsbibliothek sind:

    Python-GPIO
    Python GPIO wurde in den Raspberry-Pi-Kernel integriert, was in den offiziellen Raspberry-Pi-Informationen empfohlen wird und einfach zu bedienen ist. Python GPIO ist eine kleine Python-Bibliothek, die Benutzern helfen kann, Himbeer-bezogene IO-Port-Operationen abzuschließen, aber die Python-GPIO-Bibliothek unterstützt noch keine Busschnittstellen wie SPI, I2C oder 1-Draht.

    Gängige C-Sprachbibliotheken sind:

    VerdrahtungPi
    WiringPi ist für diejenigen geeignet, die über Grundkenntnisse in der Programmiersprache C verfügen und mit Mikrocontroller- oder Embedded-Entwicklung vertraut waren, bevor sie sich an Raspberry Pi wandten. Die API-Funktion von wiringPi ist arduino sehr ähnlich, was es auch beliebt macht. Der Autor gibt viele Anweisungen und Beispielcodes, die auch UART-Geräte, I2C-Geräte und SPI-Geräte usw. enthalten.

    BCM2835 C-Bibliothek

Die BCM2835-C-Bibliothek kann als verwandte zugrunde liegende Treiber verstanden werden, die in der Sprache C implementiert sind. Die Treiberbibliothek der BCM2835 C-Bibliothek umfasst GPIO, SPI und UART usw. Sie können die BCM2835 C-Bibliothek lernen, um sich mit BCM2835-bezogenen Registeroperationen vertraut zu machen. Wenn Sie die Möglichkeit haben, einen Linux-Treiber auf dem Raspberry Pi zu entwickeln oder Ihren eigenen Python- oder PHP-Erweiterungstreiber zu entwickeln, können Sie in der BCM2835-C-Bibliothek viel „Inspiration“ finden.

3.1 WiringPi GPIO-Installation
WiringPi ist eine GPIO-Steuerungsbibliotheksfunktion, die auf die Raspberry Pi-Plattform angewendet wird. WiringPi entspricht GUN Lv3. wiringPi wird in C oder C++ entwickelt und kann von anderen Sprachen wie Python, Ruby oder PHP paketiert werden.

WiringPi enthält eine Reihe von GPIO-Steuerbefehlen, mit denen die GPIO-Pins des Raspberry Pi gesteuert werden können. Benutzer können gpio-Befehle verwenden, um GPIO-Pins über Shell-Skripte zu steuern oder abzufragen.

WiringPi-Installation
Aktualisierungsliste:

pi@raspberrypi:~ $ sudo apt-get update

Software aktualisieren:

pi@raspberrypi:~ $ sudo apt-get upgrade

Installieren:

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

Prüfung
WiringPi enthält eine Reihe von gpio-Befehlen, mit denen verschiedene Schnittstellen auf dem Raspberry Pi gesteuert werden können. Mit den folgenden Befehlen kann getestet werden, ob wiringPi erfolgreich installiert wurde.

pi@raspberrypi:~ $ gpio -v

raspberry pi zero

  • Sehen Sie sich das GPIO-Diagramm an

pi@raspberrypi:~ $ gpio readall

raspberry pi 3

3.2 Code schreiben
Erstellen Sie ein neues Quellprogramm namens led_blink.c
pi@raspberrypi:~ $ sudo nano led_blink.c

Der Inhalt ist wie folgt
#enthalten

int Haupt(leer) {

VerkabelungPiSetup();

PinMode (1, AUSGANG);

zum(;;) {

digitalWrite (1, HOCH); Verzögerung (500);

digitalWrite (1, NIEDRIG); Verzögerung (500) ;

}

}

Erklärung: Wenn Sie sich das Bild im vorherigen Abschnitt ansehen, ist der GPIO18-Pin der BCM-Nummer 1 in der wiringPi-Nummer.

3.3 Kompilieren und ausführen
kompilieren
pi@raspberrypi:~ $ gcc led_blink.c -o led_blink -l wiringPi

-l wiringPi bedeutet, dass wiringPi die gemeinsam genutzte Bibliothek dynamisch laden.

Lauf
pi@raspberrypi:~ $ sudo ./led_blink

Verwenden Sie Strg+C, um die Schleife zu unterbrechen.

4. Steuern Sie GPIO in C-Sprache mit der BCM2835 C-Bibliothek
4.1 Herunterladen und installieren

raspberry pi zero

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

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

    Zusammenstellung konfigurieren
    Wechseln Sie in das komprimierte Verzeichnis:

    pi@raspberrypi:~ $ cd bcm2835-1.56

    Führen Sie den Konfigurationsbefehl aus:

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

    pi@raspberrypi:~/bcm2835-1.56 $ machen

    Inspektion durchführen
    pi@raspberrypi:~/bcm2835-1.56 $ sudo make check

    Installieren Sie die bcm2835-Bibliothek:
    pi@raspberrypi:~/bcm2835-1.56 $ sudo make install

    4.2 Code schreiben
    Erstellen Sie ein neues Quellprogramm namens blink_led.c
    pi@raspberrypi:~/bcm2835-1.56 $ cd ~

    pi@raspberrypi:~ $ sudo nano blink_led.c

    Der Inhalt ist wie folgt
    #enthalten

    #define PIN RPI_GPIO_P1_12

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

    wenn (!bcm2835_init())

    Rückgabe 1;

    bcm2835_gpio_fsel (PIN, BCM2835_GPIO_FSEL_OUTP);

    während (1) {

    bcm2835_gpio_write (PIN, HOCH);

    bcm2835_delay(500);

    bcm2835_gpio_write (PIN, NIEDRIG);

    bcm2835_delay(500);

    }

    bcm2835_close();

    0 zurückgeben;

    }

    Hinweis: Die Nummerierungsmethode von GPIO ist anders. Die physische Schnittstellennummer der Platine wird verwendet, und die LED wird mit dem 12-Pin der Raspberry Pi Zero W-Platine verbunden.

    4.3 Kompilieren und ausführen
    kompilieren
    pi@raspberrypi:~ $ gcc blink_led.c -o blink_led -l bcm2835

    -l bcm2835 bedeutet, dass die gemeinsam genutzte Bibliothek bcm2835 dynamisch geladen wird

    Lauf
    sudo ./blink_led

    Verwenden Sie Strg+C, um die Schleife zu unterbrechen.