Хочу рассказать о библиотеке MicroPyServer написанной на Python, которая позволяет взаимодействовать с устройствами ESP8266 и ESP32 посредством простого HTTP сервера.
Что такое MicroPyServer?
MicroPyServer это простой HTTP сервер предназначенный для проектов написанных на Micropython, для ESP8266 и ESP32.Основная концепция работы с библиотекой — это перехватывание запросов к устройству при помощи создания роутов (route) и функций обработчиков (handler).
Основные действия с библиотекой:
Создание сервера:
srv = MicroPyServer()
По умолчанию сервер работает на 80-ом порту.
Добавление роута, который будет обрабатывать запросы по заданному урлу:
def do_something(request): pass()srv.add_route("/url_path", do_something)
По умолчанию обрабатываются GET запросы.
Отправка данных клиенту:
def do_something(request): srv.send("OK")
По умолчанию отправляется код ответа 200 и Content-Type: text/plain.
Запуск сервера:
srv.start()
Библиотеку MicroPyServer можно скачать тут https://github.com/troublegum/micropyserver
Список методов библиотеки MicroPyServer
- Конструктор — srv = MicroPyServer(host=»0.0.0.0″, port=80)
- Запустить сервер — srv.start()
- Добавление роута — srv.add_route(path, handler, method=»GET»)
- Отправить ответ — srv.send(response)
- Отправить 404-ю ошибку — srv.not_found()
- Отправить 500-ю ошибку — srv.internal_error(error)
Примеры скетчев
Рассмотрим несколько небольших примеров работы с библиотекой MicroPyServer. Для загрузки в платы ESP8266 и ESP32 советую использовать Thonny IDE .
Код подключения к сети Wi-Fi
import networkwlan_id = "your wi-fi"wlan_pass = "your password"wlan = network.WLAN(network.STA_IF)wlan.active(True)while not wlan.isconnected(): wlan.connect(wlan_id, wlan_pass)print("Connected... IP: " + wlan.ifconfig()[0])
Пример Hello world
Классический пример hello world. Набрав в браузере адрес http://IP_вашего_устройства/ вы получите сообщение «HELLO WORLD!».
from micropyserver import MicroPyServerimport networkwlan_id = "your wi-fi"wlan_pass = "your password"wlan = network.WLAN(network.STA_IF)wlan.active(True)while not wlan.isconnected(): wlan.connect(wlan_id, wlan_pass)print("Connected... IP: " + wlan.ifconfig()[0]) def hello_world(request): ''' request handler ''' server.send("HELLO WORLD!")server = MicroPyServer()''' add route '''server.add_route("/", hello_world)''' start server '''server.start()
Простой пример настройки роутинга и управления выводом GPIO в ESP8266
В данном примере настроим обработку двух урлов которые будут делать: «включение» (/on) и «выключение» (/off) светодиода подключенного к выходу D7 ESP8266.
from machine import Pinfrom micropyserver import MicroPyServer''' Тут должен быть код подключения к WiFi '''def do_on(request): ''' on request handler ''' pin.value(1) server.send("ON")def do_off(request): ''' off request handler ''' pin.value(0) server.send("OFF")pin = machine.Pin(13, machine.Pin.OUT)server = MicroPyServer()''' add request handlers '''server.add_route("/on", do_on)server.add_route("/off", do_off)''' start server '''server.start()
В итоге набрав у браузере адрес http://IP_вашего_устройства/on вы включите подключенный к выходу D7 светодиод и в браузере выведется сообщение «ON». Соответственно набрав у браузере адрес http://IP_вашего_устройства/off вы выключите светодиод.
Пример вывода информации с датчика DHT подклюенного к ESP8266, в JSON форме
В данном примере показано как получить данные с датчика влажности и температуры DHT22 подключенного к плате ESP8266, в виде JSON ответа сервера.
import jsonimport dhtfrom machine import Pinfrom micropyserver import MicroPyServer''' Тут должен быть код подключения к WiFi '''def show_data(request): ''' request handler ''' d = dht.DHT22(machine.Pin(4)) d.measure() data = {"temperature": d.temperature(), "humidity": d.humidity()} json_str = json.dumps(data) server.send(json_str, content_type="Content-Type: application/json")server = MicroPyServer()''' add request handler '''server.add_route("/data", show_data)''' start server '''server.start()
Опыт использования библиотеки на практике
Данная библиотека используется в нескольких моих устройствах, которые работают в режиме 24/7 уже более полугода. На данный момент никаких проблем с сервером я не обнаружил и надеюсь, что в будущем код сервера будет работать также без проблем как и сейчас.