В прошлом эксперименте мы управляли светодиодом. Его можно было включить при обращении к одной странице и выключить, при обращении к другой. Но как быть, если нам нужно управлять яркостью светодиода? Ранее мы управляли яркостью светодиода с помощью ШИМ и помним, что яркость задавалась числом от 0 до 1023. Мы не можем же сделать 1024 страницы, по одной для каждого варианта яркости. Конечно это делается не так.
При обращении к серверу клиент может передать некоторые данные. Один из способов сделать это — передать в виде параметров в адресе URL.
Рассмотрим основные части URL
Остановимся подробнее на параметрах. Параметры состоят из пар имя=значение, отделяется от адреса символом ?
, и между собой пары разделяются символом &
.
Если параметр один, то он записывается http://site.ru?a=1
, если их несколько, то друг от друга пары разделяются амперсандом http://site.ru?a=1&b=2
. В качестве значений могут использоваться буквы, цифры и некоторые символы.
Как раз с помощью параметра мы и можем передавать нашему серверу значение яркости светодиода. Например так: http://192.168.43.195?duty=512
.
from micropyserver import MicroPyServer import time from machine import Pin, PWM import network import gc _init() gc.collect() Led = Pin(13, Pin.OUT) pwmLed = PWM(Led) wlan_id = "Wi-Fi_Name" wlan_pass = "Wi-Fi_Password" wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect(wlan_id, wlan_pass) time.sleep(1) while wlan.isconnected() == False: pass print('Device IP:', wlan.ifconfig()[0]) def index(request, params): ''' request handler ''' if ('duty' in params): pwmLed.duty(int(params['duty'])) server.send("Duty is: " + params['duty']) else: server.send("No Duty param") server = MicroPyServer() ''' add request handler ''' server.add_route("/", index) ''' start server ''' server.start()
Первым делом в коде программы нужно заменить Wi-Fi_Name
на имя нужной сети, а Wi-Fi_Password
на пароль от нее.
При обращении к главной странице сервиса происходит вызов функции index
server.add_route("/", index)
Функция index
принимает 2 параметра request
и param
. В param находятся параметры, переданные серверу в запросе клиента. Сначала мы проверяем наличие параметра duty
if ('duty' in params):
если такого параметра не было передано серверу, то сервер отвечает строкой No Duty param
. Если duty
было задано, то значение этого параметра используем в качестве коэффициента заполнения ШИМ и выводим в браузер строку с указанием принятого значения.
pwmLed.duty(int(params['duty'])) server.send("Duty is: " + params['duty'])
Так как URL передается в виде строки и, соответственно, параметры тоже, то перед использованием значения параметра его необходимо конвертировать в число с помощью функции int
.
Попробуй отправлять запрос на сервер с разными значениями параметра duty