HowTo: ESPEasy / Wemos D1 Mini – Adapt ADC to another maximum voltage

You can measure voltages using the ADC on the ESP8266. This is useful, for example, to measure a battery voltage and thus the state of charge of the battery or a brightness using an LDR and a series resistor.

The ADC of the ESP8266 is somewhat special. Without additional external wiring, this can unfortunately only handle voltages up to max. 1V. It is therefore not possible to determine the voltage of a LiPo battery directly, because the voltage range of a healthy LiPo ranges from 3.2 to 4.2V.

So that the ADC can also measure higher voltages, a trick is used. A voltage divider is used to scale the voltage to be measured down to the possible voltage range of the ADC.

The ADC then measures voltages in the range from 0V to 1V which stand for a higher value on the actual voltage divider. For example, a voltage divider is also installed on the circuit board of the Wemos D1 Mini to measure voltages up to 3.3V. This is practical, but unfortunately it is not enough to measure the voltage of a LiPo, for example.

How you can expand this maximum voltage range of the ADC is described in the following article.

Hints for our lovely english readers: Basically, many of the articles on are translations from the original german articles. Therefore, it may happen here and there that some illustrations are not available in english and that some translations are weird/strange/full of mistakes or generally totaly wrong. So if you find some obvious (or also not obvious) mistakes don't hesitate to leave us a hint about that in the comment section. 
Also please don't get confused, that instead of a "dot" often a "comma" is used as decimal separator. 🙂


Helpful articles:
Before you start this article, you should have worked on the basics of soldering. You can find information on this in the following article.
Electronics – My friend the soldering iron

Tools required:

In the following list you will find all the tools you need to implement this article.

Required material:

In the following list you will find all the parts you need to implement this article.

Safety instructions

I know the following hints are always a bit annoying and seem unnecessary. But unfortunately, many people who knew it "better" from carelessness lost their eyes, fingers or other things or hurt themselves. In comparison, a loss of data is almost not worth mentioning, but even these can be really annoying. Therefore, please take five minutes to read the safety instructions. Even the coolest project is worth no injury or other annoyance.

Affiliate links / advertising links

The links to online shops listed here are so-called affiliate links. If you click on such an affiliate link and shop via this link, receives a commission from the online shop or provider concerned. The price doesn't change for you. If you do your purchases via these links, you will support in being able to offer further useful projects in the future. 🙂

How does a voltage divider work?

A simple voltage divider actually always consists of at least two resistors. In the circuit diagram below of the Wemos D1 Mini you can see a voltage divider in the red marked area.

If you are not interested in the function of a voltage divider, you can simply skip this part. 🙂


There are two resistors installed in series. The upper connection “A0” comes from the connection pin “A0” on the Wemos D1 mini board. The voltage to be measured (for example your LiPo) is connected to “A0”.

The “ADC” connection then leads to the actual ADC of the ESP8266.

Why do you do this?

We are using a property of a series connection of two resistors here.

For a series connection of two resistors, it is true, among other things, that the ratio of the total voltage to an individual voltage at one of the resistors is equal to the ratio of the total resistance to one of the individual resistors. That sounds complicated at first but is explained in the following. 🙂

In advance: As a formula, the whole thing would look like this:

Formula 1:          \frac{R1+R2}{R2}=\frac{U1+U2}{U2} 


Formula 1.2:    \frac{R1+R2}{R1}=\frac{U1+U2}{U1}

“U1” and “U2” are the voltages that drop across the resistor “R1” and “R2”. “U” is the same as U1 + U2 because in a series connection of (simple ohmic) resistors, the individual voltages add up to the total voltage.

Short: U=U1+U2

The same applies to the resistors, because the total resistance of a series connection consists of the sum of the individual resistors.


These formulas can now be used quite well in Formula 1 and you get the following:


With this formula you can now understand why these resistance values were selected in the circuit diagram of the Wemos D1 Mini shown above. R1 has the value 220kOhm and R2 the value 100kOhm. With the knowledge that at the point “ADC” (here the ADC of the ESP8266 is connected) a maximum of 1V can be applied, for which maximum voltage the voltage divider can be used.

To do this, the formula must be changed so that the total voltage “U” can be calculated from the given values. The changed formula results in:

Formula 2: \frac{Rsum}{R2}*U2=U

If you use the corresponding values here, the following results:


With the resistance values used in the voltage divider, voltages up to 3.2V can be measured at the ADC.

The practical: If you change these resistance values, you can also measure higher voltages with the ADC. In the following, for example, the voltage of a LiPo.

