Forum: Mikrocontroller und Digitale Elektronik analog erweiterung für ESP8266


von Klaus (Gast)


Lesenswert?

Hallo

Ich habe einen ESP8266, genauer ein NodeMCU V2
und möchte gerne mehrere analoge Eingänge nutzen.

Meine erste Idee ist es, mit Transistoren meine verschiedenen Sensoren 
(Potis als Spannungteiler) nacheinander auf den A0 Eingang zu schalten.
Dabei würde ich aber immer einen digitalen Eingang "opfern" müssen.

Gibt es da eine elegantere Lösung?

Ich bräuchte 4 analoge Eingänge und die Auflösung von 1023 Schritten bei 
3.3V reicht aus,
mehr wäre aber eine interessante "Spielerei".

Danke für eure Antworten
wenn ich notwendige Angaben vergessen haben sollte,
bitte nicht gleich steinigen :-)

von Timmo H. (masterfx)


Lesenswert?

Wie wäre es mit i2c? Z. B. ADS1115 oder ADS1015

von Einer K. (Gast)


Lesenswert?

Hmm....

Entweder einen fertigen Analogmultiplexer,

oder ein I2C/SPI ADC
z.B.: ADS1115

Von einem Transistorgeweih, würde ich Abstand nehmen

von Joachim S. (oyo)


Lesenswert?

Ich würde auch einen Multiplexer vorschlagen, z.B. einen CD4051. Dann 
kommst Du für 4 analoge Eingänge mit 2 GPIO-Pins aus. Und wenn Du noch 
einen GPIO-Pin mehr opferst, dann kannst Du sogar zwischen 8 analogen 
Eingänge wechseln.

von (prx) A. K. (prx)


Lesenswert?

Analogmuxer gibts viele, darunter auch den etwas besseren 74HC4051.

: Bearbeitet durch User
von Klaus (Gast)


Lesenswert?

Hallo und danke für die ganten Antworten!

Wenn ich das richtig verstehe, ist ein I2C Modul einfacher anzusprechen,
da ich jeden der 4 Kanäle über das I2C protokoll ansprechen kann
und im Endeffekt gar nicht merke, dass der ESP nur einen analogen 
Eingang besitzt.

Bei den anderen Multiplexern ist das schon etwas aufwändiger.

Dafür sind die Preisuntershcieden enorm.
Die I2C Teile finde ich nur als Breakout für 15€.

Gibt es die auch in günstiger?
Muss ja nicht gleich 10 Bit sein :-)

von Roland P. (pram)


Lesenswert?

Google mal nach PCF8591 - der hat 8 bit und gibts sogar für < 2 € auf 
einem Break-Out Board in der Bucht.

von Normal Z. (normalzeit)


Lesenswert?

Den ADS1115 (4 Kanal, 16 bit) kriegst doch schon für knapp 7 Eurotaler 
inkl. Versandkosten bei eBay aus Deutschland, wäre dann sogar schon am 
Wochenende da.

http://www.ebay.de/itm/ADS1115-AD-Wandler-16-bit-I2C-TWI-ADC-analog-digital-Arduino-Raspberry-Pi-I06-/172360594596?hash=item28217df4a4:g:faYAAOSwYIxX8AHK

von X4U (Gast)


Lesenswert?

Klaus schrieb:
> und im Endeffekt gar nicht merke, dass der ESP nur einen analogen
> Eingang besitzt.

Warum nimmst du nicht gleich einen fertigen A/D Wandler mit mehreren 
Eingangskanälen und klemmst ihn an I2C oder (imho besser) an die SPI?

Dann must du auch nicht mit den 3,3 V Eingangsbereich auskommen, kannst 
Auflösung, Genauigkeit und Geschwindigkeit frei wählen und auch 
differentielle Typen nehmen

von Joachim S. (oyo)


Lesenswert?

Klaus schrieb:
> Wenn ich das richtig verstehe, ist ein I2C Modul einfacher anzusprechen,
> da ich jeden der 4 Kanäle über das I2C protokoll ansprechen kann
> und im Endeffekt gar nicht merke, dass der ESP nur einen analogen
> Eingang besitzt.
>
> Bei den anderen Multiplexern ist das schon etwas aufwändiger.

Das verstehe ich nicht ganz, was genau ist bei einem Multiplexer wie dem 
4051 Deiner Meinung nach aufwändiger?

Meiner Meinung nach ist es eher genau umgekehrt: Die Verwendung eines 
4051 ist weniger aufwändig; um einen bestimmten analogen Kanal 
auszuwählen, den Du messen willst, musst Du lediglich zwei GPIO-Pins auf 
high oder low setzen, ansonsten benutzt Du die ganz normalen 
ADC-Funktionen des ESP8266. Einfacher geht's doch gar nicht...
Bei I2C hingegen musst Du mit einem anderen IC per I2C kommunizieren, 
der Software-Aufwand ist da doch offensichtlich sehr viel höher?

