Инициализация работы WiFi на модуле ESP32/ESP8266, запуск web сервера

Для моей задумки необходимо настроить автоматическое подключение модуля к WiFi сети. Первым делом нужно импортировать библиотеку network, она рулит режимом работы WiFi и настройками TCP/IP.
import network
Есть возможность инициализировать работу WiFi как в режиме клиента, так и в режиме точки доступа. Мне нужен клиент:
sta_if = network.WLAN(network.STA_IF)<br>Здесь создается беспроводной интерфейс sta_if в режиме клиента.
Активируем адаптер
sta_if.active(True)
Выполняем подключение к беспроводной сети:
sta_if.connect('<Имя сети>', '<пароль>')
Проверяем подключение с помощью методаisconnected():
sta_if.isconnected() возвращает True, если соединение активно.
Получить информацию о сетевом соединении(IP адрес, маску сети, DNS) и MAC адрес интерфейса можно с помощью методов ifconfig(), config(‘mac’) соответственно.
sta_if.config('mac')
sta_if.ifconfig()

В случае если необходимо настроить работу модуля в режиме точки доступа, нужно создать соответствующий беспроводной интерфейс:
ap_if = network.WLAN(network.AP_IF)<br>Как и с клиентом активируем адаптер:
ap_if.active(True)
Указываем имя сети и пароль:
ap_if = config(essid='<Имя сети>', password='<пароль>')
Указываем сетевые настройки:
ap_if.ifconfig(('192.168.100.1', '255.255.255.0', '192.168.100.1', '8.8.8.8'))

Вот стандартный пример организации подключения согласно документации:

def do_connect():
    import network
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('connecting to network...')
        wlan.connect('essid', 'password')
        while not wlan.isconnected():
            pass
    print('network config:', wlan.ifconfig())

Вот вывод REPL при подключении:

Можно пойти немного дальше и наделить модуль определенной автономностью:

def do_connect():
    import network
    import utime as time
    # Инициализируем подключение в режиме клиента
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('connecting to network...')
        wlan.connect('<Имя сети>', '<пароль>')
        # Ждем пока адапте пытается соединиться
        count = 0
        while not wlan.isconnected() and count != 5:
            print('.', end='')
            time.sleep(5)
            count += 1
        # Ели подключиться не удалось, создаем точку доступа
        if not wlan.isconnected():
        # Деактивируем интерфейс клиента
        wlan.disconnect()
        wlan.active(False)
        # Создаем интерфейст заново
        wlan = network.WLAN(network.AP_IF)
        wlan.active(True)
        wlan.config(essid='TEST-AP', password='12345678')
        wlan.ifconfig(('192.168.100.1', '255.255.255.0', '192.168.100.1', '8.8.8.8'))
      print('network config:', wlan.ifconfig())

Теперь, если точка доступа не обнаружена, мы поднимаем свою:

После этого сеть должна быть доступна для подключения:

Теперь нужно развернуть web сервер. Для micropython имеется решение, которое называется picoweb. Это фреймворк для создания минималистичных web приложений. Потребуется так-же установить несколько зависимостей: <a href="https://github.com/pfalcon/pycopy-lib/tree/master/uasyncio" data-type="URL" data-id="https://github.com/pfalcon/pycopy-lib/tree/master/uasyncio">uasyncio</a>— обеспечивает асинхронную работы с сетью, ulogging и pkg_resources.
Вся установка сводится к копированию файлов из репозитория <a href="https://github.com/pfalcon/pycopy-lib" data-type="URL" data-id="https://github.com/pfalcon/pycopy-lib">pycopy-lib</a>и <a href="https://github.com/pfalcon/picoweb" data-type="URL" data-id="https://github.com/pfalcon/picoweb">picoweb</a> в каталог /lib на модуле. В конечном результате получается такая картина:

├── lib/
│   ├── picoweb/
│   │   ├── __init__.py
│   │   └── utils.py
│   ├── uasyncio/
│   │   └── __init__.py
│   ├── ulogging.py
│   └── pkg_resourcess.py
│ 
├── boot.py
└── main.py

Добавить импорт и пару строк в конец main.py:
import picoweb<br><br># создаем объект приложения<br>app = picoweb.WebApp(name)<br># добавляем обработку маршрута <br>@app.route("/")<br>def index(req, resp):<br> yield from picoweb.start_response(resp)<br> yield from resp.awrite("Hello") # ответ сервера<br>app.run(debug=1, host="0.0.0.0", port=80)

Проверка:<br>❯ curl <ip модуля><br>Ответ:<br>Hello%

С этим все, можно сворачиваться.

«
»

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *