Forum: Mikrocontroller und Digitale Elektronik Mehrere Microcontroller (ESP8266) verkabelt verbinden und miteinander Kommunizieren lassen


von bernd (Gast)


Lesenswert?

Hi,

eigentlich eine einfache Frage, doch ich habe noch nicht den effizienten 
Weg gefunden.

Ich möchte mehrere Microcontroller Kommunizieren lassen. Eigentlich 
einfache aufgaben Kommentare wie z.B. ADC-Status oder schalte 
RelaisXY...
Ich will unbedingt eine Verdrahtete Verbindung einfach weil WLAN für 
mich nicht die LANGFRISTIGE (>10 Jahre) Basis bietet.
Ich möchte mit ESP8266 bzw. ESP32 arbeiten... Programmiert werden diese 
über die ArduinoIDE

Welche Kommunikation wäre wohl die beste? Die Strecken werden max 10m 
sein. Ich habe überall CAT7 Netzwerkkabel welche komplett frei sind. 
Ethernet möchte ich ungern verwenden.

- Kann ich ohne weitere Module Kommunizieren?
- SPI, CAN, I2C

Was kann der ESP am besten? Habt ihr Erfahrungen evtl. online Beispiele

Vielen Dank

von Silc P. (silch12)


Lesenswert?

bernd schrieb:
> - SPI, CAN, I2C

I2C ist aus meiner Sicht die einfachste Variante. Ein MCU als Master, 
einer als Slave

von Sebastian R. (sebastian_r569)


Lesenswert?

Da der ESP die wichtigsten Schnittstellen in Hardware hat, kann er alles 
gleich gut.

RS485 wäre z.B. sehr günstig, einfach und robust und braucht nur einen 
Bustreiber. Die Kunst liegt dann in der Software. Als Protokoll ist 
Modbus gar nicht so schwer. Setzt aber voraus, dass du einen Controller 
als Master hast und der Rest Slaves sind.

Wenn alle Controller gleichberechtigt sind, schafft das ein paar 
Timing-Probleme.


Etwas komplexer wäre dann CAN.

Für SPI braucht es auf der Länge dann am besten schon LVDS-Treiber. I2C 
mit LVDS wird lustig, weil duplex.

von Silc P. (silch12)


Lesenswert?