Und für Deine vier ADC-Kanäle benötigst Du in beiden Fällen zwei 
IO-Pins, auch da spart man also vermutlich nichts.

So einen teuren per I2C angebundenen ADC mit mehreren Kanälen würde ich 
persönlich nur dann benutzen, wenn für die konkrete Verwendung 
mindestens einer der folgenden Vorteile dieser ICs wichtig wäre:
- Der ADC des ESP8266 kann ungenutzt bleiben und stattdessen die am 
ESP8266 anliegende Spannung gemessen werden
- Der angedachte ADC-IC hat wichtige Vorteile gegenüber dem internen ADC 
des ESP8266, z.B. höhere Auflösung, grösserer Spannungsbereich o.Ä.
- IO-Pins sind extrem knapp, UND es wird eh bereits I2C für etwas 
anderes genutzt, zur I2C-Anbindung des ADC-IC werden also keine 
zusätzlichen IO-Pins benötigt

von Stefan F. (Gast)


Lesenswert?

Hast du bedacht, dass der analoge Eingang des ESP nur sinnvoll nutzbar 
ist, während dessen WLAN Interface abgeschaltet ist?

Du könntest einen AVR Mikrocontroller dran hängen. Der könnte zusätzlich 
den ESP überwachen und ggf resetten. Und er würde (je nach größe) noch 
weitere I/O Pins frei haben. Du könntest ihn wahlweise seriell, per I2C 
oder SPI ansteuern.

Wenn du einen Arduino Nano clone nimmst, bekommst du sogar noch ein USB 
Interface dazu geschenkt. Dann hättest du statt NodeMCU ein ESP-12 Modul 
oder gar ein ESP-01 Modul verwenden können.

(Aber immer, wenn ich solche Kombinationen empfehle, werde ich ja 
gehänselt.)

von Kolja L. (kolja82)


Lesenswert?

Stefan U. schrieb:
> Hast du bedacht, dass der analoge Eingang des ESP nur sinnvoll nutzbar
> ist, während dessen WLAN Interface abgeschaltet ist?

Wo bekomme ich denn weitere Informationen dazu?

von Stefan F. (Gast)


Lesenswert?

Im aktuellen Datenblatt des ESP8266EX Chips auf 
http://espressif.com/en/products/hardware/esp8266ex/resources .

Ich erinnere mich an die Angabe, dass mit 20% Abweichung durch HF 
Einstreuung zu rechnen ist. Ganz so schlimm war es bei meinen 
Experimenten zwar nicht, aber immerhin 10%.

Nachtrag: Sorry, ich finde den Absatz nicht mehr wieder. Vor zwei Wochen 
stand da aber noch etwas zu drin. Ich sehe, dass auch gerade eben wieder 
eine neue Version des Datenblattes veröffentlicht wurde.

von Joachim S. (oyo)


Lesenswert?

Stefan U. schrieb:
> Im aktuellen Datenblatt des ESP8266EX Chips auf
> http://espressif.com/en/products/hardware/esp8266ex/resources .
>
> Ich erinnere mich an die Angabe, dass mit 20% Abweichung durch HF
> Einstreuung zu rechnen ist. Ganz so schlimm war es bei meinen
> Experimenten zwar nicht, aber immerhin 10%.
>
> Nachtrag: Sorry, ich finde den Absatz nicht mehr wieder. Vor zwei Wochen
> stand da aber noch etwas zu drin. Ich sehe, dass auch gerade eben wieder
> eine neue Version des Datenblattes veröffentlicht wurde.

Da hat es bei der neuesten Version tatsächlich eine Änderung gegeben. In 
Version 5.3 des Datenblatts stand beim ADC noch:
"RF Calibration Process
Optimize the RF circuit conditions based on the value of vdd33_const. 
The permissible error is ±0.2V."

In Version 5.4 hingegen steht da jetzt nur noch:
"RF Calibration Process
Optimize the RF circuit conditions based on the testing results of 
VDD3P3 (Pin 3 and Pin 4)."

Wobei ich mir nicht sicher bin, ob die alte Formulierung tatsächlich 
bedeutet, dass die Genauigkeit speziell bei Verwendung von WLAN 
plötzlich drastisch absinkt.

von Stefan F. (Gast)


Lesenswert?

Hier gibt's ein erschreckendes Messprotokoll:

https://github.com/esp8266/Arduino/issues/2070

von Kolja L. (kolja82)


Lesenswert?

Stefan U. schrieb:
> erschreckendes Messprotokoll:

Das kann ich so nicht bestätigen.
Mit meiner NodeMCU und den 3.3V von einem digitalen Pin waren die Werte 
ziemlich stabil.

von Joachim S. (oyo)


Lesenswert?

