In this instructible I will explain how to read values of more than one sensor by using only one analog input pin.

You might wonder why you want to this.

When you are using a Nodemcu board, as illustrated in the picture, only one ADC pin is availible. For a small weather station I would like to read values of multiple analog sensors: a rain sensor and a light intendsity sensor. This is unfortunately not possible with this board.

A solution is to multiplex the sensors. This works as follows: You will turn a sensor A on, read sensor A, then turn sensor A off. After this you will do the same for sensor B.

The idea is based on the instructable of Breagan. As his code was written in LUA I have writen a sketch in C++. This is handy when you are programming your Nodemcu in IDE (the arduino environment). For ease I tested the sketch and wiring on the arduino UNO/duamilanove.

please see also the intructable where I used this technique!

Step 1: Wiring

For this project you need the following:

  • Two 10K ohm potentiometers;
  • Two diodes;
  • One 10K ohm resistor;
  • Arduino;
  • Broadboard;
  • Some wires.


  • Connect one side pin of each potentiometer to ground;
  • Connect the other side pin of potentiometer A to pin 10 of the arduino;
  • Connect the other side pin of potentiometer B to pin 11 of the arduino;
  • Connect the pin in the middle of both potentiometers via a diode to the analog pin 0;
  • Add a pull down resistor (10K ohm) between the ground and the analog pin 0.

The potentiometers do have the same characteristics as analog sensors and are easy to use for testing. The diodes are the key for isolating the sensor circuits. Diodes restrict current to only one direction. Without diodes the sensors still work, however they interact with each other.

Step 2: Coding

In order to multiplex, only one sensor can have a complete circuit at a time. By setting the the GPIO pin 10 to HIGH, we are sending 5v to sensor A and completing the circuit. The other pin (GPIO11) is being set to LOW and is therefor sensor B is turned off.

The sketch will read both values and print a value between 0 and 1023 in the serial monitor. You can open the monitor in the IDE software by pressing CNTRL+M.

As one can see in the illustration above the first potentiometer (A) is fully open while the second one is closed. After this potentiometer A is slowly closed until both values approach zero. After this potentiometer B is fully opened.

Have fun trying this out!


I need to interface 3 ct sensors to NodeMCU-WiFi-Arduino-IDE-Lua-based-IoT-ESP8266-Development Board. how can I on or off ct sensor.
<p>Ingenerare/ Great innovative post. Adding a little complexity, a 4 to 16 line decoder 74hc154 could also be added to free up other IO, using your suggested technique. Also some 4016 's on the input directly as analog switches could also be used. Thanks for this great instructable.</p>
<p>Thanks for the instructible! Does this mean that I could essentially have a large number (say &gt;15) analog sensors that I could read sequentially? I would just need 15 diodes, in that case. I guess I'm only limited to the number of digital pins if it works for any number of sensors?</p>
<p>Yes, you are absolutly right. You are limited by the number of I/O pins. You need a diode for each of the I/O pions</p>
<p>Alguien me puede apoyar ? hacer lectura analogica con el esp8266 e imprimirlo en un servidor web con arduino ide</p>
<p>Great post, thank you! We will be using this with kids building smart-things, and adding multiple analog inputs to the ESP8266 is essential. </p><p>Well done!</p>
<p>Great ible!</p><p>The only problem in using diodes is that you have a voltage drop, so you have to offset this to get a correct read.</p><p>BTW, you could add this idea to your ible: Get multiple button presses in a single analog port, like this video:</p><p><iframe allowfullscreen="" frameborder="0" height="281" src="//www.youtube.com/embed/UsDzwXygfl4" width="500"></iframe></p><p>All the four buttons are linked to a single ATTiny85 AnalogIn, due to the lack of sufficient DigitalIO to the circuit.</p>
<p>Forgot to mention that the different reads are get through different resistor values attached to the buttons.</p>
Hi raphango, yes I did read anything about this drop in voltage but I do not realy understand why it occurs. I will relook to it by this evening. btw, untill now the sensors work perfectly (as you can see on the Thingspeak channel). This is partly because the particular data I ask does not have to be very accurate (day light and rain).<br><br>I read before about using multiple buttons using one analog pin. This principle (with different resistor values) scan also be used for reading data of multiple sensors. The only thing you have to know is in which range the sensor throws out his data .
<p>Thats it! =)</p>
<p>Please check also my other intstructable where I used this technique! https://www.instructables.com/id/Esay-IoT-Weather-Station-With-Multiple-Sensors/</p>
:-) cool
<p>Thanks all for the great response! </p>
<p>Thank you very much for making this Arduino ide compatible. You saved me lots of time and effort. I should be able work my battery voltage monitor circuit( currently on A0) in there somewhere. Well done.</p>
<p>you are a life saver :) this is a very important post.. thank you for sharing.!!!</p>

About This Instructable



Bio: The term, engineering originates from the Latin word Ingenerare, which means "to create". My name is Vincent and I am a graduating student in the ... More »
More by Ingenerare:Turn me on, an ATtiny RGB mood lamp Easy IoT weather station with multiple sensors  Multiple analog inputs using one analoge pin   
Add instructable to: