Sending Data From ESP32 to ArduinoUno

Letztlich sind wir in der überaus komfortablen Situation, alle notwendigen Informationen im weltweiten Netz zu finden. Man muß sie "nur" auswerten und zusammenführen.

Beim UNO und vergleichbaren µCs ist spezielle Hardware beispielsweise für I²C mit festgelegten Pins verbunden, eben A4 und A5. Der ESP32 verwendet eine Matrix, so daß mit Einschränkungen Hardware und Pins beliebig verknüpft werden können. Die Software von Espressif unterstützt diese Möglichkeit. Bei der Arduino-IDE gehen die Bibliotheken von Standardpins aus, die man bei guten Bibliotheken aber verändern kann.

Auf der Seite ESP32 Pinout Reference: Which GPIO pins should you use? findet man diese Grafik, bei der SDA und SCL mit GPIO21 und GPIO22 verbunden sind:

Die Anschlüsse für I²C heißen üblicherweise SDA und SCL.

Eher nicht, da Du mir Fragen wie "geht das" gestellt hast, nicht aber nach einem sinnvollen Konzept. Vermutlich reichen zwei ESP32, wovon einer den Motor bewegt. Da mir aber Informationen fehlen, könntest Du auch eine Wahrsagerin befragen.

In der Struktur steckt bereits eine Zahl als Absender. Diese Struktur könntest Du erweitern.

```
Dein Programm
```

Die tags hab ich dann ja gefunden gehabt, hab die Codes reingestellt, ich danke dir jedoch trotzdem. Das ist sehr lieb.

Welche Informationen benötigst denn noch?

Ich bin davon ausgegangen, dass 3 esp32 sich schneller wären, da 2 als Sensoren fungieren und der 3. Als Vergleicher und Motor steuerer?

Ist das denn nicht so?

Jetzt habe ich es geschafft, dass 2 miteinander Daten austauschen aber ich habe dafür extra pins definiert und zwar 16 und 17 oben ist der Code von mir :slight_smile:

Nun muss ich das auf 3 aufteilen also 2 müssen einen Code empfangen und an die 3. Partie senden

?

Es gibt drei Versionen:
1.) ein Byte
2.) ein Array aus Bytes
3.) ein String Objekt (uninteressant)

Deshalb ist es am praktischsten beliebige andere Daten als Byte Array zu behandeln. Entweder mit einer Union oder indem man die Adresse einer Variablen auf byte* castet

Mal grundlegend zum Verständnis: 2 Sensoren und ein Motor - das schafft doch ein ESP32 allein und langweilt sich dabei noch fast zu Tode.
Größere Entfernungen können auch keine Rolle spielen, da I2C.
Irgendwie wird hier in meinen Augen das Pferd falsch herum aufgezäumt.

Gruß Tommy

Sogar 3 wollte ich machen, meinst das zwei das packen und schnell genug ein sensor abfragen, vergleichen und Motor ansteuern?

Einer reicht nicht, es müssen mindestens 2 sein leider anders geht es nicht...

Also bei meinem Code, ändert sich der rssi Wert schon so sehr und ist ein wenig langsam, vielleicht weil ich mit if Abfrage statt mit while. Oben der code mit dem ble rssi.

Dort soll es abgefragt werden und dann beim zweiten oder 3. Verglichen werden und damit der Motor gesteuert..

Hast denn ein Beispiel Code, wie das sonst leichter zu realisieren wäre?

Beschreibe doch erst mal genau und verständlich, was Du machen willst. Welche Sensoren, welche Auswertung, was soll der Motor dabei. Warum müssen es 2 sein?
Mit den hingeworfenen Schnipseln kann keiner was anfangen.

Gruß Tommy

Ich hab dir persönlich geschrieben, darf man sowas?

Wäre das OK, würde das ungern so hier schreiben wenn das in Ordnung ist. Falls dem nicht so ist, muss es eben hier sein :slight_smile:

Ich habe dir auch persönlich geschrieben, ist das OK? Darf man das? Bin recht neu hier :slight_smile:

Man darf. Meine Meinung dazu schreibe ich Dir in einer persönlichen Antwort.

Klar, darf man. Was die privat angesprochenen machen, ist ihnen auch freigestellt.
Dein Thread hatte bisher 83 "Views". Den meisten davon wirst du bzw. dieser Thread dann egal sein.

