Skip to main content

1.1. Мигаем встроенным светодиодом

Задача: помигать светодиодом, расположенным на отладочной плате ESP32.

Выясняем номер пина

У каждого пина микроконтроллера есть свой номер. Ножки обычно подписаны на плате, например, D5 означает, что это Digital пин с номером 5. Как узнать пин чего-то, что распаяно на светодиоде? Наиболее надёжный способ - найти светодиод на схеме платы (гуглим что-то типа “esp32 devkit schematics”) и посмотреть, к чему он подключен. Возьмём схему платы отсюда: Периферия, установленная на отладочной плате Для удобства, пины встроенных светодиодов и кнопок отладочных плат, обитающих в хакспейсе, приведены ниже.
Отладочная платаПин светодиодаПин кнопки
ESP32 DevKit20
Lolin S2 Mini (ESP32S2)150
LuatOS ESP32C3-CORE12, 139

Конфигурируем пин на выход

Для работы с цифровыми пинами импортируем модуль digitalio, а для обращения к пинам по их номеру - модуль board. Также здесь и в 99% других проектов мы планируем много спать, поэтому нам пригодится модуль time.
import digitalio, board, time
Чтобы использовать пин, мы оборачиваем его в объект DigitalInOut и устанавливаем режим работы OUTPUT:
led = digitalio.DigitalInOut(board.IO2)
led.direction = digitalio.Direction.OUTPUT
В зависимости от версии CircuitPython (у каждой отладочной платы она своя), вместо board.IO2 придётся подставить board.D2 или что-то подобное. Как проверить названия пинов? Напишите в скрипте print(dir(board)) или в REPL-консоли импортируйте board и понажимайте клавишу Tab после ввода board., чтобы увидеть список всех доступных пинов.
Теперь мы можем устанавливать этому пину значения True (высокий сигнал, 3.3V) или False (низкий сигнал, 0V), таким образом включая или выключая светодиод:
while True:
    led.value = True
    time.sleep(1)
    led.value = False
    time.sleep(1)
Мы используем бесконечный цикл, потому что, в отличие от обычных программ на ПК, если закончить выполнять прошивку, микроконтроллер перезагрузится и начнёт исполнять её снова. В CircuitPython вместо перезагрузки вас выкинет в REPL консоль питона и скрипт перестанет исполняться. Короче, в 99% проектов вы будете делать две вещи: time.sleep и бесконечный цикл.
Если после сохранения скрипта ваша отладочная плата начала мигать - значит всё прошло успешно и можно переходить к следующей задаче. Если нет - изучите консоль на предмет ошибок.

1.2. Включаем светодиод по кнопке

Задача: если нажата кнопка - включить светодиод, если не нажата - выключить. В дополнение к переменной led, создаём ещё одну переменную button с ещё одним DigitalInOut, но передаём номер пина встроенной кнопки (см. таблицу выше). Пин кнопки мы конфигурируем в INPUT для чтения значения. Инициализацию всех пинов мы делаем перед основным циклом! Основной цикл у нас будет выглядеть так:
while True:
    led.value = button.value
    time.sleep(0.05)
Здесь мы спим, чтобы не загружать процессор, но при этом спим достаточно мало, чтобы задержка была незаметна нашему глазу. Дополнительные задачи:
  • пофиксить основной цикл, чтобы при нажатии кнопки светодиод включался, а не выключался
  • придумать алгоритм, чтобы при нажатии кнопки светодиод инвертировал состояние и оставался таким до следующего нажатия кнопки

1.3. Внешняя кнопка

Задача: оставить скрипт от прошлой задачи, но поменять встроенную кнопку на внешнюю. Для этого необходимо вставить отладочную плату ESP32 и саму кнопку в BreadBoard. Как видно из рисунка ниже кнопка имеет 4 контакта, 2 контакта в каждой из пар соеденины внутри самой кнопки. Для получения логической единицы на пине необходимо подключить один контакт кнопки к VCC (+3.3), а другой к любому свободному пину микрооконтроллера. Если необходимо получать на пине логический ноль, то вместо VCC к кнопке подключаем GND. В идеале не забываем про подтяжку пина в инверсную сторону от подключения кнопки (если подключили кнопку к GND то делаем PULL_UP, а при подключении кнопки к VCC, пин настраиваем на PULL_DOWN) Схема работы кнопки Вариант собранной схемы, которая при нажатии кнопки возвращает 0, представлен рисунком ниже. Вариант сборки кнопки

1.4. Внешний светодиод

Задача: оставить скрипт от прошлой задачи, но поменять встроенный светодиод на внешний. Светодиод устроен следующим образом: Распиновка светодиода Чтобы светодиод засветился, ток должен течь от анода к катоду. Другими словами от + светодиода к его - или от VCC к пину с выставленным на нем логческим 0 или от пина с выставленной на нем логической 1 к GND Чтобы светодиод светился больше чем 1 раз необходимо последвательно с резистором подключить резистор с номиналом 220 Ом. Делается это для ограничения протекающего через него тока. Как правило максимальный ток светодиода равен 20 мА. Один из вариантов схемы подключения светодиода к отладочной плате представлен на рисунке ниже. Пример подключения светодиода