Inhaltsverzeichnis:

Raspberry PI Mehrere I2C-Geräte - Gunook
Raspberry PI Mehrere I2C-Geräte - Gunook

Video: Raspberry PI Mehrere I2C-Geräte - Gunook

Video: Raspberry PI Mehrere I2C-Geräte - Gunook
Video: Connecting Arduino with multiple I2C devices 2024, Juli
Anonim
Raspberry PI Mehrere I2C-Geräte
Raspberry PI Mehrere I2C-Geräte
Raspberry PI Mehrere I2C-Geräte
Raspberry PI Mehrere I2C-Geräte

Frustriert, weil Sie in Ihrem Projekt nicht mehrere gleiche I2C-Geräte verwenden können. Keine Notwendigkeit, langsame Multiplexer zu verwenden. Der neueste Raspbian-Kernel unterstützt die Erstellung mehrerer I2C-Busse mit GPIO-Pins. Diese Lösung ist superschnell.

Schritt 1: Einige Shell-Befehle

Einige Shell-Befehle
Einige Shell-Befehle

Schließen Sie eines Ihrer i2c-Geräte an, während Ihr Raspberry Pi ausgeschaltet ist, starten Sie Ihren Raspberry Pi und führen Sie ihn aus

sudo i2cdetect -y 1

Sie sehen eine Tabelle wie in der beigefügten Abbildung. Ich habe einen BMP280 Temperatur- und Luftdrucksensor angeschlossen. Die i2c-Adresse ist laut Tabelle 0x76. Merken Sie sich diese Adresse.

Tun Sie dies für alle Ihre i2c-Geräte.

Schritt 2: Fall eins: I2c-Geräte haben dieselbe Adresse

Fall eins: I2c-Geräte haben dieselbe Adresse
Fall eins: I2c-Geräte haben dieselbe Adresse

Dies war immer der problematische Fall. Ein i2c-Bus kann mehrere Geräte verarbeiten, diese sollten jedoch unterschiedliche i2c-Adressen haben. Einige i2c-Geräte haben Jumper, um andere i2c-Adressen einzustellen, aber viele nicht. In diesem Fall können Sie einen i2c-Multiplexer (Hardware) verwenden, um i2c SDA (Daten) und SCL (Uhr) zu rotieren, oder Sie können einen zusätzlichen i2c-Bus oder mehr erstellen.

Ich werde zwei zusätzliche Busse erstellen, nl Bus 3 und 4

öffne das cli und starte

cd /boot

sudo nano config.txt

Fügen Sie die folgende Codezeile hinzu, vorzugsweise in dem Abschnitt, in dem spi und i2c aktiviert sind.

dtoverlay=i2c-gpio, bus=4, i2c_gpio_delay_us=1, i2c_gpio_sda=23, i2c_gpio_scl=24

Diese Leitung erstellt einen zusätzlichen i2c-Bus (Bus 4) auf GPIO 23 als SDA und GPIO 24 als SCL (GPIO 23 und 24 sind Standard)

Fügen Sie auch die folgende Zeile hinzu, um den i2c-Bus 3 zu erstellen

dtoverlay=i2c-gpio, bus=3, i2c_gpio_delay_us=1, i2c_gpio_sda=17, i2c_gpio_scl=27

GPIO 17 ist der SDA und GPIO 27 ist der SCL für den i2c-Bus 4.

Tippe auf X zum Beenden.

Hinweis zur Busnummerierung und Bestellung:

Verwenden Sie niemals Bus 0 und 2, es wird für andere Dinge im Board verwendet, wie Eprom auf Hüten usw

Für die Raspbian-Version vom April 2019:

Sie sollten in Ihrer config.txt immer mit dem höchsten Bus (hier Bus 4) beginnen und sich bis zum niedrigsten Bus (Bus 3) durcharbeiten.

Der niedrigste Bus muss immer Bus 3 sein

Wenn Sie 5 zusätzliche Busse benötigen, müssen die Busse in der Reihenfolge 7, 6, 5, 4, 3. sein

Dieses Problem bei der Busbestellung war nicht da, als dieses Instructable ursprünglich geschrieben wurde. Es scheint, als ob Änderungen am Kernel vorgenommen wurden.

Fahren Sie Ihren PI herunter, schalten Sie ihn aus. Schließen Sie Ihre i2c-Geräte an Bus 4 (SDA an GPIO 23 und SCL an GPIO 24) und die anderen an i2c-Bus 3 (SDA an GPIO 17 und SCL an GPIO 27) an.

Pi einschalten.

Lauf:

sudo i2cdetect -l (Kleinschreibung L)

Sie sehen nun, dass auch i2c-Bus 3 und 4 aufgeführt sind. Außerdem laufen:

sudo i2cdetect -y 3

sudo i2cdetect -y 4

Jetzt können Sie Ihren Sensor in Ihrer Programmiersprache verwenden. Denken Sie daran, die richtigen i2c-Busse anzugeben.

Attach ist ein Beispiel für den beliebten BMP280 Temperatur- und Drucksensor. Kein Multiplexer kann 2 BMP280s so schnell lesen.

Ein Beispiel für 2 Sensirion SDP 810 Sensoren ist ebenfalls beigefügt. Arbeitet wieder viel schneller als der Multiplexer, den ich in der Vergangenheit verwendet habe

Ich habe Python-Code erstellt, um zwei neue BMP388s von adafruit zu lesen.

Möglicherweise füge ich in Zukunft auch andere Sensoren zu https://github.com/JJSlabbert/Raspberry_PI_i2C_conficts hinzu

Schritt 3: Fall 2: Unterschiedliche I2c-Adressen

Einfach. i2c ist ein Bus. Ein Buszweck besteht darin, mit mehreren Geräten zu kommunizieren. Schließen Sie die Geräte parallel an denselben i2c-Bus an. Sie können Bus eins benutzen.

Lauf:

sudo i2cdetect -y 1

Sie sehen die aufgelisteten Geräte.

Empfohlen: