Na wenn das schon Erleuchtung brachte, hab ich alles richtig gemacht
Wenn Du mal einen Satz fĂŒr mich hast, kannst ihn ja mal vorbei schicken. Wie, solltest Du ja noch zusammen bekommen. Ich sammel fĂŒr spĂ€tere Tests schon mal ein. Die ID kann ja verĂ€ndert werden - wo sie drin ist, weisst ja jetzt...
Nachtrag: Dein ZĂ€hler kann eine erweiterte Nachricht auf Anforderung versenden. Ich wĂŒrde die gerne mal sehen wollen. (Ab Beschreibung des ZĂ€hlers Seite 15 - INFO-Anzeige Abbildung 6)
Oh man, da hast du die 15 mit aufgelistet, ... das wird scheinbar das Problem sein.
Das schaut so aus wie das was ich hier auf dem Schreibtisch liegen habe.
GPIO[16 & 17] und [1 & 3] sollten beim Flaschen unberĂŒhrt bleiben.
Wobei 3 von @Miq1 aufgelistet ist das dieser ein Signal wÀhrend des Bootens bekommt.
[EDIT] dann gehe ich von aus das ich mir meinen IR-Transistor geschrotet habe.
Ich bestelle jetzt ein 50er pack.
Angenommen der interne Puffer (FIFO) ist also zu klein, d.h. er wĂ€re beispielsweise 64 Byte gross, aber vor der nĂ€chsten Abfrage (available) sind schon 70 Zeichen angekommen... wie kann ich den Puffer vergröĂern?
genau das ist das was mich bei den gesamten ESP32 so extrem verunsichert, stÀndig wird ein anders PIN-OUT dargestellt und ich bin mir nicht sicher ob es dann das Bord ist was ich nun habe oder nicht.
Garnicht, wenn Du die Hardwareschnittstellen benutzt. Wie soll das gehen?
Alternatuv kannst Du softwareserial benutzen.
Dort kannst Du den Puffer manuell anpassen.
Aber wem die z.B. 32 bytes nicht reichen, hat ein viel gröĂeres Problem.
Hinweis: Das ist ein reiner Ăbertragungspuffer. Du kannst mit den Daten nichts anfangen, solange die da drin sind. Siehe fĂŒr den ESP die Doku zum Aufbau UART: https://www.espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf#uart
Der ESP32 ist das quadratische silberne KĂ€stchen.
Die Platine drumrum ist das Test-Board, das jeder Hersteller nach eigenen Vorstellungen gestaltet. Soviele Hersteller es gibt, so viele Varianten existieren. GPIO6 bis GPIO11 hĂ€ngen am Flash-Speicher und sind extern nicht nutzbar und daher bei Deinem Board nicht rausgefĂŒhrt.
Nutze die fĂŒr Dich relevante Pinbelegung!
Aber: Serial1 liegt auf den Flash-Pins und wird bei Deinem Board-Pinout nicht berĂŒcksichtigt, ist aber auch bei Deinem ESP32 durchaus vorhanden. Da der ESP32 eine Pin-Matrix verwendet, kannst Du bei der Einrichtung von Serial1 RXD1 und TXD1 auf andere Pins verlegen. Bei meinem Bord ist Serial1 sichtbar:
Nö, das wÀre ja zu einfach. Das liegt an der Auswahl des Boards in der Arduino-IDE. Du brauchst so wie ich "ESP32 Dev Module". Ich habe alle anderen in der IDE ausgeblendet.
Nochmal nachgetragen:
Die Hardwareschnittstelle (UART) hat einen Puffer von genau 1 Byte. Die Interrupt-Routine hat also 1 Zeichen lang Zeit, dieses Byte in einen beliebig groĂen Software-Puffer (der bei Arduino traditionell 64 byte groĂ ist) umzukopieren. In diesem Puffer wird gnadenlos und ohne Fehlerkennzeichnung das Ă€lteste ĂŒberschrieben. read() liest aus diesem Software-Puffer jeweils das Ă€lteste noch vorhandene aber nicht gelesene Byte aus.
Jupp.
Ich bin fÀlschlich davon ausgegangen, das der ESP ebenfalls einen USART hat. Da steckt aber RAM hinter, der konfigurierbar ist. Nach dem lesen war ich dann auch schlauer.
Ein Versuch ja. Ich versteh blos noch immer nicht warum man das machen mĂŒsste.
Wenn Du mit weniger nicht auskommst, weil Du langsamer ein byte abholst, als zwei Byte kommen, dann kommt auch der 128Byte-Speicherplatz irgendwann an seine Grenzen und Du stehst vor genau dem selben Problem.
Hier hilft Dir dann - vollkommen ausserhalb der Spezifikation - vermutlich eher die Sendepause zwischen zwei Nachrichten um den Puffer leer zu lesen.
Angenommen, das Problem taucht nicht bei jedem Durchgang, sondern erst alle 10 DurchgÀnge auf, dann könnte man einfach einen Durchgang auslassen, den Puffer komplett auslesen und die Bearbeitung (die zu lange dauert) verwerfen und hÀtte anschliessend wieder genug Zeit um 9 Datenpakete korrekt zu verarbeiten.
Besser als immer wieder unvollstÀndige Daten zu verarbeiten und dann eine Anfang/Ende Sequenz nicht zu erkennen, den Puffer aber mit den (unnötigen) empfangenen daten noch voll zu haben.
Das kÀme dann wieder an dem Punkt raus, das Du eine Schleife brauchst, die die 128 Bytes ausliest, bis nichts mehr drin ist.
Dann kann ich auch von vornherein while() nehmen und spare mir die Konstruktionen drumrum.
Alternativ kann ich mit
byte x=Serial1.available();
for (byte b=0; b<x b++)
Da die ESP32 haben mehrere Modulvarianten, wichtig ist GPIO 6 bis 11 sind Tabu == interne Verbindung zum Speicher.
GPIO 34,35, 36 und 39 nur als Eingang. Such dir Pinbelegung fĂŒr dein ESP und drucke aus