===== Эксперимент 59. Управление яркостью светодиода по WiFi === В прошлом эксперименте мы управляли светодиодом. Его можно было включить при обращении к одной странице и выключить, при обращении к другой. Но как быть, если нам нужно управлять яркостью светодиода? Ранее мы управляли яркостью светодиода с помощью ШИМ и помним, что яркость задавалась числом от 0 до 1023. Мы не можем же сделать 1024 страницы, по одной для каждого варианта яркости. Конечно это делается не так. При обращении к серверу клиент может передать некоторые данные. Один из способов сделать это — передать в виде параметров в адресе URL. Рассмотрим основные части URL {{ :products:esp-iot:url.png?nolink |}} * Протокол обращения к ресурсу. Например http, https, ftp и пр. * Хост. Может быть домен, например, pinlab.ru, yandex.ru или IP- адрес, например 192.168.0.12 * Путь до ресурса на сервере * Параметры Остановимся подробнее на параметрах. Параметры состоят из пар **имя=значение**, отделяется от адреса символом ''?'', и между собой пары разделяются символом ''&''. Если параметр один, то он записывается ''%%http://site.ru?a=1%%'', если их несколько, то друг от друга пары разделяются амперсандом ''%%http://site.ru?a=1&b=2%%''. В качестве значений могут использоваться буквы, цифры и некоторые символы. Как раз с помощью параметра мы и можем передавать нашему серверу значение яркости светодиода. Например так: ''%%http://192.168.43.195?duty=512%%''. ==== Схема эксперимента ==== {{ :products:esp-iot:exp31_mon.png?direct&600 |}} //Рисунок 1. Монтажная схема эксперимента// ==== Программный код эксперимента ==== 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'' {{ :products:esp-iot:200.jpg?nolink |}} {{ :products:esp-iot:500.jpg?nolink |}} {{ :products:esp-iot:1023.jpg?nolink |}}