• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Запуск main.py

NikNep

New member
Подскажите в чем проблема. На ESP8266 через webrepl загружены файлы boot.py и main.py. При перезагрузке модуль включается, но программа из main.py не выполняется. Работает только ручной запуск функции main() через webrepl. Тогда все работает. Пробовал и в main.py и в boot.py конце и в начале ставить запуск функции main(), но тогда или модуль подвисает или все равно срабатывает только по команде вручную.
В boot.py стандартно старт webrepl и подключение к сети.
В main.py - подключение к MQTT брокеру и отправка каждые 5 сек. данных с встроенного датчика освещения (ниже код main.py,).

Код:
from umqtt.simple import MQTTClient
from machine import Pin
import ubinascii
import machine
import micropython
import time

adc = machine.ADC(0)
TOPIC = b'topic'
SERVER = "xxx.xxx.x.x"
CLIENT_ID = ubinascii.hexlify(machine.unique_id())

def main(server=SERVER):
    c = MQTTClient(CLIENT_ID, server)
    c.connect()
    print("Connected to %s, subscribed to %s topic" % (server, TOPIC))

    try:
        while True:
            print(adc.read())
            c.publish(b"topic", str(adc.read()))
            time.sleep(5)
          
  
    finally:
        c.disconnect()
 
Последнее редактирование:

__ab__

New member
Так в main.py нет команды на запуск.
Туда стоит последней строкой добавить
Код:
main()
а еще лучше не добавлять такую строку, а поправить boot.py вот так:
Код:
import gc, webrepl
webrepl.start()
gc.collect()
import main
main.main()
И, кстати, print совсем лишнее, если запускать автоматом.
 
Последнее редактирование:

NikNep

New member
Так в main.py нет команды на запуск.
Туда стоит последней строкой добавить
Код:
main()
а еще лучше не добавлять такую строку, а поправить boot.py вот так:
Код:
import gc, webrepl
webrepl.start()
gc.collect()
import main
main.main()
И, кстати, print совсем лишнее, если запускать автоматом.

Подскажите в чем проблема. На ESP8266 через webrepl загружены файлы boot.py и main.py. При перезагрузке модуль включается, но программа из main.py не выполняется. Работает только ручной запуск функции main() через webrepl. Тогда все работает. Пробовал и в main.py и в boot.py конце и в начале ставить запуск функции main(), но тогда или модуль подвисает или все равно срабатывает только по команде вручную.
В boot.py стандартно старт webrepl и подключение к сети.
В main.py - подключение к MQTT брокеру и отправка каждые 5 сек. данных с встроенного датчика освещения (ниже код main.py,).

Код:
from umqtt.simple import MQTTClient
from machine import Pin
import ubinascii
import machine
import micropython
import time

adc = machine.ADC(0)
TOPIC = b'topic'
SERVER = "xxx.xxx.x.x"
CLIENT_ID = ubinascii.hexlify(machine.unique_id())

def main(server=SERVER):
    c = MQTTClient(CLIENT_ID, server)
    c.connect()
    print("Connected to %s, subscribed to %s topic" % (server, TOPIC))

    try:
        while True:
            print(adc.read())
            c.publish(b"topic", str(adc.read()))
            time.sleep(5)
         
 
    finally:
        c.disconnect()
Так я и описывал, что и в main.py и в boot.py прописывал запуск (как в Вашем первом так и втором варианте) . С вторым вариантом (в boot.py импорт и запуск) все равно не запускается. только вручную (Снимок1). Также пробовал загрузить start.py с функцией run и протестировать вручную импорт и запуск - результат снимок 2, где опять старт только вручную.
 

Вложения

NikNep

New member
Разобрался. Проблема была в том что сеть еще не успевала подключится и при запуске main() - если команда была записана в конце в файле main.py или boot.py - сразу шло подключение к брокеру и соответственно вылетало с ошибкой OSError: [Errno 113] EHOSTUNREACH. Добавил проверку перед выполнением c.connect() и все работает. Поэтому вручную и запускалось, так как сеть была подключена после перезапуска.
 

gwvsol

New member
Вот пример как сделать подключение к WiFi.
По аналогии сможете запустить другой код.
Создаете файл с кодом. Например: wifi.py
Код:
import network
import time

def do_connect():
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('connecting to network...')
        wlan.connect('*****', '*********')
        time.sleep(3)
        while not wlan.isconnected():
            pass
    print('network config:', wlan.ifconfig())
   
do_connect()
В эту строку подставьте свои данные для подключения
wlan.connect('*****', '*********')
Теперь осталось только в main.py добавить только одну строку
import wifi
Оба файла закидываете на ESP8266 и перегружаете. При этом контроллер должен как и прежде поднять точку доступа для webrepl и выполнить wifi подключение. Если вы будет использовать REPL через COM порт вы сможете увидеть вывод всех print которые есть в коде
 
Сверху Снизу