Aktuell: Wenn du ohne Begründung sicher bist, dass es ein ESP32 nicht alleine schafft, wird das jemand anders nicht viel neue Erkenntnisse bringen.

Ich habe Dir geantwortet. Unter der Bedingung, dass Teile für die Allgemeinheit geheim bleiben sollen, bin ich raus.

Gruß Tommy

Mir ist leider erst jetzt aufgefallen, daß RX und TX in den Parametern vertauscht sind. Wenn man RX und TX überkreuz verbindet, fällt dieser Fehler nicht auf. Richtig so:

Sender.begin(115200, SERIAL_8N1, Sender_Rxd_pin, Sender_Txd_pin);
...
Receiver.begin(115200, SERIAL_8N1, Receiver_Rxd_pin, Receiver_Txd_pin);

Der TO hat mir in einer persönlichen Nachricht sein Vorhaben dargelegt. Nach meiner Einschätzung dürften die Schwierigkeiten an anderer Stelle lauern. Die Anzahl der ESP32 ist da eher nebensächlich, ich bleibe bei drei. Mein Thema also

Sende Daten von zwei ESP32 nach einem ESP32

Wie das mittels I²C geht, habe ich schon gezeigt, allerdings ist die Leitungslänge von einem Meter im Zusammenspiel mit den Magnetfeldern von Motoren grenzwertig. Eventuell wäre zusätzliche Hardware notwendig.

Alternativ kann man auch UART verwenden, eventuell mit Hardware für RS485. Der UNO ist da eher ungünstig, da bei SoftwareSerial immer nur ein Empfänger aktiv sein kann. Auch die Geschwindigkeit ist begrenzt.

Der ESP32 hat drei UARTs:

  • UART 0 ist mit USB blockiert.
  • UART 1 ist an GPIO9 und GPIO10 durch Flashpins blockiert.
  • UART 2 ist an GPIO16 und GPIO17 zugänglich.

Glücklicherweise kann man bei UART 1 und UART 2 die Pins über die Matrix umlegen.

Aufbau also: Zwei ESP32 als Sender einer Zahl, bei mir durch eine Zufallszahl erzeugt, über UART 2, ein ESP32 als Empfänger auf UART 1 und UART 2.

ESP32 als Sender:

// ESP32 als Sender
/*
  GPIO16 RX2
  GPIO17 TX2
*/
#include <Wire.h>

int rssi;

void setup()
{
  Serial.begin(115200);
  Serial2.begin(115200);
}

void loop()
{
  rssi = random(100, 2000);
  Serial2.println(rssi);
  Serial.print("ESP sendet: ");
  Serial.println(rssi);

  delay(1000);
}

ESP32 als Empfänger:

// ESP32 als Empfänger
HardwareSerial Esp_1(1);   // using serial port 1
HardwareSerial Esp_2(2);   // using serial port 2

#define Esp_1_Rxd_pin 34
#define Esp_1_Txd_pin -1
#define Esp_2_Rxd_pin 35
#define Esp_2_Txd_pin -1

void setup() {
  Serial.begin(115200);
  delay(1000);
  Serial.println("Scanning...");

  Esp_1.begin(115200, SERIAL_8N1, Esp_1_Rxd_pin, Esp_1_Txd_pin);
  Esp_2.begin(115200, SERIAL_8N1, Esp_2_Rxd_pin, Esp_2_Txd_pin);
}
bool empfangen(HardwareSerial &EspX, int &rssi) {
  int tmp = 0;
  if (EspX.available()) {
    char buf[15] = "\n";
    EspX.readBytesUntil('\n', buf, sizeof(buf));
    tmp = atoi(buf);
  }
  if (tmp > 0) {
    rssi = tmp;
    return true;
  } else {
    return false;
  }
}

void loop() {
  bool neu = false;
  static int rssi_1, rssi_R;
  if (empfangen(Esp_1, rssi_1)) {
    neu = true;
  }
  if (empfangen(Esp_2, rssi_R)) {
    neu = true;
  }
  if (neu) {
    Serial.print("Esp_1: ");
    Serial.print(rssi_1);
    Serial.print("\tEsp_2: ");
    Serial.println(rssi_R);
  }
}

Ausgabe:

Esp_1: 712	Esp_2: 694

Damit kann sich der TO dann auf seine eigentliche Herausforderung stürzen :innocent:

1 Like

Ich freue mich gerade wie ein kleines Kind und danke dir schon mal.

