Ich benutze Himbeer-Pi mit Debian Wheezy 18-09-2012 Bild. Ich kann mit dem Wiring Pi Tool auf GPIO-Pins zugreifen. Aber ich würde gerne wissen, ob es eine andere Methode gibt, mit der wir direkt auf GPIO-Pins zugreifen können, ohne Pi zu verdrahten.
Wenn ich den folgenden Befehl auf dem Terminal ausführe
echo 0 >/sys/class/gpio/export
es zeigt
-bash: /sys/class/gpio/export: Permission denied
Gibt es dafür eine Lösung?
Ich habe auch das folgende Skript ausprobiert
#!/bin/sh
echo "4" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio4/direction
while true
do
echo 1 > /sys/class/gpio/gpio4/value
echo 0 > /sys/class/gpio/gpio4/value
done
von hier und ich bekomme den gleichen Fehler.
Ich möchte den Code auf C ausführen, da ich momentan nicht mit Java und Python vertraut bin.
Antworten:
Ja, es gibt mindestens zwei davon:
GPIO-Kernelmodul
Die vollständige Dokumentation dieses Subsystems finden Sie hier (siehe
Sysfs Interface for Userspace
Unterabschnitt). Grundsätzlich exportiert der Kernel einige Dateien in ein/sys/class/gpio/
Verzeichnis. Hier ist ein Beispiel für eine Verwendung (Pin 0 als Eingang verwenden und dann als Ausgang umschalten und auf 1 setzen):Beachten Sie, dass Sie im Normalfall Root-Berechtigungen benötigen, um dies zu tun.
Da all dies nur eine Datei - Operationen ist, kann es leicht mit in C - Programm durchgeführt werden
open()
/read()
/write()
Funktionen. Seien Sie vorsichtig bei der Verwendung vonfopen()
/fread()
/fwrite
Funktionen , da sie mich gepuffert verwenden / O.Register direkt verwenden
Ich glaube, dieser wird von WiringPi selbst verwendet. Es verwendet ein
/dev/mem
Gerät, um auf den physischen RaspberryPi-Speicher zuzugreifen und direkt mit BCM2835-Speicherregistern zu arbeiten. Um es verwenden zu können, müssten Sie das BCM2835-Datenblatt (General Purpose I/O (GPIO)
Abschnitt) lesen . Es ist jedoch nicht so trivial. Beachten Sie, dass Sie dazu Root-Berechtigungen benötigen.Es gibt auch eine weitere C-Bibliothek, die diese Methode verwendet. Sie finden sie hier . Es kann viel mehr als nur GPIO manipulieren, aber da es recht einfach ist, sollte es einfach sein, nur den GPIO-Code zu extrahieren und zu verstehen, wie es funktioniert.
quelle
sudo -i
, Root-Benutzer zu werden, und geben Sie dann die Beispielbefehle ein.ls -l /sys/class/gpio/export
angezeigt? @KrysztofAdamski Können Sie Ihre Antwort bearbeiten bold die Tatsache , dass Sie diese Dateien root Zugriff sein müssen? Ich habe diesen Kommentar in Ihrer Antwort zunächst nicht gesehen.read()
/write()
Funktionen anstelle von gepuffertenfread()
/ zu verwendenfwrite()
. Stellen Sie außerdem sicher, dass Ihr Programm mit Root-Rechten ausgeführt wird.Wenn Sie nicht streng "direkt" meinen, können Sie auch Python oder sogar Java verwenden
quelle
Ich kann mit einer von Chris Stratton vorgeschlagenen Methode auf GPIO-Pins zugreifen.
In der Datei /etc/rc.local füge ich die Befehle hinzu
Echo 17 (GPIO-Pin)> / sys / class / gpio / export
und
chmod 777 -R / sys / class / gpio / gpio17.
Ich kann mein c-Programm ausführen, ohne zuerst sudo -s einzugeben.
Ich danke Ihnen allen, dass Sie mich unterstützen.
quelle
Sie können mit C auf alle Raspberry Pi-Peripheriegeräte (einschließlich GPIO, C, ...) zugreifen, indem Sie in die entsprechenden Register auf dem Pi schreiben.
Ich habe hier ein Tutorial dazu geschrieben: http://www.pieter-jan.com/node/15
Auf diese Weise müssen Sie keine Bibliotheken verwenden, nur Grundkenntnisse von C. Ich hoffe, das hilft!
Wie oben erwähnt, müssen Sie alle Ihre Programme als Sudo-Benutzer ausführen.
quelle