Статья проплачена кошками - всемирно известными производителями котят.
Если статья вам понравилась, то можете поддержать проект.
ESP32: Аналоговые входы
У платы ESP32 15 аналоговых входов с АЦП (12 бит): 2, 4, 12–15, 25–27, 32–36 и 39. Позволяет представить аналоговое напряжение в цифровом виде с разрядностью 12 бит.
Для получения показаний достаточно вызвать функцию analogRead(GPIO), указав нужный пин.
При этом мы считываем уровень напряжения от 0В до 3.3В, которые распределяются от 0 до 4095.
Для примера подключим потенциометр к пину 34 и будем считывать показания через монитор порта.
// Соединим потенциометр к пину GPIO 34 (Analog ADC1_CH6)
const int potPin = 34;
// показания
int potValue = 0;
void setup() {
Serial.begin(115200);
delay(1000);
}
void loop() {
// считываем показания
potValue = analogRead(potPin);
Serial.println(potValue);
delay(500);
}
Следует учитывать, что показания не являются строго линейными. Так напряжение от 3.2 до 3.3 всё равно будет выводить значение 4095, аналогично для напряжения от 0 до 0.1, которое будет равно 0.
При использовании WiFi для аналоговых входов используйте пины 32, 33, 34, 35, 36, 39. Остальные могут вызвать проблемы.
Другие функции
Существует свои нестандартные функции для работы с аналоговыми входами.
- analogReadResolution(resolution) - устанавливает разрешение. Можно использовать значение 9 (0 – 511) или 12 (0 – 4095). По умолчанию используется 12 бит
- analogSetWidth(width) - аналогичная функция. Можно использовать значение 9 (0 – 511) или 12 (0 – 4095). По умолчанию используется 12 бит
- analogSetCycles(cycles) - set the number of cycles per sample. Default is 8. Range: 1 to 255
- analogSetSamples(samples) - set the number of samples in the range. Default is 1 sample. It has an effect of increasing sensitivity
- analogSetClockDiv(attenuation) - set the divider for the ADC clock. Default is 1. Range: 1 to 255
- analogSetAttenuation(attenuation) - sets the input attenuation for all ADC pins. Default is ADC_11db. Accepted values:
ADC_0db: sets no attenuation (1V input = ADC reading of 1088).
ADC_2_5db: sets an attenuation of 1.34 (1V input = ADC reading of 2086).
ADC_6db: sets an attenuation of 1.5 (1V input = ADC reading of 2975).
ADC_11db: sets an attenuation of 3.6 (1V input = ADC reading of 3959).
- analogSetPinAttenuation(pin, attenuation) - sets the input attenuation for the specified pin. The default is ADC_11db. Attenuation values are the same from previous function.
- adcAttachPin(pin) - Attach a pin to ADC (also clears any other analog mode that could be on). Returns TRUE or FALSE result.
- adcStart(pin), adcBusy(pin), resultadcEnd(pin) - starts an ADC convertion on attached pin’s bus. Check if conversion on the pin’s ADC bus is currently running (returns TRUE or FALSE). Get the result of the conversion: returns 16-bit integer.
Реклама