ESP8266 (Wemos D1) Analogwert schwankt stark

OP #4613191
Lesenswert?

Hallo,

ich will eine Temperatur messen und bekam stark schwankende Werte.
Die habe ich durch Interpolation stabilisiert, aber gedacht da kann was 
nicht stimmen und es genauer untersucht.

Mittlerweile ist klar, der Analogwert den der ESP8266 misst schwankt 
stark.

Der wert schwankt bis zu 10 von 1024 Punkten hin und her, obwohl die 
Eingangsspannung konstant ist.

Ich habe einen LD1117V33 als externe 3,3V Spannung (Masse natürlich mit 
ESP verbunden) und diese zum Messen über einen Spannungsteiler direkt 
auf den Eingang gegeben. Es sollte (und ist auch messbar) also eine 
konstante Spannung am Analogpin anliegen.

Allerdings schwankt der gemessene Wert wie gesagt um bis zu 10 hin und 
her.

Das Program zum testen habe ich auch ganz ganz simpel gehalten:

  Serial.println(analogRead(0));
  delay(100);

Was kann das sein und wie kann ich das beheben?


EDIT:
Habs gerade mal mit einem anderen Arduino uno getestet, da schwnakt es 
0-1, was ich für normal halte.
Ist der also defekt, oder ist das beim ESP etwa "normal"?
OP #4613295
Lesenswert?

1. Er MISST nur 1V Soweit ich weiß, kaputt gehen tut er glaub ich nicht

2. Es lagen nie mehr als 1V an, da ich das weiß, daher kann ich den 
nicht geschrottet haben

3. Das selbe haben auch andere ESPs die ich eben gestestet habe, sogar 
viel extremere Schwankungen


Das einzige was ich gerade überlege muss ich trotzdem ich garnichts groß 
nutze die ESP Bibliothek einbauen? Kann das der Grund sein?


Hier der komplette Programmcode:

void setup()
{
  Serial.begin(115200);
}

void loop()
{
  Serial.println(analogRead(0));
  delay(100);
}
OP #4613354
Lesenswert?

So ich habe jetzt nochmal nachgesehen, die 3,3V sind stabil, habe 
nochmal ein RC Glied vorgeschaltet.

Ich habe das SDK ja in den Einstellungen des Arduino IDE drin, aber ne 
spezielle Bibliothek muss ich nicht einbinden oder?

Ich verstehe das Problem nicht, wenn es bei euch nciht auftritt.

Muss ich denn irgendwie anders als ich es mache den Pin auslesen?
OP #4613387
Lesenswert?

1)
Ich habe in der Arduino IDE unter Voreinstellungen Zusätzliche 
Boardverwalter URLs eingetragen:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Korrekt?
Der ESP wird mir ja auch angezeigt.


2)
Das Programm lautet (komplett):

void setup()
{
  Serial.begin(115200);
}

void loop()
{
  Serial.println(analogRead(0));
  delay(100);
}


3) Hardware:

Entweder Wemos D1 oder

ESP8266 direkt:
Vcc, Reset, EN    direkt auf +3,3V v. Spannungsregler
GND, GPIO15    direkt auf GND
GPIO0 10k pullup gegen 3,3V, per Taster gegen GND
TX/RX verbunden


Also so viel falsch machen kann man da ja nicht, ich raffe nciht was 
schief läuft!
OP #4613464
Lesenswert?

Ich habe inzwischen folgendes probiert, alles ohne irgendeine Änderung:

1. Spannungsteiler direkt am WEMOS D1 statt externe Spannung (vorher 
Netzteil und Spannungsregler)
2. Anderer COM Port am Rechner
3. Wemos zusätzlich durch 9V Batterie mit Spannung versorgt

Wie gesagt sowohl mit Wemos D1 als auch mit ESP-13F die gleichen 
Schwankungen.

Am Analogpin liegen 0,206V an.

Was mir auch unerklärlich ist ist wieviel Speicher das kleine Programm 
angeblich belegt. Das ergibt doch keinen Sinn?!  (SIEHE BILD)
Angehängte Dateien:
#4613512
Lesenswert?

Hallo,

Speicherbelegung ist normal. Die Systemsoftware des ESP8266 incl. WLAN 
usw. wird generell eingebunden.

Die ESP8266WiFi.h sind letztlich nur ein paar Hilfroutinen um aus der 
Arduino-IDE in "bekannter" Art die SDK-Routinen nutzen zu können.
Du kannst ja mal einen leeren Sketch compilieren, Dein Programm belegt 
um die 700 Byte.

Mit dem ADC habe ich keine Probleme, allerdings bisher nur einmal 
genutzt: 100k/390k Spannungsteiler an der Li-Io-Zelle vor dem MCP1703.
Auch beim Test im Vorfeld schwankten die Werte nur +- i Bit.

