ESP32 и MicroPython управление на светодиод с бутон

ESP32 и MicroPython управление на светодиод с бутон

В тази статия ще разгледаме подробно как да управляваме светодиод (LED) с помощта на бутон, използвайки микроконтролера ESP32 и езика за програмиране MicroPython. Това е част от по-големия ни проект ESP32 MicroPython управление на лампа с PIR и Wi-Fi Свързаност. Ще анализираме ред по ред кода, който изпълнява тази задача, и ще обясним как работи всяка част от него.

Необходими материали

  • ESP32 микроконтролер
  • Светодиод (LED)
  • Резистор (около 220Ω-510Ω)
  • Бутон (тактов)
  • Свързващи проводници
  • Thonny MicroPython среда за програмиране
ESP32 и MicroPython управление на светодиод с бутон Схема

За да свържете коректно схемата ви трябва документацията за дадената платформа. В този случай сме използвали процесора ESP32 C3. Може да разгледате документациите на различните платформи базирани на този процесор в нашия раздел “Ревюта” или директно в страниците ни:

Код за ESP32 и MicroPython управление на светодиод с бутон

Това е целия код който включва и изключва светодиод чрез натискане на бутон.

from machine import Pin
from time import sleep

led = Pin(1,Pin.OUT)

button = Pin(0, Pin.IN, Pin.PULL_UP)
button_value = 0
button_count = 0

while True:
    try:
        button_value = button.value()
        
        if button_value is not button.value():
        
            if button_value == 0:
                button_count += 1
                print(button_count)
                print('Button pressed!')
                
                
                if button_count == 1:
                    led.value(True)
                    print("button count = " , button_count)
                
                if button_count == 2:
                    print("button count = " , button_count)
                    led.value(False)
                    button_count = 0
                    
    except KeyboardInterrupt:
        print("exit")
        break

Импортиране на модули

from machine import Pin
from time import sleep

Първата стъпка в кода е импортирането на необходимите модули:

  • from machine import Pin: Този модул ни позволява да конфигурираме и управляваме пиновете на ESP32.
  • from time import sleep: Тази функция позволява да поставим програмата на пауза за определен период от време.

Конфигуриране на пин за светодиод (LED)

led = Pin(1,Pin.OUT)

Тук конфигурираме светодиода, като го свързваме към пин 1 на ESP32 и го настройваме като изходен пин (Pin.OUT). Това означава, че можем да подаваме високо или ниско ниво на този пин, за да включваме или изключваме светодиода.

Конфигуриране на бутона и създаване на променливи

button = Pin(0, Pin.IN, Pin.PULL_UP)
button_value = 0
button_count = 0
  • button = Pin(0, Pin.IN, Pin.PULL_UP): Настройваме пин 0 като входен (Pin.IN) и активираме вътрешен pull-up резистор (Pin.PULL_UP). Това означава, че когато бутонът не е натиснат, стойността на пина ще бъде висока (1), а когато е натиснат – ниска (0).
  • button_value = 0: Инициализираме променлива button_value, която ще съхранява текущото състояние на бутона.
  • button_count = 0: Създаваме брояч button_count, който ще следи колко пъти е натиснат бутонът.

Основен цикъл за управление на светодиода

while True:
    try:
        button_value = button.value(

Този безкраен цикъл ще продължи да се изпълнява, докато програмата работи. Вътре в цикъла:

  • button_value = button.value(): Записваме текущата стойност на бутона в button_value. Тази стойност ще бъде 0, ако бутонът е натиснат, и 1, ако не е.

Проверка за промяна на състоянието на бутона

if button_value is not button.value():

Тази проверка сравнява текущата стойност на button_value с новата стойност от button.value(). Ако има промяна (например ако бутонът е бил натиснат или освободен), кодът продължава с изпълнението на следващите инструкции.

Обработка на натискане на бутона

if button_value == 0:
  button_count += 1
  print(button_count)
  print('Button pressed!')
  • if button_value == 0: Ако бутонът е натиснат, стойността на button_value ще бъде 0.
  • button_count += 1: Увеличаваме брояча button_count с 1.
  • print(button_count): Извеждаме текущата стойност на брояча на натисканията в серийния монитор.
  • print(‘Button pressed!’): Извеждаме съобщение, че бутонът е бил натиснат.

Включване и изключване на светодиода

if button_count == 1:
  led.value(True)
  print("button count = " , button_count)
  • if button_count == 1: Ако бутонът е натиснат веднъж, светодиодът се включва.
  • led.value(True): Включваме светодиода, като задаваме високо ниво на пина.
  • print(“button count = ” , button_count): Извеждаме стойността на брояча в серийния монитор.

Изключване на светодиода и нулиране на брояча

if button_count == 2:
  print("button count = " , button_count)
  led.value(False)
  button_count = 0
  • if button_count == 2: Ако бутонът е натиснат втори път, светодиодът се изключва.
  • led.value(False): Изключваме светодиода, като задаваме ниско ниво на пина.
  • button_count = 0: Нулираме брояча, за да започнем ново броене отначало.

try except KeyboardInterrupt:

try:
  # тяло на кода
except KeyboardInterrupt:
  print("exit")
  break

Тази част от кода добавя механизъм за безопасно прекратяване на програмата при натискане на клавишната комбинация Ctrl+C (KeyboardInterrupt). Това се прави с помощта на try-except блок. В try блока се поставя основният код на програмата, а в except KeyboardInterrupt: блока се улавя прекъсването от потребителя. Когато такова прекъсване бъде уловено, програмата извежда съобщение "exit" и прекратява изпълнението си с помощта на break. Тази конструкция е полезна за спиране на безкрайни цикли и гарантира контролирано излизане от програмата.

Видео демонстрация

Това е кратка видео демонстрация на това как работи ESP32 и MicroPython управление на светодиод с бутон:

Заключение

Тази статия разгледа подробно как да управлявате светодиод с бутон, използвайки ESP32 и MicroPython. Този код, който е лесен за разбиране и модифициране, можете да изградите основни проекти за взаимодействие с потребители чрез бутони и светодиоди. Този подход може да бъде разширен за по-сложни приложения, включващи множество бутони, светодиоди или други компоненти. Офицялен туториал тук.