Stefan U. schrieb:
> Hier gibt's ein erschreckendes Messprotokoll:
>
> https://github.com/esp8266/Arduino/issues/2070

Da steht aber auch...

- "transitions between sleep states are causing this", und dass das 
Problem offenbar auch bei aktivem Wifi verschwindet, wenn man einfach 
die Option
1
wifi_set_sleep_type(NONE_SLEEP_T);
 benutzt
https://github.com/esp8266/Arduino/issues/2070#issuecomment-244043885

- wenn man diese Option nicht benutzt, die Störung offenbar nicht nur 
den internen ADC des ESP8266 betrifft, sondern es sogar bei Verwendung 
eines externen ADS1015-ADC angeblich ebenfalls zu ähnlichen Phänomenen 
kommt
https://github.com/esp8266/Arduino/issues/2070#issuecomment-243070835
und genauso bei einem externen, ebenfalls digital angebundenen 
DHT22-Sensor:
https://github.com/esp8266/Arduino/issues/2070#issuecomment-256611708

Und jemand behauptet folgendes aus Espressifs FAQ zu zitieren:

> How accurate is the internal ADC?
> When connected to routers, ESP8266 will enter modem_sleep in STA mode
> only, which will cause the changes of the internal chip currents and
> reference values, and thus result in abnormal ADC sampling.
>
> If a high accuracy is required, please use system_adc_fast_read API. But
> RF circuitry should be shut down before measuring and Wi-Fi will be
> disconnected. For an relatively lower accuracy when readings’ difference
> of 1 or 2 can be tolerated, Wi-Fi can be configured to non_sleep mode.
>
> For lower accuracy, the user may enter sleep mode. Power consumption is
> lower in this case.
https://github.com/esp8266/Arduino/issues/2070#issuecomment-277660842

: Bearbeitet durch User
von Klaus (Gast)


Lesenswert?

Gerhard J. schrieb:
> Den ADS1115 (4 Kanal, 16 bit) kriegst doch schon für knapp 7 Eurotaler
> inkl. Versandkosten bei eBay aus Deutschland, wäre dann sogar schon am
> Wochenende da.
>
> Ebay-Artikel Nr. 172360594596

Verstehe ich das richtig, das der Sensor nur Spannungen zwischen 2 und 
5,5 V messen kann?

Messbereich   2,0-5,5V
Versorgungsspannung   2,0-5,5V
Logik/Ausgangsignal   2,0-5,5V

Das macht dann für mich keinen Sinn, da ich ja Potis als Spannungsteiler 
einsetze
und damit einen Bereich von 0 - 3.3V messen muss.

Joachim S. schrieb:
> - Der angedachte ADC-IC hat wichtige Vorteile gegenüber dem internen ADC
> des ESP8266, z.B. höhere Auflösung, grösserer Spannungsbereich o.Ä.

Da komme ich auf eine neue Frage:

Kann ich mit einem Kanal die Akkuspannung messen (also 5 - 8,4V) und mit 
den anderen Kanälen die Potis?
Wobei, die 16 Bit Auflösung sollten das ja möglich machen.

von Normal Z. (normalzeit)


Lesenswert?

Klaus schrieb:
> Verstehe ich das richtig, das der Sensor nur Spannungen zwischen 2 und
> 5,5 V messen kann?
>
> Messbereich   2,0-5,5V
> Versorgungsspannung   2,0-5,5V
> Logik/Ausgangsignal   2,0-5,5V
>
> Das macht dann für mich keinen Sinn, da ich ja Potis als Spannungsteiler
> einsetze
> und damit einen Bereich von 0 - 3.3V messen muss.

Das kannst Du auch machen. Der Messbereich geht natürlich immer von 0 V 
bis zur jeweiligen Maximalen Messspannung. Die Spannung darf nicht höher 
als die Versorgungsspannung sein, deshalb auch die unterschiedlichen 
Messbereiche.

>
> Joachim S. schrieb:
>> - Der angedachte ADC-IC hat wichtige Vorteile gegenüber dem internen ADC
>> des ESP8266, z.B. höhere Auflösung, grösserer Spannungsbereich o.Ä.
>
> Da komme ich auf eine neue Frage:
>
> Kann ich mit einem Kanal die Akkuspannung messen (also 5 - 8,4V) und mit
> den anderen Kanälen die Potts?

Na klar geht das. Für die Akkuspannung schaltest Du einfach einen 
Spannungsteiler vor den Messeingang.

von Klaus (Gast)


Lesenswert?

Danke Gerhard, jezt bestelle ich einen :-)

von Hax (Gast)


Lesenswert?

Klaus schrieb:
> die Auflösung von 1023 Schritten bei
> 3.3V reicht aus

Das geht sich ohne extra Hardware nicht aus. Die ESP Module können über 
ihren Analog Pin nur Spannungen bis 1V messen. (1V = 1023)

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.