Existe-t-il une bibliothèque simple pour parler à I2C pour C ++? J'ai trouvé des trucs pour python et Java, mais je voulais C ++. J'espérais que quelqu'un a porté la bibliothèque Arduino Wire afin que je puisse utiliser le code que j'ai déjà écrit pour l'Arduino.
12
Réponses:
Il y a un en-tête i2c-dev dans l'espace utilisateur Linux. Je ne me souviens pas si cet en-tête est livré avec le paquet lm-sensor, ou s'il devra être installé depuis la source. Je vérifierais le référentiel de packages de votre distribution. xGoat a un bel article couvrant la préparation et l'utilisation.
Le code source des outils i2c ( téléchargement ) en est de bons exemples
C
. J'ai vu quelquesC++
bibliothèques simples encapsuler ces fonctions. Je recommanderais de créer votre propre bibliothèque en fonction de vos besoins. D'autres grands exemples peuvent être trouvés sur Github, comme cette bibliothèque I2CBusla source
Je viens de commencer à utiliser la bibliothèque pigpio et je suis très impressionné. J'aime particulièrement le mode bit bang, car il vous permet d'utiliser deux broches GPIO comme interface I2C, tant qu'elles ont des résistances de rappel. Si vous utilisez un PI2, il n'y a pas beaucoup d'inconvénient à frapper des bits, car vous avez 4 processeurs. La bonne chose à propos des commandes bit bang est qu'elles prennent une liste d'octets de commande "adresse, écriture, données, lecture, démarrage, arrêt" afin que vous puissiez exécuter plusieurs E / S avec un seul appel. C'est la seule chose que j'ai trouvée qui exécute de manière fiable des transactions de démarrage répétées, qui sont requises par de nombreux appareils qui prennent un numéro de registre au début d'une commande de lecture. La bibliothèque est bien documentée et facile à utiliser.
Ci-dessous, un programme de test qui lit les registres de température sur un MAX31785. 4 définit l'adresse avec l'octet suivant, 2 = début, 7 = écriture qui est suivie d'un nombre d'octets et d'octets de données, 3 = arrêt, 6 = lecture qui est suivie d'un nombre d'octets. L'appel renvoie tous les octets de données lus avec le nombre d'octets.
la source
Comme mentionné par emcconville, il existe un en-tête i2c-dev dans l'espace utilisateur Linux (
#include <linux/i2c-dev.h>
). De plus, vous avez besoin d'un périphérique de caractères pour lire. Cela peut être fait en chargeant les modules appropriés.i2c_bcm2708
pour le pilote de bas niveau eti2c-dev
pour générer les décives de caractères pour les bus. Appliquer ...pour les charger à la volée. Appliquer ...
et retirer de la liste
i2c_bcm2708
en/etc/modprobe.d/raspi-blacklist.conf
pour faire/dev/i2c-0
et/dev/i2c-1
montrer en permanence.Vous pouvez désormais suivre les conseils d'utilisation de I²C del maestro lui-même.
Je préfère cette méthode car elle est plateformeagnostique. Vous pouvez également l'utiliser
linux/i2c-dev.h
avec d'autres appareils, tant qu'il existe un pilote I²C. WiringPi est lié au rPi.Cordialement
MISE À JOUR:
Ces informations sont obsolètes. Consultez cet article pour l'utilisation des arborescences d'appareils.
la source
Il y a un WiringPi qui, je pense, fait exactement ce que vous voulez. Il existe également des wrappers pour Pascal, Java, Python, Perl, TCL et Ruby. De plus, quelqu'un pourrait vouloir explorer des liens similaires:
la source