Now I have transfered everything as coro routines .
I works reliabliy (tested for hours in good wifi, still need to test in bad wifi).
Code: Select all
# STARTING CORO ROUTINES
print('STARTING CORO ROUTINES')
event_loop = asyncio.get_event_loop()
event_loop.create_task(blink())
event_loop.create_task(publish())
event_loop.create_task(controller())
event_loop.create_task(read_temp())
event_loop.create_task(connect_mqtt()) # ONE TIME RUN !!!
event_loop.run_forever()
# MAIN LOOP
print('STARTING MAIN LOOP')
try:
while True:
pass
finally:
machine.reset()
client.close() # Prevent LmacRxBlk:1 errors
For enyone with possibly similar "issue", I was confused a bit with "start coro routine and it runs forever". That's true, only if routine has inifinte loop built in, like this:
Code: Select all
# CORO ROUTINE TO READ TEMPERATURE FROM SENSOR
async def read_temp():
global temp_current
while True:
#print('start temp reading..')
sensor_DS18X20.get_temp()
await asyncio.sleep(1)
sensor_DS18X20.read_temp()
temp_current = sensor_DS18X20.temperature
#print('temp:' + str(temp_current))
await asyncio.sleep(1)
Code: Select all
# CORO ROUTINE FOR NON-BLOCKING SUBSCRIBE TO MQTT
async def connect_coro(client):
print("SUBSCRIBE to MQTT")
await client.subscribe(COMMAND_TOPIC, 1)
print("SUBSCRIBED to MQTT")