Hi, sehe ich das richtig wenn man bei einem ESP8266 (nodemcu oder wemos d1 mini) die Hardware UART mit Serial.swap() auf die Pins GPIO13 (D7) und GPIO15 (D8) legt um seriell bzw. über RS458 zu senden/empfangen dann kann man gar kein SPI über GPIO 12-15 verwenden? D.h. ein externes SPI-UART ist gar nicht mehr möglich außer über I2C?
Hallo,
ich würde das so lassen wie in standard und für die RS485 eine Softseriell einrichten.
Hast noch genau 3 Pins frei für SoftSerial 0, 15 oder 16, GPIO2 kann man auch als Eingang nutzen also sogar 4Pins. Für SPI brach man 4Pins SCK, MOSI, MISO, SS(CS). Dachte der mini ist "Armer" habe den noch nicht genutzt.
SoftwareSerial ist bereits implementiert, funktioniert aber nicht zuverlässig genug.
Empfangen wird von mehreren Stromzählern jede Sekunde ein Datenpaket mit 9600 baud 8N1, ca. 800 bytes. Diese können zeitversetzt oder auch gleichzeitig sein, da die Zähler ja keine Syncronisation haben. Nebenbei soll er über UART und RS485 mit Modbus noch weitere Zähler abfragen.
Irgendwie scheint die SoftwareSerial überfordert zu sein, obwohl alles möglichst non-blocking ist. Trotzdem kommen nicht alle Datenblöcke komplett an, insbesondere wenn diese direkt übereinanderliegen. Deshalb die Idee mit einem externem Doppel-UART mit FIFO. Dieses kann ich ja auch über I2C anschließen, das wäre ein Test wert.
Projektcode gibt es hier:
Vielen Dank schonmal für Anregungen ![]()
ESP32 mit 3 HW Serials. Reicht dir das?
Was heißt " Empfangen wird von mehreren Stromzählern" genau?
Echter Bus mit RS-485 oder nur RS232? Ein Gerät pro RS232? Wie viele insgesamt?
ESP32 mit 3 HW Serials wäre auch eine Möglichkeit, ist aber nicht mehr erweiterbar auf noch mehr Stromzähler.
1-mal RS485 Modbus für mehrere Eastron SDM120/630
X-mal UART TTL (nur RX) von einer SFH309 Infrarot Diode, jeweils separat auf ein UART
x = ?
Warum keine weiteren busfähigen Stromzähler?
Was ist der konkrete Anwendungsfall?
x kann zwischen 1 und beispielsweise 4 liegen
Die Stromzähler sind vom VNB vorgegeben und plombiert..
konkreter Anwendungsfall? Steht oben im Projekt?
Warum nimmst du keinen esp8266 12E bzw. 12F ?
Den kannst du doch erst flashen und danach die Hardware UART verwenden.
Gefallen dir die Antworten hier nicht ?
Oder warum stellst du Hier nochmal die Frage ?
Zeit nicht beachtet, sorry.
Die Antworten gefallen mir schon, schau mal auf die Zeit bei mikrocontroller.net, dort habe ich die Frage zuerst gestellt aber keine Antworten bekommen. Ist wohl etwas zu "speziell".
Du meinst ich soll einen 12 E direkt ohne "Adapter" wie Nodemcu oder Wemos verwenden? Auf die Möglichkeit bin ich noch gar nicht gekommen. Dann müsste ich ohne USB Chip die erste Version flashen oder einen manuellen Umschalter einbauen, das würde gehen..
Ok, sorry...die Zeit habe ich nicht beachtet. Dann ist es ok.
Ja, die ohne USB können mittels Adapter auch seriell geflasht werden. Danach kannst du problemlos die UART verwenden. Ich nutze dann nur noch OTA zum Flashen. Zum Flashen habe ich mir einen Adapter besorgt, auf den die Boards in Federn gehalten werden.
Da gibt es dann auch zusätzliche Platinen, die ein gängiges Raster nutzen.
Hallo
Ich hab das noch nicht verstanden , die einzelnen Zähler kannst du gezielt dazu bringen ihre Daten zu senden ?
Dann kann es doch kein Durcheinander geben. ansonsten ist das doch zum scheitern verurteilt , ich kann mir nicht vorstellen das das ansonsten zuverlässig laufen kann. Alle seriellen Bus Systeme haben doch einen Bus master der hat das zu organisieren, wer wann drann ist.
Ich hatte da noch einen anderen Vorschlag . Du nutzt für jeden Stromzähler einen eigenen ESP , z.b wemos D1 und einen weiteren als Zentrale.
Die einzelnen ESP an den Zählern lesen über Softserial die Daten aus. Die Zentrale kann dann über WLAN oder auch I2c gezielt die Daten holen ESP now ging sicher auch noch.
Für jeden Zähler einen eigenen ESP ist irgendwie Overkill, da kann ich ja gleich mehrere Hichis kaufen. Die können aber kein Modbus RS485..
Außerdem möchte ich zusätzlich eine optionale serielle Ausgabe der Daten über TTL.
Die Zähler sind alle MME wie sie auch bei euch im Zählerschrank hängen. Die senden unaufgefordert jede Sekunde ihre Daten per Infrarot raus als SML Paket. Das dekodiert der ESP und wirft die Daten über MQTT mit dem SML Code raus, z.B. den Zählerstand 1.8.0 und die kWh.
Hallo
Da bin ich dann jetzt raus , wie sollte das dann gehen wenn mehrere Zähler über eine Schnittstelle einlesen werden sollen, und die völlig unkoordiniert drauf los senden ?
Mal abgesehen davon du schreibst was von 800 byte bei 9600 sind das fast eine Sekunde für einen Zähler.
Nicht eine Schnittstelle sondern jeder Zähler bekommt mit seinem Optokopf eine eigene UART mit "nur RX".
Nur die Modbus Zähler über RS485 hängen an einem Bus und dieses wiederum an einem UART. Dieses muss aber auch senden können.
Deshalb mind. 3 UARTS nötig mit Fifo weil das SoftwareUart da nicht hinterherkommt, da reicht ein verpasstes Bit und die Prüsumme stimmt nicht mehr.
Ja der Datenimpuls ist ca. eine 3/4 Sekunde lang.
Hallo
Siehe #5
Du wirst so nicht weiter kommen, was nützen dir 3 Schnittstellen auf einem Board, wenn die aber nicht gleichzeitig Daten empfangen können. Es kann immer nur eine Schnittstelle Daten entgegen nehmen! Gleichzeitig geht da gar nix mit einem Board.
In Post 13 denke ich steht die Lösung.
Zwischen den bits bei 9600 baud und mit Hilfe des Fifos jedes UARTS wird wohl genug Zeit sein daß die Daten gelesen und verarbeitet werden? Das funktioniert ja jetzt auch schon mit Hilfe von SofwareUart, aber nicht ganz so zuverlässig. Beizeiten werde ich mal ein Oszi Bild hochladen.
Na ja das stimmt so auch nicht. Bei einer Softserial ist das ja nun mal so , jedes Bit das ankommt löst einen Interrupt aus und wir dann byteweise in einem Eingangspuffer gespeichert. die Grösse diese Puffers kann man einstellen. Mit Serial.read() wird der dann ausgelesen. Zwei Schnittstellen wird man mit 9600 schon mit softserial und je einer Instanz einlesen können.
die Softserial für den ESP8266 kann 115200 bps damit sollte sie im Stande sein bei 9600 auch mehrere Schnittstellen bedienen zu können.
Allerdings irgendwann ist Schluss , und die RS458 will ja auch irgendwann bedient werden. Hardware Serial (Uart) hätten halt den Vorteil das nicht jedes Bit die CPU belastst.
