GPIO-Bibliothek für C.

7

Ich möchte die GPIO-Pins auf meinem Raspberry Pi 2 verwenden, aber ich würde Python lieber nicht verwenden, da ich persönlich die Sprache nicht mag. Ich kann jedoch keine Informationen zur Verwendung von C finden, nur Python.

Gibt es eine offizielle C-API? Wenn ja, wo finde ich Tutorials dazu? Wenn nicht, welche Alternativen habe ich?

user112513312
quelle
Dies ist nicht C-spezifisch, aber für die allgemeine Unterstützung der GPIO-Programmiersprache siehe die Liste unter elinux.org/RPi_GPIO_Code_Samples
joan

Antworten:

10

Es gibt keine offizielle Bibliothek

Es gibt mehrere Möglichkeiten. Ich benutze normalerweise http://wiringpi.com . Dies wird für das gpioDienstprogramm verwendet, das in den letzten Raspbian-Versionen enthalten ist.

Joans pigpioBibliothek befindet sich unter https://github.com/joan2937/pigpio und sie hat auch Python-Wrapper. Wenn Sie Sockets oder einen Daemon verwenden möchten, wird dies empfohlen und bietet eine gute Unterstützung für den Hardware- und Bulk-Zugriff auf Pin-Bänke.

Beide haben eine umfangreiche Dokumentation.

Es gibt ein paar andere, aber einige scheinen etwas veraltet zu sein.

Milliways
quelle
2

Sie erwähnen kein Betriebssystem wie Milliways. Ich nehme an, Sie meinen Raspbian oder ein anderes GNU / Linux. Windows IoT wäre separat.

Alle Python-Bibliotheken sind Wrapper für C-Bibliotheken, was nicht ungewöhnlich ist. Das Erstellen der Bibliotheken von Grund auf in etwas anderem als C wäre. Dort sind drei:

Diese gibt es seit mindestens einigen Jahren und werden aktiv gewartet (z. B. war die letzte Version von libbcm2835 vor 3-4 Monaten).

Sie benötigen jedoch keine Bibliothek, je nachdem, was Sie tun möchten. Wie dort erwähnt, gibt es zusätzlich zur sysfs-Schnittstelle für grundlegende Dinge tragbare C-Level-Benutzeroberflächen für I2C und SPI , die Kerneltreiber verwenden. Damit bleibt nur PWM übrig - um auf die Hardwarekanäle zuzugreifen und diese zu verwenden, müssen Sie eine dieser drei Bibliotheken verwenden. Oder, wie Joan in einem Kommentar zu dieser anderen Frage erwähnt, wenn Sie versuchen, sehr schnelle Impulse zu zählen (ich würde in diesem Fall mit einigen Methoden experimentieren).

Ich habe nicht jede Kombination ausprobiert, aber vorausgesetzt, die pi-spezifischen Bibliotheken sind ordnungsgemäß codiert, sollten Sie in der Lage sein, sie mit den tragbaren Schnittstellen zu mischen und abzugleichen (z. B. die reguläre I2C-API und WiringPi für PWM zu verwenden), solange Sie sie verwenden separate Stifte. Dies mag seltsam erscheinen, ist jedoch sinnvoll, wenn Sie mit modularem Code arbeiten und einzelne Teile so portabel wie möglich gestalten möchten. Wenn Sie beispielsweise eine Schnittstelle für einen I2C-Sensor schreiben möchten, basieren Sie auf der Kernel-Treiber-API. Wenn Sie dies in einem Programm mit PWM verwenden möchten, verwenden Sie eine der drei Bibliotheken für PWM. Mit pigpio / wiringPi / libbcm2835 geschriebener Code funktioniert nur auf einem Raspberry Pi. Code, der mit den Kernel-Treiber-APIs geschrieben wurde, funktioniert auf jedem Linux-System.

Goldlöckchen
quelle