Forum: Mikrocontroller und Digitale Elektronik ESP8266 (Wemos D1) Analogwert schwankt stark


von Bernd B. (gorkde)


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"?

: Bearbeitet durch User
von Werner P. (Gast)


Lesenswert?

und welche Spannung liegt am ADC Pin vom ESP an?

von Bernd B. (gorkde)


Lesenswert?

Naja ursprünglich die des Sensors, jetzt ne feste 3,3V über 
Spannungsteiler 0,208V aktuell.

Die Höhe hat aber keinen Einfluss auf die Schwankungen

von Werner P. (Gast)


Lesenswert?

Der ADC des ESP verträgt aber maximal 1,0V. Denke den hast geschrottet.

von Einer K. (Gast)


Lesenswert?

Der ESP misst nur einigermaßen genau, wenn man das WLAN Gedöns in der 
Zeit schlafen schickt.

von Bernd B. (gorkde)


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);
}

von Werner P. (Gast)


Lesenswert?

dann bau sie halt ein.

ich arbeite mit dem SDK und habe keine Probleme den ADC zu lesen. Auch 
wenn WLAN aktiviert ist.

von Bernd B. (gorkde)


Lesenswert?

Das beruhigt, dachte schon es ist bei dem Chip normal und geht nicht 
besser.

Ich probiere es gleich mal....

von Teo D. (teoderix)


Lesenswert?

Bernd B. schrieb:
> Naja ursprünglich die des Sensors, jetzt ne feste 3,3V über
> Spannungsteiler 0,208V aktuell.

Schon mit nem Oszi gegut, ob da nich Müll eingefangen wird.

von Einer K. (Gast)


Lesenswert?

Teo D. schrieb:
> Schon mit nem Oszi gegut, ob da nich Müll eingefangen wird.
Ein kleiner Kerko sollte da Ruhe rein bringen.

von Bernd B. (gorkde)


Lesenswert?

Habe leider kein Oszilloskop, da ich  das erste mal seit 30 Jahren 
wieder intensiver sowas mache.

Habe aber schon versucht die Spannung mit Kondensatoren zu glätten,  da 
passiert garnichts. Keine Änderung.

von Bernd B. (gorkde)


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?

von Teo (Gast)


Lesenswert?

Zeig mal den Aufbau Deiner Testschaltung.

von Bernd B. (gorkde)


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!

von Bernd B. (gorkde)


Angehängte Dateien:

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)

: Bearbeitet durch User
von Epoxyd H. (fr4)


Lesenswert?

So wie es auf dem Foto aussieht gehst du mit der analogen Spannung auf 
Vin.
Kommt die analoge Spannung den amm richtigen Pin am ESP8266 an (ADC)?

von Michael U. (amiga)


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

von Teo D. (teoderix)


Lesenswert?

Mein letzter Post is wohl im Nirwana verschwunden?!

Mach mal alles weg, bis auf die Batterie. Leg den ADC so kurz wie 
möglich auf GND. Wenn's dann immer noch rumzuppelt..... Gremlin Jäger 
rufen :(

Michael U. schrieb:
> Welche Werte hat Dein Spannungsteiler?
!

von Bernd B. (gorkde)


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

von Bernd B. (gorkde)


Lesenswert?

Nachtrag, mit meinem normalen Arduiono-Klon gehts übrigens problemlos.
Das Problem habe ich nur mit ESP. Also kann es eigentlich ja keine 
Einstrahlung sein.

von Pete (Gast)


Lesenswert?

A0 auf GND?

von Bernd B. (gorkde)


Lesenswert?

? Wie meinst du?

A0 geht an den Spannungsteiler (Mitte)

von Bernd B. (gorkde)


Lesenswert?

Wenn ich A0 auf GND stecke gekt es zwischen 0 und ca 7 hin und her.

von Pete (Gast)


Lesenswert?

Leg mal A0 auf GND und schau dir an was der ESP ausgibt.

von Bernd B. (gorkde)


Lesenswert?

Eben gemacht, siehe drüber

von Michael U. (amiga)


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

von Pete (Gast)


Lesenswert?

Mhh, das ist ein bisschen viel.
Bei meinen nodeMCUs schwankte der Wert zwischen 0 und 1.
Einen Aref hat der ESP nicht, oder?

von Bernd B. (gorkde)


Lesenswert?

Das kann ich mit dem Wemos nicht machen wegen dem Gehäuse, das wäre sehr 
umständlich.

Aber ich hab ja auch ein einzelnes ESP Modul auf dem Steckbrett, was 
genau so reagiert, probiere ich da gleich nochmal

von Bernd B. (gorkde)


Lesenswert?

Was mir gerade aufgefallen ist...

Wenn ich das Board neu programmiere gehen die ersten 20 Messungen oder 
so einwandfrei und dann steigt der wert bis er blöd zwischen 0 und 7 hin 
und her springt.

Als wenn sich am Anfang irgendein Kondensator auflädt.

von Johannes S. (8n1)


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?

von Bernd B. (gorkde)


Angehängte Dateien:

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)

