![ESP8266 асинхронно програмиране с MicroPython Основи с uasyncio](http://ardudevelop.eu/wp-content/uploads/2024/10/ESP8266-асинхронно-програмиране-с-MicroPython-Основи-с-uasyncio.png)
Въведение
ESP8266 е мощен микроконтролер с Wi-Fi възможности, а при програмирането му с MicroPython се използва и библиотеката uasyncio
за асинхронно изпълнение на задачи. В тази статия ще разгледаме основите на асинхронното програмиране, като демонстрираме с пример как да контролираме два LED диода с различни интервали на мигане.
Асинхронното програмиране в MicroPython е много сходно с подхода, използван в статията ни за Arduino: Arduino мигане без закъснение “Blink Without Delay” и примера “Blink Without Delay.” И при двете среди целта е да се избегне блокиращото действие на команди като delay()
, което би спирало изпълнението на други задачи. В Arduino се разчита на millis()
за проследяване на времето, което позволява задачите да се изпълняват независимо. По подобен начин, с библиотеката uasyncio
в MicroPython можем да управляваме паралелни задачи, като осигуряваме плавно и ненатрапчиво изпълнение на кода.
Какво е асинхронно програмиране и за какво е този пример
Асинхронното програмиране позволява множество задачи да бъдат изпълнявани паралелно, без изчакване между тях. Това е полезно в IoT проекти, като тези с ESP8266, където трябва да управляваме множество периферии едновременно. Библиотеката uasyncio
осигурява асинхронни функции и таймери в MicroPython, за да реализираме паралелни задачи. В примера ще използваме асинхронни функции за управление на два светодиода с различни интервали на мигане.
Използвани компоненти за този пример:
- ESP8266 – микроконтролер за управление и Wi-Fi връзка
- Два резистора от 220 ома – за ограничаване на тока към светодиодите
- Два LED диода – визуална индикация
- Свързващи кабели – за съединяване на компонентите
Свързване:
Започваме, като свържем всеки резистор от 220 ома последователно с анода (дългия край) на LED диодите. Катодите на диодите се свързват към GND пиновете на ESP8266. Свързваме резисторите към два GPIO пина на ESP8266, за да контролираме всяко LED с отделни сигнали.
За да свържете коректно схемата ще ви трябва диаграмата на пиновете на вашата ESP8266 платформа. Разгледайте нашите ревюта на някои от тези процесорни платки за повече информация:
Код (ESP8266 асинхронно програмиране с MicroPython)
import uasyncio as asyncio
from machine import Pin
# Настройка на светодиодите
led1 = Pin(5, Pin.OUT)
led2 = Pin(0, Pin.OUT)
async def blink1():
while True:
led1.on()
await asyncio.sleep_ms(200)
led1.off()
await asyncio.sleep_ms(200)
async def blink2():
while True:
led2.on()
await asyncio.sleep_ms(1000)
led2.off()
await asyncio.sleep_ms(1000)
async def main():
# Създаване на асинхронни задачи за мигане на светодиодите
task1 = asyncio.create_task(blink1()) # Интервал от 1 секунда
task2 = asyncio.create_task(blink2()) # Интервал от 2 секунди
# Изчакване на приключването на задачите
await asyncio.gather(task1, task2)
# Стартиране на асинхронния цикъл
asyncio.run(main())
Пълно обяснение на кода за асинхронно програмиране с MicroPython и ESP8266
Импортиране на модули:
import uasyncio as asyncio
from machine import Pin
uasyncio
е асинхронната библиотека на MicroPython, а Pin
от machine
се използва за контрол на GPIO пиновете.
Настройка на светодиодите:
# Настройка на светодиодите
led1 = Pin(5, Pin.OUT)
led2 = Pin(0, Pin.OUT)
Двата LED светодиода са дефинирани като изходи, като led1
използва GPIO 5, а led2
– GPIO 0.
Асинхронни функции blink1
и blink2
:
async def blink1():
while True:
led1.on()
await asyncio.sleep_ms(200)
led1.off()
await asyncio.sleep_ms(200)
async def blink2():
while True:
led2.on()
await asyncio.sleep_ms(1000)
led2.off()
await asyncio.sleep_ms(1000)
blink1()
и blink2()
са асинхронни функции, които управляват мигането на led1
и led2
. blink1()
включва led1
за 200 ms и го изключва за 200 ms, а blink2()
го прави с интервал от 1 секунда. await asyncio.sleep_ms()
позволява други задачи да се изпълняват, докато функцията е в пауза.
Функция main()
:
async def main():
# Създаване на асинхронни задачи за мигане на светодиодите
task1 = asyncio.create_task(blink1()) # Интервал от 1 секунда
task2 = asyncio.create_task(blink2()) # Интервал от 2 секунди
# Изчакване на приключването на задачите
await asyncio.gather(task1, task2)
В main()
създаваме асинхронни задачи за blink1()
и blink2()
с asyncio.create_task
. След това await asyncio.gather()
изчаква задачите да се изпълняват едновременно.
Стартиране на асинхронния цикъл:
# Стартиране на асинхронния цикъл
asyncio.run(main())
asyncio.run(main())
стартира основния асинхронен цикъл и започва изпълнението на задачите, което позволява на ESP8266 да контролира светодиодите едновременно.
Заключение
Този пример демонстрира основните принципи на асинхронното програмиране с ESP8266, MicroPython и uasyncio. Използването на асинхронни функции е от ключово значение за IoT проекти с множество едновременни задачи. Асинхронното програмиране прави кода по-гъвкав и ефективен, тъй като позволява на микроконтролера да изпълнява различни операции без блокиране. Офицялен сайт за информация тук.