Auffälligkeiten bei NodeMCU/ESP

Hallo,
ich wollte mal ein wenig mit den Taktfrequenzen meiner NodeMCU (Lonin) rumspielen und
habe mir dafür folgenden - nicht sehr aussagekräftigen - Benchmark geschrieben :

uint32_t cnt = 0;
uint32_t lastm;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  lastm = millis();
  pinMode(D4,OUTPUT);
  digitalWrite(D4,LOW);
}

uint32_t minVal = 0xFFFFFFFF;
uint32_t maxVal = 0;

void loop() {

  while((millis() - lastm) < 500)
  {
    cnt++;
  }

  if (cnt > maxVal) maxVal = cnt;
  if (cnt < minVal) minVal = cnt;
  Serial.print("Loopcnt is : ");
  Serial.print(cnt);
  Serial.print(" MinVal is : ");
  Serial.print(minVal);
  Serial.print(" MaxVal is : ");
  Serial.println(maxVal);
  digitalWrite(D4,!digitalRead(D4));
  delay(1000);
  cnt = 0;
  lastm = millis();
}

Das liefert mir folgenden Output :

Loopcnt is : 416594 MinVal is : 416594 MaxVal is : 416594
scandone
state: 0 -> 2 (b0)
state: 2 -> 3 (0)
state: 3 -> 5 (10)
add 0
aid 2
cnt 
Loopcnt is : 388730 MinVal is : 388730 MaxVal is : 416594

connected with Prostetnik, channel 6
dhcp client start...
ip:192.168.123.116,mask:255.255.255.0,gw:192.168.123.252
Loopcnt is : 373235 MinVal is : 373235 MaxVal is : 416594
Loopcnt is : 358630 MinVal is : 358630 MaxVal is : 416594
Loopcnt is : 346594 MinVal is : 346594 MaxVal is : 416594
Loopcnt is : 344729 MinVal is : 344729 MaxVal is : 416594
Loopcnt is : 344669 MinVal is : 344669 MaxVal is : 416594
Loopcnt is : 331861 MinVal is : 331861 MaxVal is : 416594
Loopcnt is : 331858 MinVal is : 331858 MaxVal is : 416594
pm open,type:2 0
Loopcnt is : 331822 MinVal is : 331822 MaxVal is : 416594
Loopcnt is : 331811 MinVal is : 331811 MaxVal is : 416594
Loopcnt is : 331818 MinVal is : 331811 MaxVal is : 416594
Loopcnt is : 331798 MinVal is : 331798 MaxVal is : 416594

.
.
.
20 Min später
.
.
.
loopcnt is : 263045 MinVal is : 262623 MaxVal is : 417177
Loopcnt is : 263039 MinVal is : 262623 MaxVal is : 417177
Loopcnt is : 263041 MinVal is : 262623 MaxVal is : 417177
Loopcnt is : 263041 MinVal is : 262623 MaxVal is : 417177
Loopcnt is : 263039 MinVal is : 262623 MaxVal is : 417177
Loopcnt is : 263041 MinVal is : 262623 MaxVal is : 417177
Loopcnt is : 263041 MinVal is : 262623 MaxVal is : 417177
Loopcnt is : 263023 MinVal is : 262623 MaxVal is : 417177
Loopcnt is : 263041 MinVal is : 262623 MaxVal is : 417177
Loopcnt is : 263035 MinVal is : 262623 MaxVal is : 417177
Loopcnt is : 263038 MinVal is : 262623 MaxVal is : 417177
Loopcnt is : 263038 MinVal is : 262623 MaxVal is : 417177

Erstaunlich finde ich dabei das die Geschwindigkeit doch von Anfang an immer mehr
einbricht bis sich das Ergebnis nach ca. 20 Minuten stabilisiert.
Obwohl, gerade noch mal geguckt :

