Gibt es eine einfache Bibliothek, um mit I2C für C ++ zu sprechen? Ich habe ein paar Sachen für Python und Java gefunden, aber ich wollte C ++. Ich hatte gehofft, dass jemand die Arduino Wire-Bibliothek portiert hat, damit ich Code verwenden kann, den ich bereits für das Arduino geschrieben habe.
12
Antworten:
Es gibt einen i2c-dev-Header im Linux-Benutzerbereich. Ich kann mich nicht erinnern, ob dieser Header im Lieferumfang von lm-sensors enthalten ist oder von der Quelle installiert werden muss. Ich würde das Paket-Repository Ihrer Distribution überprüfen. xGoat hat einen schönen Artikel über die Vorbereitung und Verwendung.
Der Quellcode für i2c-tools ( Download ) ist ein gutes Beispiel in
C
. Ich habe einige einfacheC++
Bibliotheken gesehen, die diese Funktionen umschließen. Ich würde empfehlen, eine eigene Bibliothek zu erstellen, die Ihren Anforderungen entspricht. Andere großartige Beispiele finden Sie auf Github, wie diese I2CBus- Bibliothekquelle
Ich habe gerade angefangen, die Pigpio-Bibliothek zu benutzen und bin sehr beeindruckt. Besonders gut gefällt mir der Bit-Bang-Modus, da hier zwei beliebige GPIO-Pins als I2C-Schnittstelle verwendet werden können, sofern sie Pullup-Widerstände haben. Wenn Sie einen PI2 verwenden, ist Bit Banging nicht sehr nachteilig, da Sie 4 CPUs haben. Das Schöne an den Bit-Bang-Befehlen ist, dass sie eine Liste der Befehlsbytes "Adresse, Schreiben, Daten, Lesen, Starten, Stoppen" aufnehmen, damit Sie mehrere E / As mit einem einzigen Aufruf ausführen können. Es ist das einzige, was ich gefunden habe, das zuverlässig wiederholte Starttransaktionen ausführt, die von vielen Geräten benötigt werden, die zu Beginn eines Lesebefehls eine Registernummer erhalten. Die Bibliothek ist gut dokumentiert und einfach zu bedienen.
Unten finden Sie ein Testprogramm, das die Temperaturregister eines MAX31785 liest. 4 setzt die Adresse mit dem nächsten Byte, 2 = Start, 7 = Schreiben, gefolgt von einer Byteanzahl und Datenbytes, 3 = Stopp, 6 = Lesen, gefolgt von einer Byteanzahl. Der Aufruf gibt alle gelesenen Datenbytes zusammen mit der Anzahl der Bytes zurück.
quelle
Wie von emcconville erwähnt, gibt es im Linux-Userspace (
#include <linux/i2c-dev.h>
) einen i2c-dev-Header . Außerdem benötigen Sie ein Zeichengerät, von dem Sie lesen können. Dies kann durch Laden der richtigen Module erfolgen.i2c_bcm2708
für den Low-Level-Fahrer undi2c-dev
zur Erzeugung des Charakters für die Busse. Anwenden ...zum Laden im laufenden Betrieb. Anwenden ...
und Unblacklist
i2c_bcm2708
in/etc/modprobe.d/raspi-blacklist.conf
zu machen/dev/i2c-0
und/dev/i2c-1
dauerhaft auftauchen.Ab sofort können Sie den Hinweisen zur Verwendung von I²C folgen del maestro selbst .
Ich bevorzuge diese Methode, weil sie plattformunabhängig ist. Sie können verwenden
linux/i2c-dev.h
mit anderen Geräten verwenden, sofern ein I²C-Treiber vorhanden ist. WiringPi ist an das rPi gebunden.Grüße
AKTUALISIEREN:
Diese Informationen sind veraltet. Überprüfen Sie diesen Beitrag für die Verwendung von Gerätebäumen.
quelle
Es gibt einen WiringPi der meiner Meinung nach genau das macht was du willst. Es gibt auch Wrapper für Pascal, Java, Python, Perl, TCL und Ruby. Darüber hinaus möchte möglicherweise jemand ähnliche Links untersuchen:
quelle