![ESP32 и MicroPython управление на светодиод с бутон](http://ardudevelop.eu/wp-content/uploads/2024/08/ESP32-и-MicroPython-управление-на-светодиод-с-бутон.png)
В тази статия ще разгледаме подробно как да управляваме светодиод (LED) с помощта на бутон, използвайки микроконтролера ESP32 и езика за програмиране MicroPython. Това е част от по-големия ни проект ESP32 MicroPython управление на лампа с PIR и Wi-Fi Свързаност. Ще анализираме ред по ред кода, който изпълнява тази задача, и ще обясним как работи всяка част от него.
Необходими материали
- ESP32 микроконтролер
- Светодиод (LED)
- Резистор (около 220Ω-510Ω)
- Бутон (тактов)
- Свързващи проводници
- Thonny MicroPython среда за програмиране
![ESP32 и MicroPython управление на светодиод с бутон Схема](http://ardudevelop.eu/wp-content/uploads/2024/08/ESP32-и-MicroPython-управление-на-светодиод-с-бутон-Схема.png)
За да свържете коректно схемата ви трябва документацията за дадената платформа. В този случай сме използвали процесора 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. Този код, който е лесен за разбиране и модифициране, можете да изградите основни проекти за взаимодействие с потребители чрез бутони и светодиоди. Този подход може да бъде разширен за по-сложни приложения, включващи множество бутони, светодиоди или други компоненти. Офицялен туториал тук.