Wie man die digitalen I / O auf einem BeagleBone benutzt

Review PZEM-004T with Arduino ESP32 ESP8266 Python & Raspberry Pi : PDAControl (Kann 2019).

$config[ads_text] not found
Anonim

Wie man die digitalen I / O auf einem BeagleBone benutzt


Nutzen Sie den allgemeinen E / A-Anschluss des Beaglebone Black, um mit dieser leistungsstarken Hardwareplattform zu beginnen!

Empfohlene Stufe

Mittlere

Nur exportieren

Der einfachste Weg, um die Beaglebone I / O zu manipulieren, ist durch die Bash Shell. Warum "hljs"> $ echo 67> / sys / class / gpio / export

Was ist der Sinn dieses Befehls? Unserem Board ist nichts passiert! Nun, das ist nicht ganz richtig - es ist einfach nicht offensichtlich, was vor sich ging. Der Beaglebone ist um einen TI Sitara Prozessor gebaut. Wie die meisten modernen Prozessoren hat die Sitara-Familie eine Menge Pins, um mit der Außenwelt zu kommunizieren. Praktischerweise können die meisten dieser Pins mehrere Funktionen ausführen. Diese Funktionen können sehr einfach sein, wie die GPIO-Funktion, die wir in einer Minute einrichten, oder extrem komplex, wie ein Teil eines PCIe-Busses oder eines SGMII-Netzwerks.

Der einzige Nachteil ist, dass Sie nicht alle Funktionen eines Pins gleichzeitig ausführen können. Stattdessen werden diese Pins in einen Port am internen Bus des Prozessors gemultiplext . Das bedeutet, dass Sie auswählen müssen, welche Funktion der ausgewählte Pin ausführen soll. Der Befehl echo schreibt die Nummer 67 in die Datei '/ sys / class / gpio / export'. Das sagt dem System, dass wir Pin 67 als GPIO auf der Platine verwenden wollen, und dass der Prozessor diese Einstellungen im gesamten System verbreiten sollte. Die genauen Details dazu sind ziemlich kompliziert und außerhalb des Rahmens dieses Artikels. Sie werden feststellen, dass das Verzeichnis / sys / class / gpio / 'nach dem Ausführen dieses Befehls einen zusätzlichen Ordner enthält:

 $ ls /sys/class/gpio export gpio67 gpiochip0 gpiochip32 gpiochip64 gpiochip96 unexport 

Wegbeschreibung verschieben

Als wir diese Datei in die Datei '67' zurückgemeldet haben, haben wir das System angewiesen, die Einstellungen für GPIO_67 zu exportieren. Es reagierte, indem er den Ordner "gpio67" erstellte. Wenn wir den Inhalt untersuchen, erhalten wir folgende Struktur:

 $ ls -al /sys/class/gpio/gpio67 total 0 drwxr-xr-x 3 root root 0 Jan 1 00:14 . drwxr-xr-x 7 root root 0 Jan 1 00:00 .. -rw-r--r-- 1 root root 4096 Jan 1 00:42 active_low -rw-r--r-- 1 root root 4096 Jan 1 00:14 direction -rw-r--r-- 1 root root 4096 Jan 1 00:43 edge drwxr-xr-x 2 root root 0 Jan 1 00:42 power lrwxrwxrwx 1 root root 0 Jan 1 00:41 subsystem -> ../../../../class/gpio -rw-r--r-- 1 root root 4096 Jan 1 00:14 uevent -rw-r--r-- 1 root root 4096 Jan 1 00:20 value 

Code herunterladen