Nachtrag:
Slave Mode wird nicht unterstützt von Arduino IDE und NodeMCU für den 
ESP..
Es gäbe noch die Möglichkeit von PJON (https://github.com/gioblu/PJON)

von Roth (Gast)


Lesenswert?

Silvano C. schrieb:
> Nachtrag:
> Slave Mode wird nicht unterstützt von Arduino IDE und NodeMCU für den
> ESP..

Kann man den Slave Mode nicht per SW realisieren?

von Reiner O. (elux)


Lesenswert?

Warum sollte man ESPs verwenden, wenn man das WLAN nicht verwenden will?
Für die genannten Aufgaben reicht doch ein Arduino Uno/Nano etc. mit 
einem CAN-Shield locker aus.

Ich werfe für die Komunikation mal wieder LIN in den Ring, bzw. die 
MCP21xx, denn es zwingt Einen ja niemand, das LIN-Protokoll zu 
verwenden.

Gruß
Elux

von Cyblord -. (cyblord)


Lesenswert?

bernd schrieb:
> Ich möchte mehrere Microcontroller Kommunizieren lassen. Eigentlich
> einfache aufgaben Kommentare wie z.B. ADC-Status oder schalte
> RelaisXY...

Es sollte immer einen extrem guten Grund geben, mehrere Controller lokal 
zu vernetzen. Der Overhead und der Aufwand ist enorm. Wofür? Das muss 
die erste Frage sein die man sich hier stellt.
Warum nicht einen Controller der alles das alleine kann was man tun 
möchte?

Gerade Anfänger neigen dazu, schnell auf eine Vernetzungs-Lösung zu 
kommen. Aber gerade Anfänger bringen das gar nicht robust genug hin.

Also hast du das sorgfältig abgewogen?

von Silc P. (silch12)


Lesenswert?

Roth schrieb:
> Silvano C. schrieb:
>> Nachtrag:
>> Slave Mode wird nicht unterstützt von Arduino IDE und NodeMCU für den
>> ESP..
>
> Kann man den Slave Mode nicht per SW realisieren?

Doch das müsste gut machbar sein, allerdings habe ich dafür nichts 
fertiges gefunden, und ob das der TO selber implementieren kann?
I2C ist auf dem ESP in Software implementiert, frisst also etwas an 
Rechenzeit.
SPI sollte auch gut funktionieren, dafür sollte es schon fertige Libs 
geben. Allerdings braucht das mehr "Verdrahtung"

von Silc P. (silch12)


Lesenswert?

bernd schrieb:
> Die Strecken werden max 10m
> sein.

Das hab ich wohl übersehen. Das könnte ziemlich knapp werden, die 
Baudrate müsste ziemlich stark nach unten geschraubt werden.
Das SPI und I2C Protokoll sind eigentlich zur Kommunikation zwischen 
verschiedenen Elementen auf einem Board/in einer Applikation gedacht. 
Für weitere Distanzen eignen sich CAN und Ethernet, wobei diese 
schwieriger zu implementieren sind.Für UART ist die Distanz zu gross.

von Silc P. (silch12)


Lesenswert?

Sebastian R. schrieb:
> Da der ESP die wichtigsten Schnittstellen in Hardware hat, kann er alles
> gleich gut.
>
> RS485 wäre z.B. sehr günstig, einfach und robust und braucht nur einen
> Bustreiber. Die Kunst liegt dann in der Software. Als Protokoll ist
> Modbus gar nicht so schwer. Setzt aber voraus, dass du einen Controller
> als Master hast und der Rest Slaves sind.
>
> Wenn alle Controller gleichberechtigt sind, schafft das ein paar
> Timing-Probleme.
>
> Etwas komplexer wäre dann CAN.

Sehe ich genauso! Versuchs mal mit RS485 oder RS232, beide sollten 
Distanzen von 10 Meter können. Dabei kann das UART Protokoll verwendet 
werden. Es muss aber eine Logiklevel Anpassung mit einem Bus-Treiber 
vorgenommen werden.

von bernd (Gast)


Lesenswert?

> Warum sollte man ESPs verwenden, wenn man das WLAN nicht verwenden will?
> Für die genannten Aufgaben reicht doch ein Arduino Uno/Nano etc.

stimmt, aber wieso sollte ich mehr für Arduino Uno/Nano ausgeben, wenn 
ich schon 200ESPs daheim liegen habe welche mir nichts gekostet haben...

ich möchte davon 5-10 vernetzen...
=> eigentlich sollte jeder eigenständig Agieren können, und nur 
Statusmeldungen versenden oder selten aktionen von außen bekommen...

Die Wahl von mehreren Controllern erschließt sich 1. durch die Anzahl 
der Aufgaben und der Distanz (ich Messe keinen ADC welcher 5m entfernt 
ist) sondern will hier die nähe des Controllers am geschehen haben, 
gleichzeitig ist bei Ausfall nur ein Teil kaputt und nicht alles!

Master Slave, an sich eine gute Idee, noch besser wäre aber sowas wie 
MQT aber eben über Kabel <- nicht Ethernet

von Roth (Gast)


Lesenswert?

Silvano C. schrieb:
> Doch das müsste gut machbar sein, allerdings habe ich dafür nichts
> fertiges gefunden, und ob das der TO selber implementieren kann?
> I2C ist auf dem ESP in Software implementiert, frisst also etwas an
> Rechenzeit.

Die Rechenzeit ist ja nur auf die Transferzeit beschränkt. Die 
Leitungsabfrage, Polling per ISR oder wie auch immer, dürfte trivial 
sein und zeitlich nicht ins Gewicht fallen.

von Stefan K. (stefan64)


Lesenswert?

Wenn WLAN nicht infrage kommt, dann würde ich CAN nehmen (nur auf dem 
ESP32 vorhanden).

CAN ist Multimaster. Das Versenden von msgs der einzelnen Nodes ist 
dadurch extrem einfach. Die zusätzliche Hardware ist billig (SN65HVD23X 
oder ähnliche). Der CAN-Bus ist für längere Distanzen spezifiziert. 
Werden niedrigere Baudraten verwendet, dann sind auch längere 
Stichleitungen möglich (bzw. eine Stern-Topologie).

https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/can.html#

Gruß, Stefan

von Peter D. (peda)


Lesenswert?

Sebastian R. schrieb:
> Etwas komplexer wäre dann CAN.

Nö, RS-485 ist deutlich komplexer, weil es die dumme UART benutzt, d.h. 
vieles in Software machen muß, was bei CAN schon die Hardware selber 
macht.

Die UART ist nur ein Schieberegister mit Startbiterkennung. Eine sichere 
Datenübertragung ist damit alleine nicht möglich.
CAN macht dagegen Arbitrierung, Fehlererkennung, CRC, ACK, Retry in 
Hardware ohne jeden Programmieraufwand.

von Antenne (Gast)


Lesenswert?

bernd schrieb:
> weil WLAN für mich nicht die LANGFRISTIGE (>10 Jahre) Basis bietet.

Weil?

von Schlumpf (Gast)


Lesenswert?

bernd schrieb:
> Ich will unbedingt eine Verdrahtete Verbindung einfach weil WLAN für
> mich nicht die LANGFRISTIGE (>10 Jahre) Basis bietet.

Dein Wunsch natürlich in Ehren, wenn du deswegen zusätlichen 
Hardwareaufwand treiben willst.
Aber ist dir bewusst, dass ein ESP8266 auch als WLAN Access Point 
konfiguriert werden kann?
Somit kannst du ein ganz eingenes WLAN nur für deine ESPs einrichten, 
welches unabhängig davon, was in 10 oder 20 Jahren der Standard bei 
Routern sein wird, immer noch funktioniert.

von Silc P. (silch12)


Lesenswert?

Schlumpf schrieb:
> Somit kannst du ein ganz eingenes WLAN nur für deine ESPs einrichten,
> welches unabhängig davon, was in 10 oder 20 Jahren der Standard bei
> Routern sein wird, immer noch funktioniert.

Dasselbe wäre mit dem ESP32 und BLE auch möglich.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.