Различия

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

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

Следующая версия
Предыдущая версия
products:laboratory_iot_c:exp59 [2024/12/05 14:34] – создано labuser30products:laboratory_iot_c:exp59 [2024/12/05 14:40] (текущий) – [Программный код эксперимента] labuser30
Строка 25: Строка 25:
 ==== Программный код эксперимента ==== ==== Программный код эксперимента ====
  
-<file python Exp59.py[enable_line_numbers="2", start_line_numbers_at="1"]> +<file arduino Exp59.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()+
  
-Led = Pin(13, Pin.OUT) +#define WIFI_NAME     "WiFi_Name" 
-pwmLed = PWM(Led)+#define WIFI_PASSWORD "WiFi_Password" 
 +#define PIN_LED 13 
  
-wlan_id = "Wi-Fi_Name" +ESP8266WebServer server(80);
-wlan_pass = "Wi-Fi_Password"+
  
-wlan = network.WLAN(network.STA_IF+void indexPage() { 
-wlan.active(True+  if (server.hasArg("duty"){ 
-wlan.connect(wlan_idwlan_pass+    analogWrite(PIN_LED, server.arg("duty").toInt()); 
-time.sleep(1)+    server.send(200"text/html", "Duty is: " + server.arg("duty")); 
 +  } else { 
 +    server.send(200, "text/html", "No Duty param")
 +  } 
 +}
  
-while wlan.isconnected() == False: +void setup() { 
-    pass+  Serial.begin(9600); 
 +  Serial.println(); 
 +  pinMode(PIN_LED, OUTPUT); 
 +  analogWriteRange(1024); 
 +  analogWrite(PIN_LED, 0); 
 +   
 +  Serial.print("Connecting to WiFi");  
 +  WiFi.mode(WIFI_STA);                                          
 +  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());
  
-print('Device IP:', wlan.ifconfig()[0]) +  server.on("/", indexPage); 
- +  server.begin() 
- +} 
-def index(request, params): +void loop() { 
-    ''' request handler ''' +  server.handleClient() 
-    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> </file>
  
 <WRAP center round important 60%> <WRAP center round important 60%>
-Первым делом в коде программы нужно заменить ''Wi-Fi_Name'' на имя нужной ести, а ''Wi-Fi_Password'' на пароль от нее.+Первым делом в коде программы нужно заменить ''WiFi_Name'' на имя нужной сети, а ''WiFi_Password'' на пароль от нее.
 </WRAP> </WRAP>
  
-При обращении к главной странице сервиса происходит вызов функции ''index'' +При обращении к главной странице сервиса происходит вызов функции ''indexPage()'' 
-<code python[enable_line_numbers="2", start_line_numbers_at="38"]> +<code arduino[enable_line_numbers="2", start_line_numbers_at="38"]> 
-server.add_route("/", index)+  server.on("/", indexPage);
 </code> </code>
  
-Функция ''index'' принимает 2 параметра ''request'' и ''param''. В param находятся параметры, переданные серверу в запросе клиента. Сначала мы проверяем наличие параметра ''duty''+Сначала мы проверяем наличие параметра ''duty''
  
-<code python[enable_line_numbers="2", start_line_numbers_at="28"]> +<code arduino[enable_line_numbers="2", start_line_numbers_at="11"]> 
-    if ('duty' in params):+  if (server.hasArg("duty"){
 </code> </code>
  
 если такого параметра не было передано серверу, то сервер отвечает строкой ''No Duty param''. Если ''duty'' было задано, то значение этого параметра используем в качестве коэффициента заполнения ШИМ и выводим в браузер строку с указанием принятого значения.  если такого параметра не было передано серверу, то сервер отвечает строкой ''No Duty param''. Если ''duty'' было задано, то значение этого параметра используем в качестве коэффициента заполнения ШИМ и выводим в браузер строку с указанием принятого значения. 
-<code python[enable_line_numbers="2", start_line_numbers_at="29"]> +<code arduino[enable_line_numbers="2", start_line_numbers_at="12"]> 
-        pwmLed.duty(int(params['duty'])) +    analogWrite(PIN_LED, server.arg("duty").toInt()); 
-        server.send("Duty is: " + params['duty'])+    server.send(200, "text/html", "Duty is: " + server.arg("duty"));
 </code> </code>
  
-Так как URL передается в виде строки и, соответственно, параметры тоже, то перед использованием значения параметра его необходимо конвертировать в число с помощью функции ''int''.+Так как URL передается в виде строки и, соответственно, параметры тоже, то перед использованием значения параметра его необходимо конвертировать в число с помощью функции ''toInt()''.
  
 Попробуй отправлять запрос на сервер с разными значениями параметра ''duty'' Попробуй отправлять запрос на сервер с разными значениями параметра ''duty''