Es gibt zwei Dateien im neuen Ordner, 'gpio67', die für uns besonders interessant sind: Die erste ist die `direction` Datei. Wenn Sie den Befehl `$ cat / sys / class / gpio / gpio67 / direction 'ausführen, sollten Sie diese Ausgabe sehen:

 $ cat /sys/class/gpio/gpio67/direction in 

Wenn Sie mit einem Bare-Metal-Embedded-Prozessor (dh PIC, AVR, HCS08) vertraut sind, haben Sie von einem Register namens Datenrichtungsregister gehört und haben die Erlaubnis, den Rest dieses Absatzes zu überspringen.

Für diejenigen, die bei uns bleiben: Das Datenrichtungsregister bestimmt, auf welche Weise Daten aus einem GPIO-Port fließen können. Es gibt nur zwei Optionen - entweder rein oder raus. Im Allgemeinen beinhaltet das Setzen dieses Registers für einen bestimmten GPIO-Pin das Finden des richtigen Registers, das Finden des richtigen Bits in diesem Register und das Schreiben einer netten kleinen 'und' Anweisung in C, um dieses Bit zu setzen oder zu löschen.

Nicht so für den Beaglebone! Als wir GPIO_67 exportierten, erstellte der Beaglebone diese nette kleine Datei, um das Datenrichtungsregister des Prozessors zu lesen und uns in einem leicht lesbaren Format zurückzugeben. Anstelle eines komplexen Hexadezimalmusters erhalten wir zwei einfache Werte: 'in' oder 'out'. Wie Sie vielleicht aus dem früheren 'cat' Befehl erraten haben, ist der Standardzustand dieses Registers 'in' - es kann Daten auf diesem Pin in den Prozessor einlesen, aber es kann den Zustand von GPIO_67 nicht beeinflussen. Lass uns das ändern, damit wir sehen können, dass der Pin in der realen Welt ausgegeben wird! Wir können das tun, indem wir einen anderen 'echo'-Befehl ausführen und' cat 'verwenden, um zu überprüfen, ob es funktioniert hat:

 $ echo out > /sys/class/gpio/gpio67/direction $ cat /sys/class/gpio/gpio67/direction out 

Genial! Wir haben die Datenrichtung dieser E / A von einem Eingang zu einem Ausgang geändert. Jetzt lass es etwas tun!

Es gibt ein Licht und es geht manchmal aus

Im nächsten Schritt müssen Sie eine wirklich einfache Schaltung mit einem einzelnen 1-kOhm-Widerstand und Ihrer Lieblingsfarbe der LED bauen. Sie müssen einen Pin der LED an Pin 2 des Headers P8 am Beaglebone und das andere Ende an eine beliebige Reihe eines lötfreien Steckboards anschließen. Verbinden Sie einen Pin des Widerstands mit der gleichen Breadboard-Reihe, in die die LED gesteckt wird, und die andere in GPIO_67 - Sie finden dies an Pin 8 des Headers P.

Schaltplan

Führen Sie die folgenden Befehle aus, und wenn alles ordnungsgemäß verbunden ist, wird die LED mit der einen und die andere mit der anderen LED angezeigt.

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

Dies funktioniert genau nach dem gleichen Prinzip wie der letzte Satz von Schreibvorgängen in `/ sys / class / gpio / gpio67 / value` - der einzige Unterschied zwischen Befehlen besteht darin, welcher Wert in jede Datei geschrieben wird. Um eine weitere Parallele zu einfacheren eingebetteten Systemen zu zeichnen, ist die "Wert" -Datei vergleichbar mit einem Port-Datenausgaberegister. Indem Sie eine "1" schreiben, setzen Sie den Pin auf eine Spannung von 3, 3 V. Das Schreiben einer "0" setzt sie auf eine niedrige Spannung und zieht den Stift auf Masse.

Wrapping Up - Ein einfaches Blinkscript

Wir können alle diese Befehle zu einem wirklich einfachen Skript zusammenfassen, um die LED jede halbe Sekunde ein- und auszuschalten:

 #!/bin/bash if ( ! -e /sys/class/gpio/gpio67/value ) then echo 67 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio67/direction fi while ( True ) do echo 1 > /sys/class/gpio/gpio67/value usleep 500000 echo 0 > /sys/class/gpio/gpio67/value usleep 500000 done 

Code herunterladen

Dieses Skript wird für immer ausgeführt. Um es abzubrechen, müssen Sie `Strg + c` drücken, um wieder in ein Linux-Terminal zu gelangen. Sie können es aus dem Auszug oben in Ihr Beaglebone Black kopieren oder mit diesem Repository einen Pull von Git ausführen.

Und da hast du es! Eine einfache Möglichkeit, GPIOs auf einem Beaglebone Black umzuschalten. Wer wusste, dass es so einfach sein könnte?

An was hast du dein GPIO gebunden? Irgendwas Cooles gemacht? Hinterlassen Sie uns einen Kommentar und lassen Sie uns wissen, was Sie mit Ihren Beaglebones lesen!

Gib diesem Projekt einen Versuch für dich selbst! Holen Sie sich die Stückliste.