Welche Werte hat Dein Spannungsteiler? Nicht daß auf dem Boatd den 
Leitungen da war reinsaut.

Gruß aus Berlin
Michael
OP #4613533
Lesenswert?

Ich habe aktuell 1K/680R aber mit dem Temperaturfühler der ne feste 
Spannung liefert ging es ja auch nicht.

Der Eingang steckt auf A0, das sieht nur so aus.

Kann das irgendwie an den Bibliotheken liegen die eingebunden werden?

Also noch simpler kann ich die Schaltung und das Programm nicht bauen, 
ich habe keine Idee wo ich jetzt noch nach dem Fehler suchen soll.

Dass 2 Boards defekt sein sollen und genau den selben Fehler haben kann 
ich auch nciht glauben, zumal die von verschiedenen Händlern kommen 
(aber beide aus China, aber da kaufen ja viele).
#4613557
Lesenswert?

Hallo,

laß mal Deinen Sketch laufen und mach eine Brücke direkt zwischen dem 
ADC-Eingang und GND auf dem ESp-Modul. Belegung des ESP8266-12 findest 
Du im Netz.
Ich trau dem Layout der Leiterplatte nicht.
Der ESP zieht merkliche Impulsströme. Wenn da die Masse nicht sehr 
sauber angebunden ist, kannst Du vermutlich den ADC zur Strommessung des 
ESP-Moduls nehmen...

Nicht, weil ich Probleme mit den chinesischen Fertigern habe, ich habe 
aber hier ProMini und hatte auch schon ein NodeMCU-Modul, wo wohl der 
Autorouter mehr schlecht als recht randurfte.

Gruß aus Berlin
Michael
#4613584
Lesenswert?

Ist bei meinem Wemos (D1 Mini) das gleiche. Allerdings schwankt der Wert 
bei meinem "nur" ca. 7 statt 10 punkte.
Es macht auch keinen unterschied gemacht ob ich die Messspannung am 
Wemos (also zusätlich noch über den on-board Teiler gehe) oder direkt am 
ADC pin vom ESP Modul anlege.

Das einzige was hilft ist das WLAN zu deaktieren: WiFi.disconnect()
Dann ist ruhe.

Bei den ESP Modulen die ich sonst hier rumliegen habe schwankt der Wert 
auch mit aktiviertem WLAN nicht so stark.
Allerdings hab ich sonst nur ESP-07, -12 und -12E im Einsatz und keinen 
ESP-12F. Vielleicht liegt es ja an dem?
OP #4613610
Lesenswert?

Also ich hab ja auch den Wemos der hat ja nen 12E drauf, das selbe.

habe jetzt folgende Minimalkonfiguration Siehe Bild.

Serielle Verbindung gekappt und Seriell deaktiviert
Damit man es trotzdem sieht habe ich das hier geschrieben:


int Speicher = 0;

void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop()
{
  Speicher = analogRead(A0);
  if (Speicher >= 6)
  {
    digitalWrite(LED_BUILTIN, LOW);
  }
  else
  {
    digitalWrite(LED_BUILTIN, HIGH);
  }
  delay(100);
}

Habe das ganze auch in eine mit GND verbundene Alufolie eingewickelt um 
Einstreuungen auszuschließen (mit kleinem Loch für die LED). Auch das 
Selbe.

Ok, das mit WiFi probiere ich gleich mal.
Nun sagen ja aber einige sie haben das nicht und du hast es auch nicht 
mit jedem Modul.

Jetzt wäre die Frage ob es von der Firmware Version abhängt. Kannst Du 
die mal auslesen (oder jemand der das Problem nicht hat)
Angehängte Dateien:
OP #4613621
Lesenswert?

Stimmt WiFi aus und es geht.

Nun stehe ich vor dem nächsten Problem....

Ich habe gerade meine Schaltung umgestellt.
Eigentlich wollte ich den ESP per AT Firmware mit einem  ProMini 
verbinden und Blynk nutzen.

Blynk aber lief per AT Firmware schlecht und brach immer ab. Daher wurde 
mir geraten direkt ein Wemos/ESP zu nehmen.

Da ich die eh da hatte hab ich mich schweren Herzens dazu entschlossen 
und alles umgestellt und den Schaltplan entsprechend angepasst.

Jetzt geht vielleicht Blynk, aber dafür sind meine Messungen für den 
A....

Ich kann ja schlecht bei jeder Messung das Wifi deaktivieren.

Gibts da ne Möglichkeit?
OP #4613703
Lesenswert?

Also....

Wenn man

  WiFi.mode(WIFI_AP_STA);

einstellt schwankt es bei mir schwächer, dann ist aber immer der Access 
Point im Modul an und teilweise bringts viel teilweise kaum was.

Ich habe im Netz gefunden, wenn man statt analogread()