Voltage divider on the Wemos D1 Mini

So now you know roughly how a voltage divider works and what it can be used for. With this knowledge, we now want to find resistance values for the voltage divider to be able to measure the voltage of a LiPo battery. Its final charge voltage is a maximum of 4.2V. So that we can measure this upper voltage safely, it is advisable to choose a slightly higher voltage. Let’s just say 4.3V.

For the usual voltage values of 4.3V, 5V, 9V and 12V, examples for the resistors R1 are already given in the next paragraph. So you can save yourself the math. 🙂

The goal is to determine the resistance values for R1 and R2.

At the same time, we already know that U = 4.3V and U2 = 1V. This leaves only one unknown value to calculate with formula 2, which we have to determine in order to be able to calculate the last open value. But we make it easy for us here and simply set this value. 🙂

We first set R2 to 100kOhm and see what value we get for R1.

When converted, Formula 1 now includes the knowledge gathered

Formula 3: \frac{{\color{Red} R1}+{\color{Green} R2}}{{\color{Green} R2}}=\frac{{\color{Green} U}}{{\color{Green} U2}}

In this formula we know all (green) values except R1 (red). So we try to change the formula to R1 and get the following:


simplified and converted:


and colored the same accordingly:

(\frac{{\color{Green} U}}{{\color{Green} U2}}-{\color{Green} 1})*{\color{Green} R2}={\color{Red} R1}

In this formula, we now know all the green values and the (red) value we are looking for is right on the right side of the equal sign. 🙂

The desired value for R1 can now be calculated by inserting:


The value for R1 is 330kOhm. So if we replace the 220kOhm resistor on the circuit board of the Wemos D1 Mini with a 330kOhm resistor, the maximum measurable voltage range is expanded from 3.3V to 4.3V and can therefore also measure the complete voltage range of a LiPo battery. 🙂

This is the bottom view of the Wemos D1 Mini. The voltage divider for the ADC is also installed there.

Formula for calculation:


  • U2 is always 1V
  • U is the desired maximum measurable voltage e.g. 4.3V
  • You should just select a value for R2. Ideally in a range from 10kOhm to 100kOhm to keep the current through the voltage divider low.

Example values for maximum voltages and the associated resistance values

You can use the following resistance values to expand the maximum measurable voltage of the ADC to the specified voltage.

Maximum measurable voltage: 4,3V
R1=330kOhm, R2=100kOhm

Maximum measurable voltage: 5V:
R1=400kOhm, R2=100kOhm

Maximum measurable voltage: 9V:
R1=200kOhm, R2=25kOhm

Maximum measurable voltage: 12V:
R1=275kOhm, R2=25kOhm

You can now simply replace the marked 0805 resistors R1 and R2 with the resistors you want. 🙂

Detailed view of the voltage divider on the Wemos D1 Mini

Configuration in ESPEasy

The conversion of the ADC into a voltage can be done very comfortably in ESPEasy.

Simply set the device “Analog input – internal” as shown.

If you use a maximum voltage other than 4,300V, you must of course adjust this value accordingly. 🙂

Have fun with the project

I hope everything worked as described. If not or you have any other questions or suggestions, please let me know in the comments. Also, ideas for new projects are always welcome. 🙂

P.S. Many of these projects - especially the hardware projects - cost a lot of time and money. Of course I do this because I enjoy it, but if you appreciate it that I share these information with you, I would be happy about a small donation to the coffee box. 🙂

