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
bernd schrieb: > - SPI, CAN, I2C I2C ist aus meiner Sicht die einfachste Variante. Ein MCU als Master, einer als Slave
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.
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)
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?
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
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?
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"
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.
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.
> 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
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.
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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.