Урок 8. Управление через Wi-Fi

Схема подключения модулей для данного урока показана в прошлом уроке.

Мы написали функцию, которая отвечает за формирование веб-страницы, в зависимости от состояния светодиода (умной лампы). Теперь нам нужно добавить маршрут и его обработку. В уроках 5 и 6 этого раздела мы уже добавляли маршрут в строке:

# добавление маршрута
server.add_route("/", start_page)

Здесь как раз добавляется “пустой” маршрут - по нему обычно переходит браузер, когда Вы набираете адрес в браузере. Другими словами это и есть стартовая страница.

Мы добавим маршрут http://адрес_Гиккон/turn_led, а точнее нас интересует его часть после адреса контроллера:

# добавление маршрута на переключение света
server.add_route("/turn_led", turn_led)

В функции add_route в первом параметре мы указываем маршрут, который будет обработан, а во втором параметре функцию, которая будет обрабатывать данный маршрут.

Опишем функцию turn_led, которая будет переключать состояние светодиода (умной лампы). Итак, если лампа включена, нам нужно её выключить и наоборот, если выключена то включить:

# включение-отключение светодиода
def turn_led(request):
    # если светодиод сейчас включен
    if led.value() == 1:
        # то его отключить
        led.value(0)
    else:
        # иначе, если выключен - включить
        led.value(1)
    server.send(html_page())

Обратите внимание, что в параметре request нашей функции мы принимаем значение запроса, переданного нам со страницы. В данный момент мы его никак не используем, но он может понадобиться для реализации более сложной логики.

Полностью код скрипта будет выглядеть следующим образом:

# используемые модули
import network
from time import sleep
from machine import Pin
from micropyserver import MicroPyServer
 
# параметры сети
wifi_name = "qwerty"
wifi_pass = "12345678"
 
# соединение с wifi в качестве клиента
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
 
# подключение к сети
while not wifi.isconnected():
    wifi.connect(wifi_name, wifi_pass)
    sleep(1)
 
# вывод IP-адреса
IP = wifi.ifconfig()[0]
print("Успешно подключились. IP адрес: {IP}".format(IP=IP))
 
# переменные устройств и модулей
led = Pin(5, Pin.OUT)
 
 
# включение-отключение светодиода
def turn_led(request):
    # если светодиод сейчас включен
    if led.value() == 1:
        # то его отключить
        led.value(0)
    else:
        # иначе, если выключен - включить
        led.value(1)
 
    server.send(html_page())
 
 
# описание функции-обработчика стартовой страницы
def start_page(request):
    server.send(html_page())
 
 
# функция возвращает интернет-страницу
def html_page():
 
    if led.value() == 1:
        color = "green"
        state = "включена"
        link_text = "Выключить."
    else:
        color = "red"
        state = "выключена"
        link_text = "Включить."
 
    html_page = """
    <!DOCTYPE html>
    <html>
	<head>
		<meta charset="utf-8">
		<title>Мой веб-сервер Гиккон</title>
	</head>
	<body>
		<h1>Состояние светильника</h1>
		<p>Лампа <font color={color}>{state}</font>. <a href="/turn_led">{link_text}</a></p>
	</body>
    </html>
    """
 
    html_page = html_page.format(color=color, state=state, link_text=link_text)
 
    return(html_page)
 
# создание сервера
server = MicroPyServer()
# добавление маршрута на стартовую страницу
server.add_route("/", start_page)
# добавление маршрута на переключение света
server.add_route("/turn_led", turn_led)
# старт сервера
server.start()

Обратите внимание, что значение переменных в коде, которые отвечают за имя и пароль сети Вам нужно изменить на свои значения!

# параметры сети
wifi_name = "qwerty"
wifi_pass = "12345678"

Сохраните этот скрипт в рабочем каталоге на компьютере, затем подключитесь к контроллеру с помощью файлового менеджера, скопируйте данный скрипт как основной. Не забудьте скопировать на контроллер модуль micropyserver.py. После этого отключитесь от режима обмена файлами и перезагрузите контроллер. В терминале Вы снова увидите IP-адрес, который был присвоен плате.

Успешно подключились. IP адрес: 192.168.1.167

Зайдите на этот адрес с помощью браузера и увидите новую страницу нашего сервера:

Обратите внимание, что у нас состояния лампы - “выключена”, цвет состояния - красный, текст ссылки - “Включить”. Кликнем по ссылке. Светодиод загорится, состояние, цвет и текст ссылки изменятся, а в адресной строке браузера мы увидим маршрут, по которому перешли, кликнув на ссылку.

Запомнить:

  • Веб-сервер может обрабатывать различные запросы браузера
  • Запросов и маршрутов может быть несколько
  • При обработке маршрута нужно обязательно указать параметр request, который хранит данные запроса

Предыдущий урок

Следующий урок