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