Jeffrey Cross
Jeffrey Cross

Erste Schritte mit I2C auf BeagleBone Green Wireless

Dieses Mini-Tutorial bezieht sich auf die Verwendung von I2C (Inter-Integrated Circuit) auf der BeagleBone Green Wireless-Karte. Die aktuelle BeagleBone Black Adafruit I2C-Bibliothek weist einige Kompatibilitätsprobleme mit dem BeagleBone Green Wireless (BBGW) auf. Es gibt viel zu wenig Dokumentation über die Verwendung der in der BBGW eingebauten I2C-Bibliothek, der mraa-Bibliothek, und ich hatte das Gefühl, dass ein Posten erforderlich war.

Konfiguration

Wenn Sie eine I2C-Bibliothek auf dem BeagleBone oder Raspberry Pi verwenden, können Sie aus mehreren Bibliotheken auswählen. Sie können die beliebte Adafruit-Bibliothek oder die eingebaute mraa-Bibliothek verwenden. Mit dem BeagleBone- oder Raspberry Pi-Terminal (Linux-Terminal) können Sie den I2C-Bus lesen, ohne die Slave-Adresse des Geräts zu kennen. Dazu verwenden Sie den Befehl "i2cdetect -y -r 0", wobei die Nummer die Gerätenummer auf dem I2C-Bus ist. Um Ihr Gerät zu finden, senden Sie den Befehl erneut mit der inkrementierten Nummer im Terminal, bis Sie die Anzeige im Terminal mit der Register-ID dieses Geräts im Hex-Format finden.

Beispielsweise ist der Beschleunigungsmesser mit der ID 42, nach dem ich suche, der Bus "1" in meiner Anzeige "i2cdetect -y -r 1" im Terminal.

Wie Sie sehen, ist das Register 0x0d das Geräteidentifikationsnummernregister. Wir sehen ein 0x2a-Hex, das in 42 Dezimalzahlen übersetzt wird. Ich weiß also, dass das BeagleBone oder Raspberry Pi dieses Gerät als Bus „1“ in den Befehlen i2cdetect oder i2cdump interpretiert. Dies wird in der mraa-Bibliothek wichtig, die diese Nummer zur Adressierung des Slave-Geräts verwendet. Die Adafruit-Bibliothek benötigt diese Nummer nicht.

Verwenden der Bibliotheken

Wenn Sie ein Python-Programm auf dem BeagleBone oder dem Raspberry Pi schreiben, müssen Sie eine Bibliothek auswählen und nach der Installation importieren. Das BeagleBone Green Wireless verfügt bereits über eine integrierte mraa-Bibliothek, so dass Sie diese nicht wie die Adafruit-Bibliothek installieren müssen. Wenn Sie diese Bibliotheken für die i2c-Kommunikation verwenden, müssen Sie die Adresse einrichten und dann Lese- und Schreibbefehle verwenden. Für die i2c-Bibliothek von mraa verwenden wir den ersten Aufruf, der i2c = mraa.I2c (2, True) ist.

Das heißt, wir weisen dem Gerät am Bus die Variable i2c zu. Die Nummer 2 stammt von dem zuvor erwähnten Befehl i2cdetect. Nachdem wir die Variable "i2c" zugewiesen haben, können Sie sie direkt über die Adresse ansprechen (I2c selbst, uint8_t Adresse) Befehl. Wenn die Geräteadresse im Datenblatt beispielsweise 0x1D ist, schreiben wir die Zeile i2c.address (0x1D), um sie zu initialisieren. Als Nächstes schreiben wir den Zeiger auf Adresse (0x01), um den Zeiger auf dem Gerät zu initialisieren.

Um das Gerät zu konfigurieren, müssen wir Daten in die Register des Geräts schreiben, um das i2c-Gerät selbst einzurichten. Wir schreiben mit der Funktion writeReg () in ein Register. Bei den 2 Parametern in Klammern ist writeReg (Registeradresse, Daten) im Format uint_8. Beim Lesen vom Gerät verwenden wir readReg (), wobei der Parameter 1 in Klammern readReg (Register Address) im Format unit_8 ist. Ein Beispiel ist unten angegeben:

Mraa importieren

i2c = mraa.I2c (2, wahr)

i2c.address (0x1D)

i2c.writeReg (0x01, 0)

i2c.writeReg (0x17,0x08)

deviceID = i2c.readReg (0x0d)

Adafruit

