Anleitung für Master-Leser / Slave-Sender

In manchen Situationen kann es hilfreich sein, zwei (oder mehr!) Arduino und Genuino Boards einzurichten, um Informationen miteinander zu teilen. In diesem Beispiel sind zwei Karten programmiert, um in einer Master Reader/Slave Sender-Konfiguration über das synchrone serielle I2C-Protokoll miteinander zu kommunizieren. Dazu werden mehrere Funktionen der Drahtbibliothek von Arduino verwendet. Hier haben Sie das arduino i2c tutorial deutsch zur Verfügung.

Arduino 1, der Master, ist programmiert, um 6 Bytes von Daten anzufordern und dann zu lesen, die vom eindeutig adressierten Slave-Arduino gesendet werden. Sobald diese Nachricht empfangen wurde, kann sie im seriellen Monitorfenster der Arduino Software (IDE) angezeigt werden.

Leitungen zum Senden und Empfangen von Daten

Das I2C-Protokoll beinhaltet die Verwendung von zwei Leitungen zum Senden und Empfangen von Daten: einen seriellen Taktstift (SCL), den das Arduino oder Genuino Master Board in einem regelmäßigen Intervall pulsiert, und einen seriellen Datenpin (SDA), über den Daten zwischen den beiden Geräten gesendet werden. Wenn die Taktleitung von Low auf High wechselt (bekannt als die steigende Flanke des Taktes), wird ein einzelnes Bit von Informationen – die nacheinander die Adresse eines bestimmten Gerätes und einen Befehl oder Daten bilden – über die SDA-Leitung von der Karte an das I2C-Gerät übertragen. Wenn diese Informationen gesendet werden – Bit für Bit -, führt das aufgerufene Gerät die Anforderung aus und sendet seine Daten – falls erforderlich – über die gleiche Leitung an die Karte zurück, wobei es das vom Master auf SCL noch erzeugte Taktsignal als Timing verwendet.

arduino I2C-Gerät

Da das I2C-Protokoll es jedem aktivierten Gerät ermöglicht, seine eigene eindeutige Adresse zu haben, und da sowohl Master- als auch Slave-Geräte abwechselnd über eine einzige Leitung kommunizieren, ist es möglich, dass Ihr Arduino oder Genuino-Board (wiederum) mit vielen Geräten oder anderen Boards kommuniziert, während es nur zwei Pins Ihres Mikrocontrollers verwendet.

Erforderliche Hardware

  • 2 Arduino oder Genuino Boards
  • Anschlussdrähte
  • Schaltkreis

Verbinden Sie Pin 4 (die Daten, oder SDA, Pin) und Pin 5 (die Uhr, oder SCL, Pin) auf der Masterplatine mit ihren Gegenstücken auf der Slaveplatine. Achten Sie darauf, dass beide Boards eine gemeinsame Masse haben. Um eine serielle Kommunikation zu ermöglichen, muss die Masterplatine über USB mit Ihrem Computer verbunden sein.

Wenn die unabhängige Stromversorgung der Karten ein Problem darstellt, verbinden Sie den 5V-Ausgang des Masters mit dem VIN-Pin des Slaves.

Code for Master Reader – Program for Arduino 1

// Wire Master Reader
// by Nicholas Zambetti <http://www.zambetti.com>

// Demonstrates use of the Wire library
// Reads data from an I2C/TWI slave device
// Refer to the „Wire Slave Sender“ example for use with this

// Created 29 March 2006

// This example code is in the public domain.

#include <Wire.h>

void setup() {
Wire.begin();        // join i2c bus (address optional for master)
Serial.begin(9600);  // start serial for output
}

void loop() {
Wire.requestFrom(8, 6);    // request 6 bytes from slave device #8

while (Wire.available()) { // slave may send less than requested
char c = Wire.read(); // receive a byte as character
Serial.print(c);         // print the character
}

delay(500);
}

Code for Slave Sender – Program for Arduino 2

// Wire Slave Sender
// by Nicholas Zambetti <http://www.zambetti.com>

// Demonstrates use of the Wire library
// Sends data as an I2C/TWI slave device
// Refer to the „Wire Master Reader“ example for use with this

// Created 29 March 2006

// This example code is in the public domain.

#include <Wire.h>

void setup() {
Wire.begin(8);                // join i2c bus with address #8
Wire.onRequest(requestEvent); // register event
}

void loop() {
delay(100);
}

// function that executes whenever data is requested by master
// this function is registered as an event, see setup()
void requestEvent() {
Wire.write(„hello „); // respond with message of 6 bytes
// as expected by master
}