Ich werde dies so schnell es geht ausprobieren.
Mir ist gestern einer meiner esp32 durch geschmort, aber morgen mittag kommt ein neuer.

Also werde ich morgen gegen 17 Uhr das ganze ausprobieren können.

Ich danke dir schon mal sehr und werde mich näher informieren wegen dem Schutz vor Störungen durch das magnetische Feld.

Ehrlich schon mal vielen Dank.

Viele Grüße
Julian

Ahja und einen wunderschönen Abend euch allen :slight_smile:

So, nun habe ich den neuen esp32 erhalten, nach dem mein zweiter sehr heiß wurde und nicht mehr anzeigbar war, nach dem ich ihn an dem pc anschließte.

Nun habe ich ein neues Problem und ich suche gerade im Internet.

Der andere nicht neue aber funktionierende zeigt mir nun folgendes an.

A fatal error occurred: MD5 of file does not match data in flash!

Hab jetzt mal im Netzt nachgesehen und es gibt verschiedene Möglichkeiten. Hab verschiedene Kabel durchprobiert, beim anschließen ist kein Kabel an einem GPI.

Der heute angekommene funktioniert an den selben Kabeln einwandfrei.

An was könnte dies nun liegen?

Entschuldigt bitte, meine Fragen und falls dies Fundamental oder gar trivial ist, tut es mir noch mehr leid.

Viele Grüße
Julian

Ahja Ps

nicht nur egal welche Kabel, welcher USB-Port sondern auch welches Programm..

Hier die ganze Fehlermeldung

esptool.py v3.1
Serial port COM3
Connecting........_
Chip is ESP32-D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 08:3a:f2:aa:70:d4
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Flash will be erased from 0x0000e000 to 0x0000ffff...
Flash will be erased from 0x00001000 to 0x00005fff...
Flash will be erased from 0x00010000 to 0x00045fff...
Flash will be erased from 0x00008000 to 0x00008fff...
Compressed 8192 bytes to 47...
Writing at 0x0000e000... (100 %)
Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.0 seconds (effective 1939.6 kbit/s)...
Hash of data verified.
Compressed 18464 bytes to 12476...
Writing at 0x00001000... (100 %)
Wrote 18464 bytes (12476 compressed) at 0x00001000 in 0.2 seconds (effective 689.2 kbit/s)...
Hash of data verified.
Compressed 217888 bytes to 122544...
Writing at 0x00010000... (12 %)
Writing at 0x0001cb67... (25 %)
Writing at 0x000220b8... (37 %)
Writing at 0x00027525... (50 %)
Writing at 0x0002c8f0... (62 %)
Writing at 0x0003517d... (75 %)
Writing at 0x0003d002... (87 %)
Writing at 0x000426fb... (100 %)
Wrote 217888 bytes (122544 compressed) at 0x00010000 in 1.6 seconds (effective 1076.3 kbit/s)...
File  md5: 32c34bfc44fc0e5c6e52417852a786e3
Flash md5: b41b511b3a3f14761a3def4667309888
MD5 of 0xFF is ff43e75181b2725e26be22754ae5ae1e

A fatal error occurred: MD5 of file does not match data in flash!
A fatal error occurred: MD5 of file does not match data in flash!

Üblicherweise falsches Kabel an einem der Pins. Hast Du wirklich nur USB angeschlossen?

Ja ehrlich nur USB, und das selbe Kabel geht am anderen esp32 und hab n zweites Kabel an dem geht es auch. Esp32 is von azdelivery. Bis jetzt bin ich sehr zufrieden mit denen :slight_smile: ich kann aber auch morgen ein neues Kabel holen, hast du mir oder habt ihr mir eine Empfehlung, das ist doch ein einfach daten Kabel oder?

Ich danke euch, schlaft gut :slight_smile:

Da habe ich welche aus unterschiedlichen Produktionszeiten, leider waren die neuesten (2020) mit Lötfehlern defekt. Als Ersatz habe ich dann ältere (2019) bekommen.

Also, 2. Arduino angekommen und noch einen bestellt, sicher ist sicher. Dein Code funktioniert, ich danke dir und werde den Code nun abändern.

Ich denke, das Thema ist damit beendet?

Aber ich bin noch nicht durch mit allem, sollte ich sonst einen neuen Thread eröffnen?

Ich danke jedem von euch schon mal von Herzen.

Viele Grüße
Julian