Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Запуск main.py

Тема в разделе "MicroPython", создана пользователем NikNep, 8 ноя 2018.

Метки:
  1. NikNep

    NikNep Новичок

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

    Раскрыть Спойлер
    Код ( (Unknown Language)):
    1.  
    2. from umqtt.simple import MQTTClient
    3. from machine import Pin
    4. import ubinascii
    5. import machine
    6. import micropython
    7. import time
    8.  
    9. adc = machine.ADC(0)
    10. TOPIC = b'topic'
    11. SERVER = "xxx.xxx.x.x"
    12. CLIENT_ID = ubinascii.hexlify(machine.unique_id())
    13.  
    14. def main(server=SERVER):
    15.     c = MQTTClient(CLIENT_ID, server)
    16.     c.connect()
    17.     print("Connected to %s, subscribed to %s topic" % (server, TOPIC))
    18.  
    19.     try:
    20.         while True:
    21.             print(adc.read())
    22.             c.publish(b"topic", str(adc.read()))
    23.             time.sleep(5)
    24.          
    25.  
    26.     finally:
    27.         c.disconnect()
    28.  
     
    Последнее редактирование: 8 ноя 2018
  2. __ab__

    __ab__ Новичок

    Сообщения:
    21
    Симпатии:
    2
    Так в main.py нет команды на запуск.
    Туда стоит последней строкой добавить
    Код (Text):
    1. main()
    а еще лучше не добавлять такую строку, а поправить boot.py вот так:
    Код (Text):
    1. import gc, webrepl
    2. webrepl.start()
    3. gc.collect()
    4. import main
    5. main.main()
    И, кстати, print совсем лишнее, если запускать автоматом.
     
    Последнее редактирование: 9 ноя 2018
  3. NikNep

    NikNep Новичок

    Сообщения:
    3
    Симпатии:
    0

    Так я и описывал, что и в main.py и в boot.py прописывал запуск (как в Вашем первом так и втором варианте) . С вторым вариантом (в boot.py импорт и запуск) все равно не запускается. только вручную (Снимок1). Также пробовал загрузить start.py с функцией run и протестировать вручную импорт и запуск - результат снимок 2, где опять старт только вручную.
     

    Вложения:

  4. NikNep

    NikNep Новичок

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

    gwvsol Новичок

    Сообщения:
    5
    Симпатии:
    0
    Вот пример как сделать подключение к WiFi.
    По аналогии сможете запустить другой код.
    Создаете файл с кодом. Например: wifi.py
    Код (Text):
    1.  
    2. import network
    3. import time
    4.  
    5. def do_connect():
    6.     wlan = network.WLAN(network.STA_IF)
    7.     wlan.active(True)
    8.     if not wlan.isconnected():
    9.         print('connecting to network...')
    10.         wlan.connect('*****', '*********')
    11.         time.sleep(3)
    12.         while not wlan.isconnected():
    13.             pass
    14.     print('network config:', wlan.ifconfig())
    15.    
    16. do_connect()
    17.  
    В эту строку подставьте свои данные для подключения
    wlan.connect('*****', '*********')
    Теперь осталось только в main.py добавить только одну строку
    import wifi
    Оба файла закидываете на ESP8266 и перегружаете. При этом контроллер должен как и прежде поднять точку доступа для webrepl и выполнить wifi подключение. Если вы будет использовать REPL через COM порт вы сможете увидеть вывод всех print которые есть в коде
     

Поделиться этой страницей