Различия

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

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

Следующая версия
Предыдущая версия
products:laboratory_iot_c:exp62 [2024/12/06 17:17] – создано labuser30products:laboratory_iot_c:exp62 [2024/12/06 22:04] (текущий) – [Программный код эксперимента] labuser30
Строка 19: Строка 19:
     <body>     <body>
         <form action="/">         <form action="/">
-            Red: <input type="text" name="r" value="<=VALUE=R=>"> <br/> +            Red: <input type="number" name="r" min="0" max="255" value="<=VALUE=R=>"> <br/> 
-            Green: <input type="text" name="g" value="<=VALUE=G=>"> <br/> +            Green: <input type="number" name="g" min="0" max="255" value="<=VALUE=G=>"> <br/> 
-            Blue: <input type="text" name="b" value="<=VALUE=B=>"> <br/>+            Blue: <input type="number" name="b" min="0" max="1023" value="<=VALUE=B=>"> <br/>
             <input type="submit" value="Send">             <input type="submit" value="Send">
         </form>         </form>
Строка 29: Строка 29:
  
 Теперь наша форма имеет три текстовых поля с именами ''r'', ''g'' и ''b'' для ввода яркости красного, зеленого и синего цветов соответственно. Также мы вставили три метки, чтобы подменять их на текущее значение яркости перед отправкой страницы пользователю. Теперь наша форма имеет три текстовых поля с именами ''r'', ''g'' и ''b'' для ввода яркости красного, зеленого и синего цветов соответственно. Также мы вставили три метки, чтобы подменять их на текущее значение яркости перед отправкой страницы пользователю.
- 
-<WRAP center round important 60%> 
-Сохрани эту страницу в корне файловой системы микроконтроллера под именем rgb_page.html 
-</WRAP> 
  
 Код программы: Код программы:
  
-<file python Exp62.py[enable_line_numbers="2", start_line_numbers_at="1"]> +<file arduino Exp62.ino[enable_line_numbers="2", start_line_numbers_at="1"]> 
-from micropyserver import MicroPyServer +#include <ESP8266WiFi.h> 
-import time +#include <ESP8266WebServer.h>
-from machine import Pin, PWM +
-import network +
-import gc +
-_init() +
-gc.collect()+
  
-LedR = PWM(Pin(13, Pin.OUT)) +#define WIFI_NAME     "WiFi_Name" 
-LedG = PWM(Pin(14, Pin.OUT)) +#define WIFI_PASSWORD "WiFi_Password"
-LedB = PWM(Pin(15, Pin.OUT))+
  
-wlan_id = "Wi-Fi_Name" +#define PIN_LED_R 13 
-wlan_pass = "Wi-Fi_Password"+#define PIN_LED_G 14 
 +#define PIN_LED_B 15
  
-wlan = network.WLAN(network.STA_IF) +ESP8266WebServer server(80);
-wlan.active(True) +
-wlan.connect(wlan_id, wlan_pass) +
-time.sleep(1)+
  
-while wlan.isconnected() == False: +void indexPage() 
-  pass+  int duty_r 128; 
 +  int duty_g 128; 
 +  int duty_b = 128;
  
-print('Device IP:', wlan.ifconfig()[0])+  if (server.hasArg("r")) duty_r = server.arg("r").toInt();  
 +  if (server.hasArg("g")) duty_g = server.arg("g").toInt(); 
 +  if (server.hasArg("b")) duty_b = server.arg("b").toInt(); 
 +   
 +  analogWrite(PIN_LED_R, 255 - duty_r); 
 +  analogWrite(PIN_LED_G, 255 - duty_g); 
 +  analogWrite(PIN_LED_B, 255 - duty_b);
  
 +  String page = "<!DOCTYPE html>";
 +  page += "<html>";
 +  page += "<head>";
 +  page += "</head>";
 +  page += "<body>";
 +  page += R"(<form action="/">)";
 +  page += R"(Red: <input type="number" name="r" min="0" max="255" value="<=VALUE=R=>"> <br/>)";
 +  page += R"(Green: <input type="number" name="g" min="0" max="255" value="<=VALUE=G=>"> <br/>)";
 +  page += R"(Blue: <input type="number" name="b" min="0" max="255" value="<=VALUE=B=>"> <br/>)";
 +  page += R"(<input type="submit" value="Send">)";
 +  page += "</form>";
 +  page += "</body>";
 +  page += "</html>";
  
-def index(requestparams): +  page.replace("<=VALUE=R=>"String(duty_r)); 
-    duty_r '512' +  page.replace("<=VALUE=G=>", String(duty_g)); 
-    duty_g '512' +  page.replace("<=VALUE=B=>", String(duty_b)); 
-    duty_b '512'+  server.send(200, "text/html", page);  
 +}
  
-    if ('r' in params): +void setup() { 
-        duty_r = params['r'] +  Serial.begin(9600); 
-        LedR.duty(1023 - int(duty_r))+  Serial.println(); 
 +  pinMode(PIN_LED_R, OUTPUT)
 +  pinMode(PIN_LED_G, OUTPUT); 
 +  pinMode(PIN_LED_B, OUTPUT); 
 +  analogWriteRange(256); 
 +  analogWrite(PIN_LED_R, 128); 
 +  analogWrite(PIN_LED_G, 128); 
 +  analogWrite(PIN_LED_B, 128);
  
-    if ('g' in params): +  Serial.print("Connecting to WiFi") 
-        duty_g params['g'] +  WiFi.mode(WIFI_STA);                                          
-        LedG.duty(1023 - int(duty_g))+  WiFi.begin(WIFI_NAME, WIFI_PASSWORD); 
 +  while (WiFi.status() !WL_CONNECTED) { 
 +    Serial.print("."); 
 +    delay(500); 
 +  } 
 +  Serial.println(); 
 +  Serial.println("WiFi connected"); 
 +  Serial.print("IP address: "); 
 +  Serial.println(WiFi.localIP());
  
-    if ('b' in params): +  server.on("/", indexPage); 
-        duty_b = params['b'+  server.begin() 
-        LedB.duty(1023 - int(duty_b)) +} 
-        +void loop() { 
- +  server.handleClient() 
-    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()+
 </file> </file>
  
Строка 106: Строка 113:
 </WRAP> </WRAP>
  
-Следует обратить внимание, что перед установкой яркости светодиода мы вычитаем полученные данные из числа 1023. Это сделано потому, что наш RGB светодиод с общим анодом (имеет общий плюс).+Следует обратить внимание, что перед установкой яркости светодиода мы вычитаем полученные данные из числа 255. Это сделано потому, что наш RGB светодиод с общим анодом (имеет общий плюс) и мы установили диапазон аналогового выходов на 256. 
 + 
 +<code python[enable_line_numbers="2", start_line_numbers_at="56"]> 
 +  analogWriteRange(256);  
 +</code>