Loopcnt is : 255460 MinVal is : 255120 MaxVal is : 417177
Loopcnt is : 255477 MinVal is : 255120 MaxVal is : 417177
Loopcnt is : 255477 MinVal is : 255120 MaxVal is : 417177
Loopcnt is : 255477 MinVal is : 255120 MaxVal is : 417177
Loopcnt is : 255480 MinVal is : 255120 MaxVal is : 417177
Loopcnt is : 255480 MinVal is : 255120 MaxVal is : 417177
Loopcnt is : 255480 MinVal is : 255120 MaxVal is : 417177
Loopcnt is : 255476 MinVal is : 255120 MaxVal is : 417177
Loopcnt is : 255480 MinVal is : 255120 MaxVal is : 417177

Ist wieder langsamer geworden.
Wie kommt das. Hat das irgendwann ein Ende oder bleibt das Dingen irgendwann mal ganz stehen :sunglasses: ?

(Die Ergebnisse sind mit 160Mhz, das ganze sieht aber bei 80 genau so aus - natürlich mit kleineren
Werten).

Zum Zweiten sieht man ja am Anfang das das Teil sich mit meinem Router verbindet.
Ich hatte vorher einen Sketch drauf der das tut aber jetzt ja nicht mehr. Merkt sich die NodeMCU
über das Flaschen hinaus die Zugangsdaten und verbindet sich ohne das mein Sketch das aktiv tut ?

Ulli

Hallo,

der ESP8266 merkt sich durchaus die erfolgreichen letzten Connectdaten und versucht bereits beim Boote einen Connect. Allerdings gab es da immer wieder mal Probleme mit verschiedenen SDK-Versionen bzw. Arduino-Paketen. Mit der 2.4.2 sollte es eigentlich wieder ok sein, also er verbindet automatisch.

Versuche mal
WiFi.setAutoConnect (false);
oder / und
WiFi.setAutoReconnect (false);
ob das was ändert.

Prinzipiell bist Du eben nicht alleine mit Deinem Programm auf dem ESP.

Ich habe in der Richtung keine Experimente gemacht, brauchte ich nicht.
Der Unterschied zwischen 80MHz und 160MHz macht sich nur bei reiner rechnerei wirklich bemerkbar, MP3 mit Softwaredecoder auf dem ESP8266 geht z.B. nur bei 160MHz gerade noch sinnvoll.

Gruß aus Berlin
Michael

Das ich nicht alleine bin ist schon klar.
Für mich erklärt das den Einbruch direkt nach dem Start.
Aber ich erwarte das es sich irgendwann mal stabilisiert und nicht immer weiter langsamer
wird !

Ulli

Hallo,

ich habe Deinen Sketch von oben gerade ,al auf irgendeine NodeMCU geflasht die hier rumlag.
Mit 160MHz erhalte aich da aber andere Werte?

Loopcnt is : 219452 MinVal is : 219452 MaxVal is : 219452
Loopcnt is : 219798 MinVal is : 219452 MaxVal is : 219798
Loopcnt is : 219828 MinVal is : 219452 MaxVal is : 219828
Loopcnt is : 219844 MinVal is : 219452 MaxVal is : 219844
Loopcnt is : 219847 MinVal is : 219452 MaxVal is : 219847
Loopcnt is : 219863 MinVal is : 219452 MaxVal is : 219863
Loopcnt is : 219868 MinVal is : 219452 MaxVal is : 219868
Loopcnt is : 219861 MinVal is : 219452 MaxVal is : 219868
Loopcnt is : 219859 MinVal is : 219452 MaxVal is : 219868
Loopcnt is : 219824 MinVal is : 219452 MaxVal is : 219868
Loopcnt is : 219829 MinVal is : 219452 MaxVal is : 219868
Loopcnt is : 219834 MinVal is : 219452 MaxVal is : 219868
Loopcnt is : 219829 MinVal is : 219452 MaxVal is : 219868
Loopcnt is : 219823 MinVal is : 219452 MaxVal is : 219868
Loopcnt is : 219825 MinVal is : 219452 MaxVal is : 219868
Loopcnt is : 219837 MinVal is : 219452 MaxVal is : 219868
Loopcnt is : 219828 MinVal is : 219452 MaxVal is : 219868
Loopcnt is : 219819 MinVal is : 219452 MaxVal is : 219868
Loopcnt is : 219826 MinVal is : 219452 MaxVal is : 219868
Loopcnt is : 219826 MinVal is : 219452 MaxVal is : 219868
Loopcnt is : 219824 MinVal is : 219452 MaxVal is : 219868

