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