ESP32/ESP8266: Цифровые входы и цифровые выходы с MicroPython
В этом руководстве показано, как управлять GPIO ESP32 и ESP8266 в качестве цифровых входов и цифровых выходов с использованием прошивки MicroPython. В качестве примера вы научитесь считывать значение кнопки и зажигать светодиод соответствующим образом.
Предварительные требования
Для выполнения этого руководства вам необходимо установить прошивку MicroPython на плату ESP32 или ESP8266. Также вам понадобится IDE для написания и загрузки кода на плату. Мы рекомендуем использовать Thonny IDE или uPyCraft IDE:
Thonny IDE:
uPyCraft IDE:
Если вы впервые работаете с MicroPython, рекомендуем следовать этому руководству: Начало работы с MicroPython на ESP32 и ESP8266
Обзор проекта
Чтобы показать вам, как использовать цифровые входы и цифровые выходы, мы создадим простой пример проекта с кнопкой и светодиодом. Мы будем считывать состояние кнопки и зажигать светодиод соответствующим образом, как показано на следующем рисунке.
Цифровые входы (Digital Inputs)
Чтобы получить значение GPIO, сначала нужно создать объект Pin и установить его как вход. Например:
button = Pin(4, Pin.IN)
Затем, чтобы получить значение, нужно использовать метод value() объекта Pin без передачи аргументов. Например, чтобы получить состояние объекта Pin с именем button, используйте следующее выражение:
button.value()
Мы покажем вам более подробно, как всё это работает, в примере проекта.
Цифровые выходы (Digital Outputs)
Чтобы установить GPIO в состояние включено или выключено, сначала нужно установить его как выход. Например:
led = Pin(5, Pin.OUT)
Для управления GPIO используйте метод value() объекта Pin и передайте 1 или 0 в качестве аргумента. Например, следующая команда устанавливает объект Pin (led) в состояние HIGH:
led.value(1)
Чтобы установить GPIO в состояние LOW, передайте 0 в качестве аргумента:
led.value(0)
Схема подключения
Перед продолжением вам нужно собрать схему со светодиодом и кнопкой. Мы подключим светодиод к GPIO 5, а кнопку к GPIO 4.
Необходимые компоненты
Вот список компонентов, необходимых для сборки схемы:
Схема – ESP32
Следуйте следующей схеме подключения, если вы используете плату ESP32:
Схема – ESP8266
Следуйте следующей схеме подключения, если вы используете плату ESP8266:
На ESP8266 пин, обозначенный как D1, соответствует GPIO 5, а пин, обозначенный как D2, соответствует GPIO 4.
Скрипт
Следующий код считывает состояние кнопки и зажигает светодиод соответствующим образом. Код работает как для ESP32, так и для ESP8266.
from machine import Pin
from time import sleep
led = Pin(5, Pin.OUT)
button = Pin(4, Pin.IN)
while True:
led.value(button.value())
sleep(0.1)
Как работает код
Вы начинаете с импорта класса Pin из модуля machine и класса sleep из модуля time.
from machine import Pin
from time import sleep
Затем создаёте объект Pin с именем led на GPIO 5. Светодиоды – это выходы, поэтому передайте Pin.OUT вторым аргументом.
led = Pin(5, Pin.OUT)
Также мы создаём объект с именем button на GPIO 4. Кнопки – это входы, поэтому используйте Pin.IN.
button = Pin(4, Pin.IN)
Используйте button.value() для возврата/чтения состояния кнопки. Затем передайте выражение button.value() в качестве аргумента для значения светодиода.
led.value(button.value())
Таким образом, когда мы нажимаем кнопку, button.value() возвращает 1. Это эквивалентно led.value(1). Это устанавливает состояние светодиода в 1, зажигая светодиод. Когда кнопка не нажата, button.value() возвращает 0. Таким образом, мы получаем led.value(0), и светодиод остаётся выключенным.
Демонстрация
Сохраните код на вашу плату ESP с помощью Thonny IDE или uPyCraft IDE. После этого светодиод должен загораться при нажатии кнопки и гаснуть при её отпускании.
Заключение
Подводя итог, для чтения значения GPIO нам просто нужно использовать метод value() соответствующего объекта Pin. Для установки значения GPIO нам нужно передать 1 или 0 в качестве аргумента методу value(), чтобы включить или выключить его соответственно.
Надеемся, что это руководство было полезным. Если вы только начинаете работать с MicroPython, вам также могут быть полезны следующие ресурсы: