ESP32 для начинающих: Умный дом своими руками - стр. 15
..delay(1000);..................// Задержка 1 секунда
..digitalWrite(ledPin, LOW);.. // Выключить светодиод
..delay(1000);..................// Задержка 1 секунда
}
```
Этот простой пример показывает, как управлять цифровым устройством. Вы можете адаптировать его для работы с реле или другими исполнительными механизмами.
# Использование цифровых входов
Цифровые входные контакты позволяют получать информацию о состоянии внешних устройств. Например, подключите кнопку к контакту GPIO 12, причем один контакт кнопки подключен к пину, а другой – к земле. Код для считывания состояния кнопки может выглядеть так:
```cpp
const int buttonPin = 12;..// Номер контакта для кнопки
int buttonState = 0;........// Переменная для хранения состояния кнопки
void setup() {
..pinMode(buttonPin, INPUT);..// Установка в режим ввода
..Serial.begin(115200);
}
void loop() {
..buttonState = digitalRead(buttonPin);..// Чтение состояния кнопки
..Serial.println(buttonState);............ // Вывод состояния в последовательный монитор
..delay(100);..............................// Задержка между считываниями
}
```
Этот код считывает состояние кнопки и выводит результат в последовательный монитор, что позволяет следить за ее работой.
Аналоговые входы и выходы
ESP32 поддерживает аналоговые входы и выходы, что дает возможность работать с изменяющимися значениями, такими как температура или уровень освещенности. Для работы с аналоговыми сигналами используется 12-битный аналого-цифровой преобразователь.
# Работа с аналоговыми входами
Подключим потенциометр к одному из аналоговых входов, например, к контакту GPIO 34. После подключения мы можем считывать значения с потенциометра следующим образом:
```cpp
const int potPin = 34;..// Номер аналогового контакта для потенциометра
int potValue = 0;........// Переменная для хранения значения потенциометра
void setup() {
..Serial.begin(115200);
}
void loop() {
..potValue = analogRead(potPin);..// Чтение значения с потенциометра
..Serial.println(potValue);........ // Вывод значения в последовательный монитор
..delay(100);...................... // Задержка между считываниями
}
```
Этот код позволяет считывать и выводить значения с потенциометра. Значение будет варьироваться от 0 до 4095 в зависимости от положения ручки.
# Использование аналоговых выходов
Хотя ESP32 не имеет аналоговых выходов в традиционном понимании, мы можем использовать широтно-импульсную модуляцию (ШИМ) для создания аналоговых сигналов. Чтобы сделать это, подключите светодиод (или любой другой световой элемент) к цифровому контакту, поддерживающему ШИМ (например, GPIO 25):
```cpp
const int pwmPin = 25;..// Номер контакта для ШИМ
const int pwmFreq = 5000;..// Частота ШИМ
const int pwmChannel = 0;..// Канал ШИМ
const int pwmResolution = 8;..// Разрешение ШИМ
void setup() {
..ledcSetup(pwmChannel, pwmFreq, pwmResolution);..// Настройка канала ШИМ
..ledcAttachPin(pwmPin, pwmChannel);..............// Привязка контакта
}
void loop() {
..for (int dutyCycle = 0; dutyCycle <= 255; dutyCycle++) {
....ledcWrite(pwmChannel, dutyCycle);..// Установка значения ШИМ
....delay(15);........................ // Задержка для плавного изменения яркости
..}
..for (int dutyCycle = 255; dutyCycle >= 0; dutyCycle–) {
....ledcWrite(pwmChannel, dutyCycle);..// Установка значения ШИМ