Ab dem 6. Zyklus also Min/Max praktisch konstant.
Habe ich was übersehen?

Hier nco ein Wemos D1 Mini:
Loopcnt is : 219631 MinVal is : 219631 MaxVal is : 219631
Loopcnt is : 219782 MinVal is : 219631 MaxVal is : 219782
Loopcnt is : 219828 MinVal is : 219631 MaxVal is : 219828
Loopcnt is : 219848 MinVal is : 219631 MaxVal is : 219848
Loopcnt is : 219860 MinVal is : 219631 MaxVal is : 219860
Loopcnt is : 219872 MinVal is : 219631 MaxVal is : 219872
Loopcnt is : 219869 MinVal is : 219631 MaxVal is : 219872
Loopcnt is : 219862 MinVal is : 219631 MaxVal is : 219872
Loopcnt is : 219839 MinVal is : 219631 MaxVal is : 219872
Loopcnt is : 219823 MinVal is : 219631 MaxVal is : 219872
Loopcnt is : 219828 MinVal is : 219631 MaxVal is : 219872
Loopcnt is : 219817 MinVal is : 219631 MaxVal is : 219872
Loopcnt is : 219834 MinVal is : 219631 MaxVal is : 219872
Loopcnt is : 219839 MinVal is : 219631 MaxVal is : 219872
Loopcnt is : 219844 MinVal is : 219631 MaxVal is : 219872
Loopcnt is : 219838 MinVal is : 219631 MaxVal is : 219872
Loopcnt is : 219833 MinVal is : 219631 MaxVal is : 219872

Gruß aus Berlin
Michael

Moin,

Ich habe auch schon mal festgestellt, das ein nodeMCU ESP8266 langsamer wird.
Ich habe einen Drehzahlmesser gebaut und wollte wissen wie viele Schleifendurchgänge der MC schafft, also habe ich mir diese ausgeben lassen.
Dann habe ich die in Excel reinkopiert und ein Diagramm erstellt.
Siehe da, die Schleifendurchgänge Folgen einer Funktion.
Erst bricht die Geschwindigkeit schnell ein, dann immer langsamer.
Ich habe das aber nicht weiter verfolgt, weil die Schleifendurchgänge wesentlich schneller waren als die Frequenzen, die ich damit Messe.

Lieben Gruß,
Chris

Hallo,

themanfrommoon:
Ich habe auch schon mal festgestellt, das ein nodeMCU ESP8266 langsamer wird.
Dann habe ich die in Excel reinkopiert und ein Diagramm erstellt.
Siehe da, die Schleifendurchgänge Folgen einer Funktion.
Erst bricht die Geschwindigkeit schnell ein, dann immer langsamer.
Ich habe das aber nicht weiter verfolgt, weil die Schleifendurchgänge wesentlich schneller waren als die Frequenzen, die ich damit Messe.

und wann bleibt er dann in etwa stehen?

Ich werde mal in meine Schaltleiste einen Loop-Count einbauen. Da läuft OTA, MQTT, Webserver und WeMo-Switch (Alexa) drauf. Kann ich mir dann alle Sekunde per MQTT schicken lassen und in FHEM mal mitloggen.

Erklären könnte ich mir solch ein Phänomen nicht so richtig.

So, ich habe das mal schnell eingebaut, aber noch ohne mitloggen.
Die Anzahl Durchläufe schwankt im Moment zwischen 476 und 480. Es gibt im Code keinerlei delay();
Beim Aufruf der Config-Webseite geht er auch ca. 135 runter, logisch. Ansonten eben danach wieder zwischen 476 und 480.