von Bernd B. (gorkde)


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?

von Johannes S. (8n1)


Lesenswert?

Ne, das ist ein ESP-12F. Lässt sich gut an der Antenne erkennen.

An der Firmware kann es meinen Tests nach nicht liegen, habs unter 
gleichen voraussetzungen getestet.

von Johannes S. (8n1)


Lesenswert?

Bis auf einen externen ADC zu verbauen fällt mir da jetzt leider auch 
nichts ein.

von Bernd B. (gorkde)


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?

: Bearbeitet durch User
von Johannes S. (8n1)


Lesenswert?

Ja, ist in der "user_interface.h". Einfach wie im Beispiel 
"CallSDKFunctions" das (neben vielen anderen) beim installieren der ESP 
unterstützung mitinstalliert wurde einbinden.

von Bernd B. (gorkde)


Lesenswert?

Ja, klappt, bringt nur herzlich wenig.....


Jemand ne andere Idee?

von Planlos (Gast)


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.

von Johannes S. (8n1)


Lesenswert?

Hät mich jetzt auch gewundert. "Arduino" macht ja auch nichts anderes.

Wieso umbedingt analog und kein DS18B20 oä?

: Bearbeitet durch User
von Bernd B. (gorkde)


Lesenswert?

ja, bringt nix mit dem Kondensator

von Bernd B. (gorkde)


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?

: Bearbeitet durch User
von Michael U. (amiga)


Lesenswert?

Hallo,

>ich brauche 6 zum multiplexen der Eingänge

36 analoge Eingänge?

Ich mußte erstmal nachschauen, was Blynk eigentlich ist und bin jetzt 
ein wenig neugierig: was hängt da so alles an dem armen ESP8266?

Gruß aus Berlin
Michael

von Bernd B. (gorkde)


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.

von Bernd B. (gorkde)


Lesenswert?

Scheinbar ist der korrekte Wert immer der niedrigste von den gemessenen 
(gerade ausprobiert).

Daher müsste es auch gehen wenn man 20x misst und den niedrigsten nimmt.

von Teo D. (teoderix)


Lesenswert?

Bernd B. schrieb:
> Es werden 16 Feuchtigkeitssensoren gebraucht, Temperatur,

Ich brauch zwar nur 4, hab mich aber dafür entschieden.
http://www.ebay.de/itm/311458439393?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT
Wenn nich schon alles eingekauft.....?

von Michael U. (amiga)


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

von Bernd B. (gorkde)


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

von Bernd B. (gorkde)


Lesenswert?

Keiner?

Gibts sowas wie

wifi.reconnect()  bzw.  wifi.connect() ?

Oder muss ich ganz normal wieder die Verbindung aufbauen als hätte es 
die Verbindung vorher nie gegeben?

Ich dachte dass man die kurz "totlegen" und wieder aktivieren kann.

: Bearbeitet durch User
von Dirk K. (dekoepi)


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

von Teo D. (teoderix)


Lesenswert?

Hab mit so WIFI Teilen NULL Erfahrung:
Könnte da der 9V-Block event. dafür einen zu großen Innenwiderstand 
haben?!

von Bernd B. (gorkde)


Lesenswert?

Das mit dem Kondensator hatte ich als erstes probiert, das hatte keinen 
Einfluss. Das muss RF Einstrahlung sein, wenn das Modul sendet.

von Bernd B. (gorkde)


Lesenswert?

Teo: Die Batterie war nur um auszuschließen, dass es von der 
Spannungsversorgung kommt

Habe jetzt mal 100nF SOWOHL auf 5V als auch 3,3V beim Wemos gemacht mal 
sehen....

Bisher hab ich nur eine genommen.

von Teo (Gast)


Lesenswert?

Bernd B. schrieb:
> Teo: Die Batterie war nur um auszuschließen, dass es von der
> Spannungsversorgung kommt

Sorry, hab beim überfliegen grad nix dergleichen gefunden.
Als schon an nem vernünftigen Netzteig getestet!?

von Bernd B. (gorkde)


Lesenswert?

Dann mal lesen nicht überfliegen, es kommt vom Chip

von Tek (Gast)


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.

von Dirk K. (dekoepi)


Lesenswert?

100nF ist ein guter Anfang, aber ich meinte ernsthaft 100µF Kerko oder 
Tantal mit niedrigstem ESR. Keine Alu-Elkos, deren Beinchen gerne auch 
mal Antenne spielen.

: Bearbeitet durch User
von Teo (Gast)


Lesenswert?

Bernd B. schrieb:
> Dann mal lesen nicht überfliegen, es kommt vom Chip

Oh entschuldige das ich dir helfen wollte, wird nicht mehr vorkommen.

von Bernd B. (gorkde)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.