Czy istnieje prosta biblioteka do rozmowy z I2C dla C ++? Znalazłem trochę rzeczy dla Pythona i Javy, ale chciałem C ++. Miałem nadzieję, że ktoś przeniósł bibliotekę Arduino Wire, abym mógł użyć kodu, który już napisałem dla Arduino.
12
Odpowiedzi:
W przestrzeni użytkownika Linuksa znajduje się nagłówek i2c-dev. Nie pamiętam, czy ten nagłówek jest dostarczany z pakietem czujników lm, czy też będzie musiał zostać zainstalowany ze źródła. Sprawdziłbym repozytorium paczek twojej dystrybucji. xGoat ma fajny artykuł na temat przygotowania i użytkowania.
Kod źródłowy narzędzi i2c ( pobieranie ) jest dobrym przykładem
C
. Widziałem kilka prostychC++
bibliotek pakujących te funkcje. Poleciłbym stworzyć własną bibliotekę dostosowaną do twoich potrzeb. Inne świetne przykłady można znaleźć na Github, takie jak biblioteka I2CBusźródło
Właśnie zacząłem korzystać z biblioteki pigpio i jestem pod dużym wrażeniem. Szczególnie podoba mi się tryb bit bang, ponieważ pozwala na użycie dowolnych dwóch pinów GPIO jako interfejsu I2C, o ile mają one rezystory pullup. Jeśli używasz PI2, nie ma dużej wady bit banging, ponieważ masz 4 procesory. Dobrą rzeczą w poleceniach bit bang jest to, że pobierają listę bajtów poleceń „adres, zapis, dane, odczyt, start, stop”, aby można było uruchomić wiele operacji we / wy za pomocą jednego wywołania. To jedyna rzecz, którą znalazłem, która niezawodnie uruchamia powtarzające się transakcje uruchamiania, które są wymagane przez wiele urządzeń, które pobierają numer rejestru na początku polecenia odczytu. Biblioteka jest dobrze udokumentowana i łatwa w użyciu.
Poniżej znajduje się program testowy, który odczytuje rejestry temperatury na MAX31785. 4 ustawia adres z następnym bajtem, 2 = start, 7 = zapis, po którym następuje liczba bajtów i bajty danych, 3 = stop, 6 = odczyt, po którym następuje liczba bajtów. Wywołanie zwraca wszystkie odczytane bajty wraz z liczbą bajtów.
źródło
Jak wspomniano przez emcconville, w przestrzeni użytkownika Linuksa (
#include <linux/i2c-dev.h>
) znajduje się nagłówek i2c-dev . Ponadto potrzebujesz urządzenia postaci do odczytu. Można to zrobić, ładując odpowiednie moduły.i2c_bcm2708
dla niskopoziomowego sterownika ii2c-dev
do generowania znaków dla autobusów. Zastosować ...do ładowania ich w locie. Zastosować ...
i odblokuj
i2c_bcm2708
na,/etc/modprobe.d/raspi-blacklist.conf
aby tworzyć/dev/i2c-0
i/dev/i2c-1
wyświetlać się na stałe.Odtąd możesz podążać za wskazówkami, jak sam korzystać z I²C del maestro.
Wolę tę metodę, ponieważ jest ona platformaagnostyczna. Możesz używać także
linux/i2c-dev.h
z innymi urządzeniami, o ile istnieje sterownik I²C. WiringPi jest związany z rPi.pozdrowienia
AKTUALIZACJA:
Ta informacja jest nieaktualna. Sprawdź ten post pod kątem korzystania z drzew urządzeń.
źródło
Istnieje WiringPi, które moim zdaniem robi dokładnie to, czego chcesz. Istnieją również opakowania dla Pascal, Java, Python, Perl, TCL i Ruby. Dodatkowo ktoś może chcieć odkryć podobne linki:
źródło