Ich laß das mal zum Spaß so laufen und schaue nur im MQTT.fx nach.

Gruß aus Berlin
Michael

So, ich habe das mal schnell eingebaut, aber noch ohne mitloggen.
Die Anzahl Durchläufe schwankt im Moment zwischen 476 und 480. Es gibt im Code keinerlei delay();
Beim Aufruf der Config-Webseite geht er auch ca. 135 runter, logisch. Ansonten eben danach wieder zwischen 476 und 480.

Ich laß das mal zum Spaß so laufen und schaue nur im MQTT.fx nach.

Was ist draus geworden?

Lieben Gruß,
Chris

Hallo,

themanfrommoon:
Was ist draus geworden?

Lieben Gruß,
Chris

ich gebe zu, Deine Frage hat mich erstmal kurz verwirrt, ich hatte das längst vergessen...

Die Firmware meiner Schaltleiste konnte sich noch darn erinnern, geloggt habe das ich allerdings nie.

MQTT.fx sagt immernoch 482..485 ist also eigentlich sogar schneller geworden... :wink:

Gruß aus Berlin
Michael

Hallo,

ich hab das gerade mal gesesen,

Temperatur ? Frequenz nicht stabil nur so ne Idee.

Heinz

Hallo,

Rentner:
Temperatur ? Frequenz nicht stabil nur so ne Idee.

naja, für mich ist es keine wirkliche Abweichung, der ESP macht ja was, AsyncMQTT und der WemoManager (Alexa) laufen ja ständig, da wird es immer Abweichungen geben. Ging ja ursprünglich um ein merkliches langsamer werden über die Laufzeit bei beeblebrox und themanfrommoon. Konnte ich mir nicht erklären und jetzt auch nicht nachvollziehen.

Gruß aus Berlin
Michael

Warum muss man daran spielen?
Sei froh, dass das Teil überhaupt funktioniert.
Nicht mal der China Hersteller (ESPRESSIFF) hat Antworten, wenn die Anwender Probleme haben.
Nach anfänglichen Schwierigkeiten liebe ich inzwischen diesen Chip (viel Speicherplatz im Vergleich zum ATMega auf dem Arduino). WiFi ist integriert und funktioniert.
Ist eben nicht für Batteriebetrieb geeignet, weil WiFi 200 mA oder sogar mehr braucht.
Ich habe jetzt seit ca. 8 Monaten meine Wetterstation laufen, ohne mullen und knullen.
Das Teil sendet pünktlich alle 20 Minuten die Daten an meinen SQL Server. Mein MagicMirror zeigt mir dann alle Daten an. Der Wetterbericht sagt so, die Wetterstation auf dem Dach sagt so.
Da ich noch ein paar mehr GPIO's brauchte, bin ich auf den ESP32 umgestiegen.Noch mehr Speicher, noch mehr Pins, noch mehr Funktionen. Aber auch noch mehr graue Haare.
Einfach so den Sketch vom ESP8266 auf den ESP32 übernehmen, geht nicht. Der Compiler haut dann zig Fehlermeldungen raus.
Ganz langsam Ursachen analysieren und beheben. Dabei stößt du bei der Suche bestimmt auch auf Foren und Posts, die in die Mülltonne gehören. Ging mir auch so. Try and Error
Jetzt rennt das Teil, dass es kaum besser sein könnte.

Hi

Wenn Es 'nur'(!!) I/Os sein sollen, Die dem Super-µC fehlen, warum keine Port-Expander?
Da könnte das Programm Da bleiben, wo Es bereits ewig und zur vollen Zufriedenheit läuft und man hat mit 2 Pins (I²C) nahezu beliebig viele I/Os zum Spielen.
Vll. nicht für die Zeit-kritischsten Sachen, aber für einen Button oder einen Low-Aktiven Aktor (die Dinger können nur nach GND ziehen - zumindest hatte ich noch keine Anderen gesehen - hat aber Nichts zu heißen) dicke ausreichend.

MfG