Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:laboratory_iot:exp59 [2020/06/16 19:25] labuser29products:laboratory_iot:exp59 [2024/12/05 14:36] (текущий) – [Программный код эксперимента] labuser30
Строка 15: Строка 15:
 Остановимся подробнее на параметрах. Параметры состоят из пар **имя=значение**, отделяется от адреса символом ''?'', и между собой пары разделяются символом ''&''. Остановимся подробнее на параметрах. Параметры состоят из пар **имя=значение**, отделяется от адреса символом ''?'', и между собой пары разделяются символом ''&''.
  
-Если параметр один, то он записывается ''%%http://site.ru?a=1%%'', если их несколько, то друг от друга пары раздеются амперсандом ''%%http://site.ru?a=1&b=2%%''. В качестве значений могут использовать буквы, цифры и некоторые символы.+Если параметр один, то он записывается ''%%http://site.ru?a=1%%'', если их несколько, то друг от друга пары разделяются амперсандом ''%%http://site.ru?a=1&b=2%%''. В качестве значений могут использоваться буквы, цифры и некоторые символы.
  
-Как раз с помощью параметра мы и можем передавать нашему серверу значение яркости светодиода. Например так: ''%%http://192.168.43.195?duty=512%%''+Как раз с помощью параметра мы и можем передавать нашему серверу значение яркости светодиода. Например так: ''%%http://192.168.43.195?duty=512%%''
 + 
 +==== Схема эксперимента ==== 
 +{{ :products:esp-iot:exp31_mon.png?direct&600 |}} 
 +//Рисунок 1. Монтажная схема эксперимента// 
 + 
 +==== Программный код эксперимента ==== 
 + 
 +<file python Exp59.py[enable_line_numbers="2", start_line_numbers_at="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() 
 +</file> 
 + 
 +<WRAP center round important 60%> 
 +Первым делом в коде программы нужно заменить ''Wi-Fi_Name'' на имя нужной сети, а ''Wi-Fi_Password'' на пароль от нее. 
 +</WRAP> 
 + 
 +При обращении к главной странице сервиса происходит вызов функции ''index'' 
 +<code python[enable_line_numbers="2", start_line_numbers_at="38"]> 
 +server.add_route("/", index) 
 +</code> 
 + 
 +Функция ''index'' принимает 2 параметра ''request'' и ''param''. В param находятся параметры, переданные серверу в запросе клиента. Сначала мы проверяем наличие параметра ''duty'' 
 + 
 +<code python[enable_line_numbers="2", start_line_numbers_at="28"]> 
 +    if ('duty' in params): 
 +</code> 
 + 
 +если такого параметра не было передано серверу, то сервер отвечает строкой ''No Duty param''. Если ''duty'' было задано, то значение этого параметра используем в качестве коэффициента заполнения ШИМ и выводим в браузер строку с указанием принятого значения.  
 +<code python[enable_line_numbers="2", start_line_numbers_at="29"]> 
 +        pwmLed.duty(int(params['duty'])) 
 +        server.send("Duty is: " + params['duty']) 
 +</code> 
 + 
 +Так как URL передается в виде строки и, соответственно, параметры тоже, то перед использованием значения параметра его необходимо конвертировать в число с помощью функции ''int''
 + 
 +Попробуй отправлять запрос на сервер с разными значениями параметра ''duty'' 
 +{{ :products:esp-iot:200.jpg?nolink |}} 
 +{{ :products:esp-iot:500.jpg?nolink |}} 
 +{{ :products:esp-iot:1023.jpg?nolink |}}