Инициализация работы 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%
С этим все, можно сворачиваться.
Добавить комментарий