Первые шаги в асинхронном программировании на языке microPython с помощью микроконтроллера ESP8266.

страница на этапе разработки

В данном уроке мы рассмотрим задачу, когда нам надо выполнять одновременно два действия, в качестве примера мы будем мигать двумя светодиодами. Причем каждое действие будет выполнятся самостоятельно, и изменение в одной программе не как не повлияет на работу другой программы.

Так как ESP8266 не совсем адаптирована под такие системы как FreeRTOS,  данное программирование называется асинхронным. Но принцып работы практически тот же как и у FreeRTOS.

Для начала нам необходимо загрузить программное обеспечение в наш микроконтроллер ESP8266, для чего выполним следующий программный код (код пишем в main.py):

import network
ssid = '***'
password = '****' 
ip = network.WLAN(network.STA_IF)
ip.active(True)
ip.connect(ssid, password )
ip.isconnected()
import upip
upip.install('micropython-uasyncio' )
upip.install ( 'micropython-uasyncio.synchro' )
upip.install ( 'micropython-uasyncio.queues' )

Вместо звездочек необходимо записать свои данные (пароль, логин) Wi-Fi. После того как Вы зальете данный код, необходимо сбросить микроконтроллер, и начнется заливка ПО:

После того, как все зальется, мы удаляем весь текст и запишем новый код:

import network
import uasyncio as asyncio
from machine import Pin
import uasyncio

led5 = Pin(5, Pin.OUT) #D1
led4 = Pin(4, Pin.OUT) #D2

async def lend_1():
count1 = 0
i1 = 0
while True:
count1 += 1
print( 'count1=' )
print( count1 )
if i1==0:
led4.off()
i1=1
else:
led4.on()
i1=0
await asyncio.sleep(2)

async def lend_2():
count2 = 0
i2 = 0
while True:
count2 += 1
print( 'count2=' )
print( count2 )
if i2==0:
led5.on()
i2=1
else:
led5.off()
i2=0
await asyncio.sleep(3)

loop = asyncio.get_event_loop()
loop.create_task(lend_1())
loop.create_task(lend_2())

loop.run_forever()

Скачать полный проэкт.