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
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.