Мы уже научились создавать простой веб-сервер, отправлять веб-страницы в браузер клиента и отправлять данные из формы на странице обратно на сервер. Теперь мы сделаем ночник с полноцветным светодиодом, цветом и яркостью которого можно управлять по Wi-Fi через веб-интерфейс.
Для управления RGB светодиодом необходимо передавать на сервер 3 параметра — яркость красного, синего и зеленого цветов.
Соберем схему с RGB светодиодом
Теперь наша форма имеет три текстовых поля с именами r
, g
и b
для ввода яркости красного, зеленого и синего цветов соответственно. Также мы вставили три метки, чтобы подменять их на текущее значение яркости перед отправкой страницы пользователю.
Сохрани эту страницу в корне файловой системы микроконтроллера под именем rgb_page.html
Код программы:
from micropyserver import MicroPyServer import time from machine import Pin, PWM import network import gc _init() gc.collect() LedR = PWM(Pin(13, Pin.OUT)) LedG = PWM(Pin(14, Pin.OUT)) LedB = PWM(Pin(15, Pin.OUT)) 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): duty_r = '512' duty_g = '512' duty_b = '512' if ('r' in params): duty_r = params['r'] LedR.duty(1023 - int(duty_r)) if ('g' in params): duty_g = params['g'] LedG.duty(1023 - int(duty_g)) if ('b' in params): duty_b = params['b'] LedB.duty(1023 - int(duty_b)) html_file = open("rgb_page.html") html = html_file.read() html = html.replace('<=VALUE=R=>', duty_r) html = html.replace('<=VALUE=G=>', duty_g) html = html.replace('<=VALUE=B=>', duty_b) html_file.close() server.send(html, content_type="Content-Type: text/html") LedR.duty(0) LedG.duty(0) LedB.duty(0) server = MicroPyServer() server.add_route("/", index) server.start()
Первым делом в коде программы нужно заменить Wi-Fi_Name
на имя нужной сети, а Wi-Fi_Password
на пароль от нее.
Следует обратить внимание, что перед установкой яркости светодиода мы вычитаем полученные данные из числа 1023. Это сделано потому, что наш RGB светодиод с общим анодом (имеет общий плюс).