Die Adafruit-Bibliothek erfordert das auf Ihrem Gerät installierte Paket „python-smbus“, um es verwenden zu können. Der erste Aufruf zum Einrichten der Adresse des Geräts, das im Datenblatt aufgeführt ist, lautet i2c = Adafruit_I2C (device_address). Dabei steht "device_address" für den Hex-Wert der Geräteadresse. Anschließend initialisieren wir den Zeiger auf dem Gerät, indem wir das Register 0x01 mit dem Befehl i2c.write8 (register, data) auf 0x00 setzen. Das heißt, wir möchten 8 Bits in ein Register schreiben. Anschließend können Sie die Konfigurationsregister des Geräts mit dem Befehl i2c.write8 () erneut einrichten, wobei das Register und die Daten gefüllt sind. Die Art, wie wir von den meisten Geräten lesen, ist das Lesen von jeweils 8 Bits aus einem Register. Wir setzen eine Variable, der wir die Daten zuweisen möchten. In diesem Fall ist dies die Geräte-ID. Wir verwenden den Befehl i2c.readU8 (register), um vorzeichenlose 8 Bits aus dem Register 0x0d (dem Geräte-ID-Register) zu lesen. Ein Beispiel ist unten angegeben:

von Adafruit_I2C importieren Sie Adafruit_I2C

i2c = Adafruit_I2C (0x1D)

i2c.write8 (0x01,0x00)

i2c.write8 (0x17,0x08)

deviceID = i2c.readU8 (0x0d)

Unterschied in Bibliotheken

In der Adafruit Library muss das Paket python-smbus installiert sein, in der mraa-Library jedoch nicht. In der mraa-Bibliothek müssen Sie die Gerätenummer auf dem Bus mit dem Befehl "i2cdetect" suchen, um die Adresse einzurichten, bevor Sie mit dem Schreiben und Lesen von Registern beginnen. Die Bibliotheken sind in ihrer Syntax ähnlich, unterscheiden sich jedoch im Setup. Die Adafruit-Bibliothek muss auch von einem Drittanbieter installiert werden und ist bei Beaglebone Green Wireless nicht wie bei mraa Standard. Sie können also beim ersten Start den Code schreiben.

Bibliotheksreferenz

mraa:

mraa.I2c (mraa :: I2c selbst, int bus, bool raw = False)

Adresse(I2c selbst, uint8_t Adresse) → mraa :: Ergebnis

lesen(I2c selbst, uint8_t * data) → int

readByte (I2c selbst) → uint8_t

readBytesReg (I2c selbst, uint8_t reg, uint8_t * data)

readReg (I2c selbst, uint8_t reg) → uint8_t

readWordReg (I2c selbst, uint8_t reg) → uint16_t

schreiben(I2c selbst, uint8_t const * data) → mraa :: Ergebnis

writeByte (I2c selbst, uint8_t Daten) → mraa :: Ergebnis

writeReg (I2c selbst, uint8_t reg, uint8_t Daten) → mraa :: Ergebnis

writeWordReg (I2c selbst, uint8_t reg, uint16_t Daten) → mraa :: Ergebnis

(Quelle)

Adafruit:

Klasse Adafruit_I2C

Hier definierte Methoden:

__init __ (selbst, Adresse, busnum = -1, debug = False)

errMsg (selbst)

readList (self, reg, length)

Liest eine Liste von Bytes vom I2C-Gerät

readS16 (selbst, reg)

Liest einen vorzeichenbehafteten 16-Bit-Wert vom I2C-Gerät

readS16Rev (selbst, reg)

Liest einen vorzeichenbehafteten 16-Bit-Wert mit rev-Byte-Reihenfolge vom I2C-Gerät

readS8 (selbst, reg)

Liest ein signiertes Byte vom I2C-Gerät

readU16 (selbst, reg)

Liest einen vorzeichenlosen 16-Bit-Wert vom I2C-Gerät

readU16Rev (selbst, reg)

Liest einen vorzeichenlosen 16-Bit-Wert mit rev-Byte-Reihenfolge vom I2C-Gerät

readU8 (selbst, reg)

Liest ein vorzeichenloses Byte vom I2C-Gerät

reverseByteOrder (self, data)

Kehrt die Byte-Reihenfolge eines int (16-Bit) oder eines langen (32-Bit) Werts um

write16 (self, reg, value)

Schreibt einen 16-Bit-Wert in das angegebene Register- / Adresspaar

write8 (self, reg, value)

Schreibt einen 8-Bit-Wert in das angegebene Register / die angegebene Adresse

writeList (self, reg, list)

Schreibt ein Byte-Array im I2C-Format

(Quelle)

Das ist es ... viel Glück!

Aktie

Leave A Comment