Buy Me a Coffee at   


  1. Hi, habe gerade deine Seite gefunden, dass ist genau das was ich suche. Wie baue ich das ganze auf, wenn ich die Widerstände extern machen will? Ich glaube ich bekomme das auf dem Wemos mit dem umlöten nicht hin.

    1. Hey Mathias,
      für welchen Spannungsbereich möchtest du den Spannungsteiler denn anpassen? Man kann den Spannungsteiler theoretisch auch durch das anlöten passender externer Widerstände verändern. Müsste man mal durchrechnen. Vllt. reicht es sogar einfach einen weitere Vorwiderstand (für den oberen Teil des Spannungsteilers) zu verwenden. 🙂

      1. Hi und danke für deine Antwort. Ich möchte einen normale 18650 Zelle am Wemos messen die als Akku dienen soll. Möchte nur ungern am Wemos rum löten, da es ja sehr klein ist. Würde gerne einfach nur zwei Wiederstände davor bauen wenn das geht?

        1. Hey Mathias,
          das müsste man sogar mit nur einem 100k Widerstand hinbekommen. Den musst du dann so verschalten:
          A0–>100k_widerstand–>LiPo_plus | LiPo_minus–> GND
          Dann müssten 3,2V an den beiden Vorwiderständen abfallen und somit genau 1V an dem “R2”. Lange rede kurzer Sinn: 4,2V am LiPo würden dann dem ADC-Wert von 1023 entsprechen. Bei den hohen Widerständen und den entsprechenden Toleranzen ist die Messung wahrscheinlich nicht super genau. Aber es reicht auf jeden Fall aus um den Füllstand des LiPos zu erfassen. 🙂
          Denk dran, dass der Zusammenhang zwischen LiPo Spannung und “Füllstand” nicht komplett linear ist. Und ich würde die Messwerte auch über einen gleitenden Mittelwert etwas “glätten”. Sonst könntest du bei höherer Belastung (und dadurch Spannungseinbrüchen der Akkuspannung) einen “falschen Alarm” bekommen. 🙂
          Hoffe es ist verständlich erklärt.
          Beste Grüße

  2. Hi! Du hast wirklich eine tolle Seite aufgebaut. Sehr informativ und kleinschrittig erklärt. Arbeite grade zum ersten Mal mit einem Wemos und bin bei meiner Recherche zum ADC auf dein Tutorial gestoßen.
    Ich möchte einen Füllstandsensor für meine Zisterne auslesen. Diese misst die Wassersäule und lässt je nach Füllhöhe 4-20mA durch. Versorgt wird er mit 24V. Hast Du einen Tipp, wie ich den Eingang vom Wemos dafür ummodeln könnte?
    Alles Gute, Martin

    1. Hey Martin,
      Danke. 🙂
      Im Prinzip brauchst du einen passenden Widerstand. Der ADC des Wemos Breakout boards kann Spannungen von null bis 3,3V messen. Mithilfe eines Widerstands kannst du das “Stromsignal” deines Sensors in eine Spannung umwandeln. Ich habe das mal überschlagen. Ein 175Ohm Widerstand sollte passen.
      Verschalten müsstest du das dann folgendermaßen. (Die zick-zack-linie soll den Widerstand darstellen.) Ich würde dir zusätzlich noch empfehlen vor dem ADC einen hochohmigen (z.B 10k) Widerstand zu schalten. 🙂

      Sensor_signal 4-20mA
      / 175 ohms

      Wenn du möchtest gib gerne Bescheid ob es geklappt hat. 🙂
      Ach und an dem ADC solltest du dann eine Spannung proportional zum Stromfluss messen können. Dabei gilt die Formel U=R*I (das ist das ohmsche Gesetz). R ist dabei der Widerstand (also 175Ohm), I der Strom des Sensors (also ein Wert zwischen 4-20mA) und U ist die Spannung die dann am ADC gemessen wird bzw. über den Widerstand abfällt. Du kannst die Schaltung auch ohne den Wemos angeschlossen zu haben testen. Dazu einfach die Spannung mit einem Multimeter messen. 🙂

      Beste Grüße

      1. Hi Fabian,

        VielenDank für die Hilfe!

        Hab als Widerstand einen Präzisionstrimmer genommen, um die Spannung zu kalibrieren.

        Klappt soweit super, allerdings springen die Werte des ADC plus/minus 5 Punkte. Hab schon einen 100n gegen Masse zum Stabilisieren gesetzt, das hilft aber nur bedingt.
        Wenn ich die mA des Sensors so messe, ist dieser Wert stabil. Hängt am ADC des Wemos.
        Hast du einen Tipp, wie ich das noch besser glätten kann?

        Beste Grüße, Martin

        1. Hey Martin,
          freut mich, dass es geklappt hat. Gute Idee mit dem Präzisionstrimmer. 🙂

          Eine Idee wie du das noch besser glätten könntest (in Software) wäre ein gleitender Mittelwert.
          Das ist eigentlich ein gängiges Verfahren, wenn man ein Signal hat, dass man entsprechend schnell einlesen kann.
          Dazu ließt du den ADC einfach mehrmals aus (z.B. 100 mal) und berechnest dann den Durchschnitt davon. Kleine Abweichungen sollten dann eigentlich ausgeglichen werden und nicht mehr auffallen. 🙂
          Beste Grüße

  3. Hi,

    Danke für Deine Tolle info Seite 🙂
    War bestimmt viel Arbeit.

    Kann man das direkt im Wemos in espeasy
    umrechnen in Prozent?

    Gruß Heiko

  4. Hi Fabian, Great article here!! well done 🙂

    I have a wemos d1 mini with its original smd resistors R1 220kOhm and R2 100kOhm

    I want to measure voltages up to 29.4V (7s battery)

    so which resistors you think its better to pick?
    solution1= R1 300kOhm + R2 10kOhm (up to 32v) least efficient but best accurate
    solution2= R1 680kOhm + R2 20kOhm (up to 36V) low efficient medium accuracy
    solution3= R1 470kOhm + R2 10kOhm (up to 49v) = most efficient but least accurate

    Please do the math and help me pick the best solution.
    Thanks 🙂

    1. Hi Nick,
      thanks. 🙂
      To be honest I would go with solution1. Of course the ~9micro amps could be anyoing (depending on your usecase) but in most cases they shouldnt bother that much.
      Or do you plan to build something where this 9µA could be problematic? 🙂
      Best regards

      1. I will just use Wemos D1 Mini with tasmota to monitor my 24V (7s battery) that is charged with a solar panel. HUUUGE thanks for the feedback 🙂

        1. Sounds cool, I think in this case you dont have to care so much about the 9µA 🙂
          Good luck with the project. 🙂
          Best regards

  5. RE edit

    or you can recommend another combination. I have those metalic resistors: 10 Ω, 22 Ω, 47 Ω, 100 Ω, 150 Ω, 200 Ω, 220 Ω, 270 Ω, 330 Ω, 470 Ω, 510 Ω, 680 Ω, 1K Ω, 2K Ω, 2.2K Ω, 3.3K Ω, 4.7K Ω, 5.1K Ω, 6.8K Ω, 10K Ω, 20K Ω, 47K Ω, 51K Ω, 68K Ω, 100K Ω, 220K Ω, 300K Ω, 470K Ω, 680K Ω, 1M

  6. Hallo Fab,
    hab diesen Artikel gerade nachvollzogen, und da haben sich leider ein paar Fehler eingeschlichen…

    Formel 2 ist falsch!
    Statt Rsum / R2 + U2 = U muß es heißen Rsum/R2 * U2 = U
    Unabhängig davon, dass die darunter liegende Zeile rechnerisch nicht stimmt.
    330/100+1 wäre 4,3 … und die Einheiten stimmen auch nicht (kOhm/kOhm kürzt sich weg)
    Des weiteren: Woher kommen die 330 kOhm? R1=220 kOhm und R2 = 100kOhm –> somit Rsum = 320 kOhm und nicht 330 kOhm
    Mit diesen Ohmwerten (220 und 100 kOhm) kommt man am ADC auf über 1 Volt …nämlich 1,03 Volt
    Ob das schon schädlich ist für den analogen Eingang, vermag ich aber nicht zu beurteilen.

    Formel 3 ist soweit ok, jedoch wurde sie nicht aus Formel 1.2 hergeleitet sondern aus Formel 1
    (hat natürlich weiter keinen Einfluß auf die weiteren Rechenwege…. nur fürs Verständnis erwähnt)

    Den berechneten Wert für die 175 Ohm (Nachfrage von Martin bzgl. Füllstandssensor) kann ich irgendwie nicht nachvollziehen. Nach meinen Berechnungen läge der Wert für den Widerstand so bei 52 Ohm…

    Bitte meinen Kommentar nicht falsch verstehen….
    LG Ralph

    1. Hi Ralph,
      danke für deine Hinweise. Habe die Fehler welche ich nachvollziehen konnte korrigiert. 🙂

      zu 1. Was meinst du mit die Einheiten stimmen nicht? Da sich die kOhms wegkürzen bleibt V über: [kOhm/kOhm*V=V] So steht es dort doch auch oder?
      zu.3. Deine Berechnung bezieht sich auf einen maximal messbaren Spannungswert von 1V. Der Wemos D1 Mini (den Martin in dem Kommentar anspricht) ist ein Breakoutboard für den ESP8266. Darauf ist dem ADC ein Spannungsteiler vorgeschaltet (welchen er explizit nicht ändern wollte). Deswegen passen die 175 Ohm ganz gut zu dem erweiterten Messbereich (bis 3,3V) des Wemos D1 Mini. 🙂

      Ach kein Problem. Ich bin ja froh, wenn jemand Fehler findet und mir dann auch bescheid gibt. 🙂

      Danke und beste Grüße

Leave a Reply

Your email address will not be published. Required fields are marked *