I2C Verbindung von ESP8266 zu Arduino UNO

Hallo zusammen, ich bin gerade an einem Projekt am arbeiten und habe da so meine kleineren und grösseren Probleme.

  1. Ich bringe keine funktionierende I2C Verbindung zustande zwischen meinem ESP8266 und dem Arduino Uno. Ich habe die Verbindungen von SDA ESP zu SDA Arduino und SCL ESP zu SCL Arduino gesteckt.

  2. Die empfangenen Daten auf dem Arduino Uno möchte ich in einen Array schreiben und diesen dann später weiterverwenden. Doch leider komme ich auch hier mit meinem Wissen nicht mehr weiter.

Code Master:

#include <Wire.h> //I2C-Bibliothek

void setup(){
  Serial.begin(9600);
  Wire.begin(); //I2C-Aktivierung
}

void loop(){
  while( Serial.available() ) {
    char c = Serial.read();
    
    if(c == 'H') {
      Wire.beginTransmission(5); //I2C: an Adresse 5 senden
      Wire.write('H');
      Wire.endTransmission();
    }
    else if(c == 'L') {
      Wire.beginTransmission(5);
      Wire.write('L');
      Wire.endTransmission();
    }
  }
}

GND verbunden?
Wer ist Master - wer ist Slave?
Slave Sketch?

Auch GND?
Weißt Du wofür level-shifter und pullup Widerstände gut sind?

Adressen sollten erst ab 8 verwendet werden.

Wurden in die SCL, SDA Leitung Pegel Wandler(Level Shifter) eingebaut, ESP mag keine 5V an den Pins

Hier findest du passende Beispiele zu deinem "Problem".

Ich würde immer eine serielle Verbindung nehmen und nicht I2C.
Wenn bei I2C ein einziger Flankenwechsel falsch ist dann hängt das Programm komplett, weil dann die wire-library ewig auf diesen ausgebliebenen Pegelwechsel wartet.

Dagegen ist eine serielle Verbindung ein Kinderspiel und man kann einen TimeOut setzen so wie man das gerne hätte.
Anzahl IO-Pins gleich.

Der Arduino Uno kann als Software-Serial nur vergleichsweise niedrige Baudraten.
Wenn es also nicht auf Hochgeschwindigkeit ankommt dann würde ich eine serielle Verbindung empfehlen.

Wenn man schon einen ESP8266 in Verwendung hat stellt sich immer gleich die Frage kann man den Arduino-Uno komplett einsparen? Das hängt sehr vom Projekt ab.

Wenn du dein Gesamtprojekt beschreibst kann man beurteilen ob man den Arduino-Uno weglassen kann. Auch der Umstieg auf einen ESP32 ist eine Überlegung wert.
vgs

Gem. "Never say Never", würde auch nicht immer immer sagen.

I2C kennt mittlerweile setClock() - damit hast auch deinen Timeout.
I2C ist by design ein Bus - auf der Seriellen musst du das erst in Software machen und elektrisch auf beispielsweise RS485 gehen.
I2C habe ich parallel zu HW-Seriell - für eine zweite Serielle am Uno brauch ich Softserial, auch für eine zweite empfangende Schnittstelle am ESP8266.
Also es spricht schon einiges dafür I2C zu nutzen

Mit Timeout wird es sofort anders. Dann macht es Sinn.
vgs

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.