System_adc_read ();

benutzt sollen die Werte stimmen. Allerdings gibt es mir nen Fehler beim 
Kompilieren, weil er es nicht kennt.

Daher... WIE?

Ist scheinbar in user_interface.h im NONOS SDK, aber kann man die 
Funktionen auch auf Arduino nutzen?
Gast #4613747
Lesenswert?

U. F. schrieb:
> Ein kleiner Kerko sollte da Ruhe rein bringen.

hast du ausprobiert?

Also Zusatz-Kerko zwischen Analog-Eingang und GND, nicht nur an den 
3.3V-Spannungsregler.

Ansonsten:

Mehrfach messen, (gleitenden) Mittelwert bilden. Temperaturen ändern 
sich üblicherweise nicht abrupt.
OP #4613759
Lesenswert?

Naja ich messe nicht nur die Temperatur ich habe diverse andere Sensoren 
die ich da rauf schalten muss.

Und externer ADC geht auch nicht, man hat 11 Pins -2 für Seriell sind 9 
und ich brauche 6 zum multiplexen der Eingänge und 3 für Schieberegister 
um Ausgänge zu erweitern....

daher war ja eigentlich geplant den ESP per AT Firmware mit dem Mini zu 
verbinden, aber die AT Firmware haute mit Blynk nicht richtig hin. Da 
brach immer wieder die Verbindung wegen buffer overflow ab.

Ich vermute da ist ein Problem in der Blynk Bibliothek.

Oder kann mir bei dem  Problem jemand ne Lösung anbieten wie ich das zum 
Laufen bekomme?
OP #4613814
Lesenswert?

Es werden 16 Feuchtigkeitssensoren gebraucht, Temperatur, Helligkeit, 2x 
Wasserstand im Tank und dann halt Reserve. Aber da ich eh mehr als 2 
Multiplexer brauche, kann ich die auch so schalten, dass ich 64 Eingänge 
habe. Die Anzahl der Pins die ich brauche ist gleich.
#4613827
Lesenswert?

Hallo,

rechnen kann ich auch nicht mehr, ich meinte ja 64...

2x MCP23S17 am SPI hätten 32 I/O die man Byteweise ansprechen kann.
3x 8 Ausgänge und 1x 8 um den Analog-Mux anzusprechen.
Mehr als 10MHz SPI-Clock können die aber wirklich nicht, meine laufen 
mit 8MHz.

Ich hatte eigentlich auch mal wenige ESP8266-12F irgendwo mitbestellt, 
ich muß mal meinen Bekannten zum Testen überreden, der hat die meisten 
bekommen und ich weiß im Moment nicht, wo ich meine eingebaut habe.

Gruß aus Berlin
Michael
OP #4614312
Lesenswert?

Nochmal ne Frage zum WiFI.disconnect();

Wie kriege ich das dann wieder an?

Und gibt es die Möglichkeit das WiFi vielleicht zu pausieren, damit er 
nicht jedes Mal die Verbindung neu aufbauen muss?

Ich habe nämlich Anwendungsfälle wo ich auslesen und direkt wieder 
online anzeigen muss immer abwechselnd. Wen ich da 5x die Sekunde Wlan 
unterbreche kann ich mir jetzt schon denken, dass neue Probleme vor der 
Tür stehen....
#4615687
Lesenswert?

Ich habe das noch nicht explizit hier gesehen - aber an meinen ESP-01 
habe ich über Vcc und GND einen 100µF-Kondensator (Kerko/Tantal) 
gelötet. Damit laufen die stabil; zuvor direkt an beliebigen 3,3V 
LDOs/StepDowns hat gerne das WLAN gezickt, da die Stromspitzen nicht 
ausreichend bedient wurden.

Das dürfte offenbar auch für die NodeMCU/Wemos/...-Abwandlungen 
hilfreich sein. Bei stabilisierter Versorgung sollte der ADC auch 
stabilere Werte liefern. (Ohne die Kondensatoren haben auch die Werte 
der zusätzlich an den ESP angeschlossenen und gemeinsam mitversorgten 
DHT22/Si7021 größere Schwankungen gehabt, die intern ebenfalls mit einem 
ADC arbeiten ...)
Gast #4616113
Lesenswert?

Bernd B. schrieb:
> Habe jetzt mal 100nF SOWOHL auf 5V als auch 3,3V beim Wemos gemacht mal
> sehen....

Kann sein das das zu wenig ist, der ESP zieht teilweise bis zu 400mA.

Um die Versorgungsspannung auszuschliessen würde ich hal mal mit nem 
Oszi schauen ob die nicht doch ab und an einbricht.
OP #4616383
Lesenswert?

War nicht so gemeint, aber an dem waren wir schon lange vorbei ;)

