ESP32 Цифровые входы и цифровые выходы (Arduino IDE)
В этом руководстве для начинающих вы узнаете, как считывать цифровые входы, например кнопку, и управлять цифровыми выходами, например светодиодом, используя ESP32 с Arduino IDE.
Предварительные требования
Мы будем программировать ESP32 с помощью Arduino IDE. Поэтому убедитесь, что у вас установлено дополнение для плат ESP32, прежде чем продолжить:
Управление цифровыми выходами ESP32
Сначала необходимо установить GPIO, которым вы хотите управлять, в режим OUTPUT. Используйте функцию pinMode() следующим образом:
pinMode(GPIO, OUTPUT);
Для управления цифровым выходом вам нужно использовать функцию digitalWrite(), которая принимает в качестве аргументов GPIO (целое число) и состояние – HIGH или LOW.
digitalWrite(GPIO, STATE);
Все GPIO могут использоваться как выходы, кроме GPIO 6-11 (подключены к встроенной SPI flash-памяти) и GPIO 34, 35, 36 и 39 (только входы).
Подробнее о GPIO ESP32: Справочное руководство по GPIO ESP32
Чтение цифровых входов ESP32
Сначала установите GPIO, который вы хотите считывать, в режим INPUT, используя функцию pinMode() следующим образом:
pinMode(GPIO, INPUT);
Для чтения цифрового входа, например кнопки, используйте функцию digitalRead(), которая принимает в качестве аргумента GPIO (целое число).
digitalRead(GPIO);
Все GPIO ESP32 могут использоваться как входы, кроме GPIO 6-11 (подключены к встроенной SPI flash-памяти).
Подробнее о GPIO ESP32: Справочное руководство по GPIO ESP32
Пример проекта
Чтобы показать вам, как использовать цифровые входы и цифровые выходы, мы создадим простой пример проекта с кнопкой и светодиодом. Мы будем считывать состояние кнопки и включать светодиод соответствующим образом, как показано на следующем рисунке.
Схема подключения
Прежде чем продолжить, необходимо собрать схему со светодиодом и кнопкой. Мы подключим светодиод к GPIO 5, а кнопку – к GPIO 4.
Необходимые компоненты
Вот список компонентов, необходимых для сборки схемы:
ESP32 (см. Лучшие платы ESP32)
Вы можете использовать ссылки выше или перейти на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!
Код
Скопируйте следующий код в вашу Arduino IDE.
// Complete Instructions: https://RandomNerdTutorials.com/esp32-digital-inputs-outputs-arduino/
// set pin numbers
const int buttonPin = 4; // the number of the pushbutton pin
const int ledPin = 5; // the number of the LED pin
// variable for storing the pushbutton status
int buttonState = 0;
void setup() {
Serial.begin(115200);
// initialize the pushbutton pin as an input
pinMode(buttonPin, INPUT);
// initialize the LED pin as an output
pinMode(ledPin, OUTPUT);
}
void loop() {
// read the state of the pushbutton value
buttonState = digitalRead(buttonPin);
Serial.println(buttonState);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH
if (buttonState == HIGH) {
// turn LED on
digitalWrite(ledPin, HIGH);
} else {
// turn LED off
digitalWrite(ledPin, LOW);
}
}
Как работает код
В следующих двух строках вы создаёте переменные для назначения пинов:
const int buttonPin = 4;
const int ledPin = 5;
Кнопка подключена к GPIO 4, а светодиод – к GPIO 5. При использовании Arduino IDE с ESP32, число 4 соответствует GPIO 4, а число 5 соответствует GPIO 5.
Далее вы создаёте переменную для хранения состояния кнопки. По умолчанию её значение равно 0 (не нажата).
int buttonState = 0;
В функции setup() вы инициализируете кнопку как INPUT, а светодиод как OUTPUT. Для этого используется функция pinMode(), которая принимает пин и режим: INPUT или OUTPUT.
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
В функции loop() вы считываете состояние кнопки и устанавливаете светодиод соответствующим образом.
В следующей строке вы считываете состояние кнопки и сохраняете его в переменной buttonState. Как мы видели ранее, для этого используется функция digitalRead().
buttonState = digitalRead(buttonPin);
Следующая конструкция if проверяет, является ли состояние кнопки HIGH. Если да, то светодиод включается с помощью функции digitalWrite(), которая принимает в качестве аргумента ledPin и состояние HIGH.
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
}
Если состояние кнопки не HIGH, светодиод выключается. Просто передайте LOW в качестве второго аргумента функции digitalWrite().
else {
digitalWrite(ledPin, LOW);
}
Загрузка кода
Перед нажатием кнопки загрузки перейдите в Tools > Board и выберите используемую плату. В данном случае это плата DOIT ESP32 DEVKIT V1.
Перейдите в Tools > Port и выберите COM-порт, к которому подключён ESP32. Затем нажмите кнопку загрузки и дождитесь сообщения «Done uploading».
Если вы видите множество точек (……) в окне отладки и сообщение «Failed to connect to ESP32: Timed out waiting for packet header», это означает, что вам нужно нажать кнопку BOOT на плате ESP32 после появления точек.
Демонстрация
После загрузки кода проверьте вашу схему. Светодиод должен загореться при нажатии кнопки:
И погаснуть, когда вы её отпустите:
Заключение
В этом руководстве для начинающих вы узнали, как считывать цифровые входы и управлять цифровыми выходами ESP32 с помощью Arduino IDE.
Если вы хотите узнать, как считывать аналоговые входы или выводить ШИМ-сигналы, прочитайте следующие руководства:
Также вам может быть полезно ознакомиться со справочным руководством по GPIO ESP32, которое описывает, как использовать GPIO ESP32 и их функции.
Если вы хотите узнать больше о ESP32, ознакомьтесь с нашими ресурсами:
Источник: ESP32 Digital Inputs and Digital Outputs (Arduino IDE)