Inhaltsverzeichnis:
- Schritt 1: Hardware-Anforderung
- Schritt 2: Behandelte Themen
- Schritt 3: Grundlagen des I2C-Busses
- Schritt 4: TCA9548A I2C-Multiplexer-Modul
- Schritt 5:
- Schritt 6: Wie der Master Daten sendet und empfängt
- Schritt 7: Code
- Schritt 8: I2C-Scanner
- Schritt 9: Verkabelung und Demo
- Schritt 10: Vor- und Nachteile
- Schritt 11: Danke
Video: TCA9548A I2C-Multiplexer-Modul - mit Arduino und NodeMCU - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:20
Sind Sie jemals in eine Situation geraten, in der Sie zwei, drei oder mehr I2C-Sensoren an Ihren Arduino anschließen mussten, nur um zu erkennen, dass die Sensoren eine feste oder gleiche I2C-Adresse haben? Außerdem können Sie nicht zwei Geräte mit derselben Adresse an denselben SDA/SCL-Pins haben!
Also, was sind Ihre Optionen? Setzen Sie sie alle auf den 1-zu-8-I2C-Multiplexer TCA9548A, damit sie alle über denselben Bus miteinander kommunizieren! Der Breakout TCA9548A ermöglicht die Kommunikation mit mehreren I2C-Geräten, die dieselbe Adresse haben, wodurch die Schnittstelle mit ihnen einfach wird.
Schritt 1: Hardware-Anforderung
Für dieses Tutorial benötigen wir:
- Steckbrett
- TCA9548A I2C-Multiplexer
- Arduino Uno/Nano was immer praktisch ist
- KnotenMCU
- Wenige 0,91 & 0,96 I2C OLED-Displays
- Überbrückungskabel und
- USB-Kabel zum Hochladen des Codes
Schritt 2: Behandelte Themen
Wir beginnen unsere Diskussion mit dem Verständnis der Grundlagen der I2C-Technologie
Dann lernen wir den TCA9548A Multiplexer kennen und wie Master und Slave Daten mit der I2C-Technologie senden und empfangen Anschließend werden wir prüfen, wie wir den Multiplexer in unserem Projekt mit Arduino und NodeMCU programmieren und verwenden können Als nächstes zeige ich Ihnen eine kurze Demo mit 8 I2C-OLED-Displays und abschließend beenden wir das Tutorial, indem wir die Vor- und Nachteile des TCA9548A-Multiplexers diskutieren
Schritt 3: Grundlagen des I2C-Busses
Inter-integrierte Schaltung, ausgesprochen I-Squared-C (I²C) oder I2C, ist eine Zweidraht-Bustechnologie (naja, eigentlich 4 Drähte, da Sie auch VCC und Masse benötigen), die für die Kommunikation zwischen mehreren Prozessoren und Sensoren verwendet wird.
Die beiden Drähte sind:
* SDA - Serielle Daten (Datenleitung) und
* SCL - Serielle Uhr (Taktleitung)
Denken Sie daran, dass diese beiden Leitungen 'synchron', 'bidirektional', 'open-drain' und 'mit Widerständen hochgezogen' sind.
Die I2C-Bus-Technologie wurde ursprünglich in den frühen 80er Jahren von Philips Semiconductors entwickelt, um eine einfache Kommunikation zwischen Komponenten zu ermöglichen, die sich auf derselben Leiterplatte befinden.
Mit I2C können Sie mehrere Slaves an einen einzigen Master (wie SPI) anschließen oder mehrere Master haben, die einzelne oder mehrere Slaves steuern. Sowohl Master als auch Slaves können Daten senden und empfangen. Ein Gerät am I2C-Bus kann sich also in einem dieser vier Zustände befinden:
* Master Transmit – Master Node sendet Daten an einen Slave* Master Receive – Master Node empfängt Daten von einem Slave
* Slave-Senden – Slave-Knoten sendet Daten an den Master
* Slave-Empfang – Slave-Knoten empfängt Daten vom Master
I2C ist ein 'serielles Kommunikationsprotokoll' für kurze Distanzen, so dass Daten 'Bit-für-Bit' über die Einzelader oder die SDA-Leitung übertragen werden. Die Ausgabe von Bits wird durch ein Taktsignal, das zwischen Master und Slave „geteilt“wird, mit der Abtastung von Bits synchronisiert. Das Taktsignal wird immer vom Master gesteuert. Der Master generiert die Uhr und initiiert die Kommunikation mit den Slaves.
Also, um es zusammenzufassen>
Anzahl der verwendeten Drähte: 2
Synchron oder Asynchron: Synchron
Seriell oder parallel: Seriell
Taktsignal gesteuert von: Master Node
Verwendete Spannungen: +5 V oder +3,3 V
Maximale Anzahl von Meistern: Unbegrenzt
Maximale Anzahl von Slaves: 1008
Maximale Geschwindigkeit: Standardmodus = 100kbps
Schneller Modus = 400kbps
Hochgeschwindigkeitsmodus = 3,4 Mbit/s
Ultraschneller Modus = 5 Mbit/s
Schritt 4: TCA9548A I2C-Multiplexer-Modul
TCA9548A ist ein achtkanaliger (bidirektionaler) I2C-Multiplexer, der die Steuerung von acht separaten I2C-Geräten über einen einzigen Host-I2C-Bus ermöglicht. Sie müssen nur die I2C-Sensoren an die SCn / SDn-Multiplex-Busse anschließen. Werden beispielsweise in einer Anwendung acht identische OLED-Displays benötigt, kann an jedem dieser Kanäle eines von jedem Display angeschlossen werden: 0-7.
Der Multiplexer wird an die VIN-, GND-, SDA- und SCL-Leitungen des Mikrocontrollers angeschlossen. Das Breakout-Board akzeptiert VIN von 1,65 V bis 5,5 V. Sowohl die SDA- als auch die SCL-Eingangsleitungen sind über einen 10K-Pull-Up-Widerstand mit VCC verbunden (Die Größe des Pull-Up-Widerstands wird durch die Kapazität der I2C-Leitungen bestimmt). Der Multiplexer unterstützt sowohl normale (100 kHz) als auch schnelle (400 kHz) I2C-Protokolle. Alle I/O-Pins des TCA9548A sind 5-Volt-tolerant und können auch verwendet werden, um von hohen zu niedrigen oder niedrigen zu hohen Spannungen zu übersetzen.
Es ist eine gute Idee, auf allen Kanälen des TCA9548A Pull-up-Widerstände anzubringen, auch wenn die Spannungen gleich sind. Grund dafür ist der interne NMOS-Schalter. Es überträgt hohe Spannungen nicht sehr gut, dagegen niedrige Spannungen sehr gut. Der TCA9548A kann auch für die Spannungsübersetzung verwendet werden, wodurch die Verwendung unterschiedlicher Busspannungen an jedem SCn/SDn-Paar ermöglicht wird, sodass 1,8-V-, 2,5-V- oder 3,3-V-Teile mit 5-V-Teilen kommunizieren können. Dies wird erreicht, indem der Bus über externe Pull-Up-Widerstände auf die gewünschte Spannung für den Master- und jeden Slave-Kanal hochgezogen wird.
Wenn der Mikrocontroller einen Buskonflikt oder eine andere unsachgemäße Operation erkennt, kann der TCA9548A zurückgesetzt werden, indem ein Low an den RESET-Pin angelegt wird.
Schritt 5:
TCA9548 ermöglicht es einem einzelnen Mikrocontroller, mit bis zu '64 Sensoren' zu kommunizieren, die alle dieselbe oder eine andere I2C-Adresse haben, indem jedem Sensor-Slave-Subbus ein eindeutiger Kanal zugewiesen wird.
Wenn wir über das Senden von Daten über 2 Drähte an mehrere Geräte sprechen, müssen wir sie adressieren. Es ist das gleiche wie der Postbote, der auf einer einzigen Straße kommt und die Postpakete zu verschiedenen Häusern abgibt, weil sie unterschiedliche Adressen darauf haben.
Sie können maximal 8 dieser Multiplexer auf 0x70-0x77-Adressen miteinander verbunden haben, um 64 der gleichen I2C-adressierten Teile zu steuern. Durch Verbinden der drei Adressbits A0, A1 und A2 mit VIN können Sie verschiedene Kombinationen der Adressen erhalten. So sieht ein Adressbyte des TCA9548A aus. Die ersten 7 Bits bilden zusammen die Slave-Adresse. Das letzte Bit der Slave-Adresse definiert die auszuführende Operation (Lesen oder Schreiben). Wenn es hoch (1) ist, wird ein Lesen ausgewählt, während ein niedriges (0) einen Schreibvorgang auswählt.
Schritt 6: Wie der Master Daten sendet und empfängt
Im Folgenden ist die allgemeine Vorgehensweise für einen Master, um auf ein Slave-Gerät zuzugreifen:
1. Wenn ein Master Daten an einen Slave senden möchte (WRITES):
– Master-Sender sendet eine START-Bedingung gefolgt von den Adressen des Slave-Empfängers und R/W auf 0 gesetzt
– Master-Sender sendet Daten in den '8-Bit Control Registers' an den Slave-Empfänger, wenn der Slave seine Bereitschaft bestätigt
– Master-Sender beendet die Übertragung mit einer STOP-Bedingung
2. Wenn ein Master Daten von einem Slave empfangen oder lesen möchte (READS):
– Master-Empfänger sendet eine START-Bedingung gefolgt von den Adressen des Slave-Empfängers und R/W auf 1
– Master-Empfänger sendet das angeforderte Register zum Lesen an Slave-Sender
– Master-Empfänger empfängt Daten vom Slave-Sender
- Sobald alle Bytes empfangen wurden, sendet der Master NACK-Signale an den Slave, um die Kommunikation zu stoppen und den Bus freizugeben
- Master-Empfänger beendet die Übertragung mit einer STOP-Bedingung
Ein Bus wird als im Leerlauf betrachtet, wenn sowohl die SDA- als auch die SCL-Leitungen nach einem STOP-Zustand hoch sind.
Schritt 7: Code
Nun beginnt der Code mit Int, indem die "Wire"-Bibliothek aufgenommen und die Multiplexer-Adresse definiert wird.
#include "Wire.h"
#include "U8glib.h"
#define MUX_Address 0x70 // TCA9548A Encoder-Adresse
Dann müssen wir den Port auswählen, mit dem wir kommunizieren möchten, und die Daten mit dieser Funktion senden:
void selectI2CChannels(uint8_t i) {
wenn (i > 7) Rückkehr;
Wire.beginTransmission(MUX_Address);
Wire.write(1 << i);
Wire.endTransmission();
}
Als nächstes initialisieren wir die Anzeige im Setup-Abschnitt, indem wir "u8g.begin();" aufrufen. für jede an den MUX angeschlossene Anzeige "tcaselect(i);"
Nach der Initialisierung können wir dann tun, was wir wollen, indem wir einfach die Funktion "tcaselect(i);" aufrufen. wobei "i" der Wert des gemultiplexten Busses ist und dann die Daten und der Takt entsprechend gesendet werden.
Schritt 8: I2C-Scanner
Falls Sie sich bezüglich der Geräteadresse Ihres I2C-Shields nicht sicher sind, führen Sie den beigefügten 'I2C-Scanner'-Code aus, um die Hex-Adresse Ihres Geräts zu finden. Beim Laden auf einen Arduino scannt die Skizze das I2C-Netzwerk und zeigt die antwortenden Adressen an.
Schritt 9: Verkabelung und Demo
Verdrahtung:
Beginnen wir mit dem Anschluss des Multiplexers an eine NodeMCU-Platine. Verbinden:
Fahrgestellnummer bis 5V (oder 3,3V)
GND an Masse
SDA zu D2 und
SCL auf D1-Pins bzw.
Für ein Arduino-Board verbinden:
Fahrgestellnummer bis 5V (oder 3,3V)
GND an Masse
SDA auf A4 und
SCL auf A5-Pins bzw.
Sobald der MUX an den Mikrocontroller angeschlossen ist, müssen Sie nur noch die Sensoren an die SCn / SDn-Paare anschließen.
Schauen wir uns nun diese kurze Demo an, in der ich 8 OLED-Displays an den TCA9548A Multiplexer angeschlossen habe. Da diese Displays die I2C-Kommunikation verwenden, kommunizieren sie mit dem Arduino über nur 2 Pins.
Schritt 10: Vor- und Nachteile
VORTEILE
* Kommunikation benötigt nur zwei Busleitungen (Drähte)
* Zwischen allen Komponenten besteht eine einfache Master/Slave-Beziehung
* Keine strengen Baudratenanforderungen wie zB bei RS232, der Master erzeugt einen Bustakt
* Hardware ist weniger kompliziert als UARTs
* Unterstützt mehrere Master und mehrere Slaves
* ACK/NACK-Bit bestätigt, dass jeder Frame erfolgreich übertragen wurde
* I2C ist ein "echter Multi-Master-Bus", der Arbitrierung und Kollisionserkennung bietet
* Jedes an den Bus angeschlossene Gerät ist durch eine eindeutige Adresse softwareadressierbar
* Die meisten I2C-Geräte können mit 100 kHz oder 400 kHz kommunizieren
* I²C eignet sich für Peripheriegeräte, bei denen Einfachheit und niedrige Herstellungskosten wichtiger sind als Geschwindigkeit
* Bekanntes und weit verbreitetes Protokoll
NACHTEILE
* Langsamere Datenübertragungsrate als SPI
* Die Größe des Datenrahmens ist auf 8 Bit begrenzt
* Kompliziertere Hardware für die Implementierung erforderlich als die SPI-Technologie
Empfohlen:
ESP8266 Netzwerkuhr ohne RTC - Nodemcu NTP-Uhr Keine RTC - INTERNET-UHR-PROJEKT: 4 Schritte
ESP8266 Netzwerkuhr ohne RTC | Nodemcu NTP-Uhr Keine RTC | INTERNET-UHRPROJEKT: Im Projekt wird ein Uhrenprojekt ohne RTC erstellt, es wird Zeit vom Internet über WLAN benötigt und auf dem st7735-Display angezeigt
So rufen Sie Daten aus einer Firebase-Datenbank auf NodeMCU ab – wikiHow
So rufen Sie Daten aus einer Firebase-Datenbank auf NodeMCU ab: Für dieses anweisbare holen wir Daten aus einer Datenbank in Google Firebase und holen sie mit einer NodeMCU zur weiteren Analyse ab. PROJEKTANFORDERUNGEN: 1) NodeMCU oder ESP8266 Controller2) G-Mail Konto zum Erstellen einer Firebase-Datenbank.3) Laden Sie die
NodeMCU - MQTT-Basisbeispiel: 4 Schritte
NodeMCU - MQTT Basic Example: Diese Lektion zeigt die grundlegende Verwendung des MQTT-Protokolls auf dem NodeMCU-Board. Wir verwenden hier die MQTTBox als MQTT-Client und verwenden die NodeMCU, um die folgenden Operationen durchzuführen: outTopic“alle zwei Sekunden.Subscr
Schnittstelle Regentropfensensor zu NodeMcu- für Anfänger: 5 Schritte
Schnittstelle Regentropfensensor zu NodeMcu| für Anfänger: In diesem Tutorial erfahren Sie, wie Sie den Regentropfensensor mit NodeMcu verbinden
NodeMCU Smart Room - ESP8266 - Arduino: 6 Schritte
NodeMCU Smart Room | ESP8266 | Arduino: Ich habe eine Youtube-Serie von "Wie automatisiere ich deinen Raum mit Arduino?" und als Teil dieser Produktion bringe ich Ihnen eines meiner neuesten Upgrades. Ich habe mich für das ESP8266 nodemcu WiFi-Modul entschieden, da es als