Up to now, we only treated digital signals in output mode (LED) and in input mode (pushbutton). Sensors often produce analogue signal levels, however. A thermistor, for example, returns a voltage level which corresponds to the temperature. How can we treat signals like these?
Our slider potentiometer produces a similar signal level, and we will connect it to an Analogue to Digital Converter (ADC). The ESP32 chip already supplies a 12 bit ADC. With 12 bits 4096 different numbers can be represented, and we therefore get a resolution of our measurement of 1/4096 which corresponds to ~0.025 %
The potentiometer has 3 pins: OTA (or OTB), VCC, GND which must be connected to the triple base as follows:
Potentiometer | Triple Base |
---|---|
OTA | A0 (ADC) GPIO 36 |
VCC | 3V3 |
GND | GND |
You find a description of the MicroPython driver in the doc again. The ADC works for a range of 0..1V only while the potentiometer produces signal levels of 0..3.3V. A signal attenuator allows adapting the ranges. It must be set to ADC.ATTN_11DB for our 0..3.3V slider.
from machine import ADC,Pin from time import sleep_ms slider = ADC(Pin(36, atten=ADC.ATTN_11DB) # use the ADC on GPIO 36 and set the attenuator to 11 dB while True: print("Raw 12 bit value from slider: ",slider.read()) sleep_ms(100)
The only hardware still missing is the rgb LED chain