Also ich habe mittlerweile gefunden dass Expressif die ADC Routine in 
der aktuellen Version abgeändert hat, aber in der Arduino Library wird 
noch das alte benutzt.

Auch dort haben Leute das selbe Problem.
Gast #7818928
Lesenswert?

Philipp schrieb:

falls noch aktiv => wäre es interessant wie du es gelöst hast.

Der ADC arbeitet deutlich genauer, während WLAN ausgeschaltet ist. Blöd ist allerdings, dass der Chip zum Umschalten jedes mal neu booten muss.

Ansonsten bleibt dir wohl nur, einen anderen externen ADC zu verwenden.

Gast #7819407
Lesenswert?

Philipp schrieb:

Kann man Daten irgendwie speichern, so dass diese nach dem Reboot nicht verloren gehen?

Neben dem Vorschlag mit dem sollte man wissen, das die RTC 768 Byte zusätzlichen Speicher enthält, der den Deep-Sleep Modus (jedoch nicht Power-Down) überlebt. Davon sind die ersten 256 Bytes allerdings reserviert. Die hinteren 512 Bytes kannst du frei nutzen.

Man kommt da mit ESP.rtcUserMemoryRead() und ESP.rtcUserMemoryWrite() heran.

OP #7833597
Lesenswert?

Ich habe damals ne routine geschrieben, die nen Mittelwert bei mehreren Messungen bildet, das hat ausreichend gut funktioniert.

Es gab aber noch nem Beitrag irgendwo, wo eine recht simple!Lösung des Problems drin stand, hab ich irgendwo auf meinem Rechner gespeichert damals, komm ich jetzt aber nicht mal eben ran.

Ich meine der Thread hieß irgendwas mit "ADC fluctuating" wahrscheinlich noch der Chip davor.

Ich meine es war im Forum bei espressif oder sowas.....

#7833601
Lesenswert?

Bernd B. schrieb:

Ich habe damals ne routine geschrieben, die nen Mittelwert bei mehreren Messungen bildet, das hat ausreichend gut funktioniert.

Mittelwert hilft gegen statistische Schwankungen. Es kommt auf die Anwendung an, wie oft man Messen muss, damit das ausreichend gut funktioniert. Außerdem muss man sicher sein, dass der Mittelwert nicht verfälscht ist (systematische, einseitige Störung, die zu Verschiebung führt). Besser ist es meist, den Verursacher der Störung zu identifzieren und das Übel an der Quelle zu beseitigen.

#7833612
Lesenswert?

Rainer W. schrieb:

Besser ist es meist, den Verursacher der Störung zu identifzieren und das Übel an der Quelle zu beseitigen.

Mit einem Steckbrettaufbau hatte ich mal an einem PWM Ausgang mit nachgeschaltetem RC-Glied im 3 Sekundentakt eine Spannungsschwankung von 50mV. Mit dem finalen Layout (mit Automasse) war der Fehler dann weg.

Der ESP8266 hat temporär eine Stromaufnahme bis zu 450mA!

Gast #7833647
Lesenswert?

Rainer W. schrieb:

Bei 16-Bit ADCs macht man das meistens so

Ja, aber nicht bei Espressif. Die verkaufen lieber einen werbewirksamen 12 Bit ADC, obwohl er effektiv nicht mal 10 Bit schafft. Die Board-Hersteller kombinieren dass zudem oft mit zu schwachen und zu trägen Spannungsreglern und zu wenig Kondensatoren. Nicht zu vergessen die Flash-Chips, die im Deep-Sleep Modus ausfallen, sowie OLEDs, die nach 3 Monaten schon verschlissen sind.

Das ist bei chinesischen Produkten aber typisch, solange niemand behaupten kann, das Produkt würde nicht funktionieren.

OP #7833825
Lesenswert?

Ist ja super, wie ihr euch da rein steigern könnt.

Leider hat es manchmal Gründe warum mam das so plant und man eben nicht noch nen anderen ADC nehmen kann.

Es ging ja hier um ne Lösung das Problem mit diesem Chip zu beheben und nicht ne andere Schaltung aufzubauen.

Wie auch immer, ich hab das Problem für mich damals ausreichend gut lösen können, im anderen Thread sind weitere Lösungen, die helfen sollten und es gibt wie gesagt irgendwo noch einen Thread mit noch besseren Lösungen. Den bitte selbst suchen.

So ich beende mal mein Abbo für diesen Thread.

(Firma: Q3) #7835269
Lesenswert?

Noch ein Tip zum Aufbereiten der Messwerte, auch wenn es besser wäre, die Ursache in der Hardware zu finden und zu beseitigen:

  • z.B. 10 Messwerte holen
  • die der Größe nach sortieren
  • die 3 größten und die 3 kleinsten ignorieren
  • aus den verbleibenden mittleren 4 einen Mittelwert bilden

nennt sich in der Statistik "windowing" ...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren