Различия

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

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

Следующая версия
Предыдущая версия
products:laboratory_iot_c:exp65 [2024/12/05 15:58] – создано labuser30products:laboratory_iot_c:exp65 [2024/12/05 16:31] (текущий) – [Программный код эксперимента] labuser30
Строка 1: Строка 1:
 ===== Эксперимент 65. Wi-Fi термометр ===== ===== Эксперимент 65. Wi-Fi термометр =====
  
-В прошлых экспериментах мы научились создавать веб-сервер на Python и получать данные от пользователя. Мы управляли цветом светодиода. Теперь наоборот, мы создадим веб сервер, который сообщает нам полезную информацию. Пусть это будут данные о температуре. Создадим прострой термометр, к которому мы сможем обратиться с помощью браузера.+В прошлых экспериментах мы научились создавать веб-сервер и получать данные от пользователя. Мы управляли цветом светодиода. Теперь наоборот, мы создадим веб сервер, который сообщает нам полезную информацию. Пусть это будут данные о температуре. Создадим прострой термометр, к которому мы сможем обратиться с помощью браузера.
  
 ==== Схема эксперимента ==== ==== Схема эксперимента ====
Строка 13: Строка 13:
  
 ==== Программный код эксперимента ==== ==== Программный код эксперимента ====
-<file python Exp39.py[enable_line_numbers="2", start_line_numbers_at="1"]> +<file arduino Exp39.ino[enable_line_numbers="2", start_line_numbers_at="1"]> 
-import time +#include <ESP8266WiFi.h> 
-from machine import I2C, Pin +#include <ESP8266WebServer.h> 
-import onewire +#include <OneWire.h> 
-import ds18x20 +#include <DallasTemperature.h>
-from micropyserver import MicroPyServer  +
-import network +
-import gc +
-_init() +
-gc.collect()+
  
-# the device is on GPIO12 +#define WIFI_NAME     "Имя WiFi сети" 
-ow = onewire.OneWire(Pin(12))+#define WIFI_PASSWORD "Пароль" 
 +#define BUS_PIN 12    //the device is on GPIO12
    
-# create the onewire object +OneWire oneWire(BUS_PIN); 
-ds = ds18x20.DS18X20(ow)+DallasTemperature sensors(&oneWire);
  
-wlan_id = "Имя WiFi сети" +ESP8266WebServer server(80); 
-wlan_pass = "Пароль" + 
-  +void showMessage() { 
-wlan = network.WLAN(network.STA_IF+  sensors.requestTemperatures() 
-wlan.active(True+  float tempC = sensors.getTempCByIndex(0); 
-wlan.connect(wlan_idwlan_pass+  server.send(200"text/html", String(tempC)); 
-time.sleep(1+
-  + 
-while wlan.isconnected() == False: +void setup({ 
-    pass +  Serial.begin(9600); 
-  +  Serial.println(); 
-print('Device IP:', wlan.ifconfig()[0]) +   
-  +  Serial.print("Connecting to WiFi");  
-def show_message(requestparams): +  WiFi.mode(WIFI_STA);                                          
-    ''' request handler ''' +  WiFi.begin(WIFI_NAMEWIFI_PASSWORD); 
-    roms = ds.scan() +  while (WiFi.status() != WL_CONNECTED) { 
-    ds.convert_temp() +    Serial.print("."); 
-    time.sleep_ms(750+    delay(500); 
-  +  } 
-    for rom in roms: +  Serial.println()
-        temp = str(ds.read_temp(rom)) +  Serial.println("WiFi connected"); 
-        server.send(temp+  Serial.print("IP address: "); 
-  +  Serial.println(WiFi.localIP()); 
-server = MicroPyServer() + 
-''' add request handler ''' +  server.on("/", showMessage); 
-server.add_route("/", show_message+  server.begin();  
-''' start server ''' +
-server.start()+ 
 +void loop() { 
 +  server.handleClient();  
 +}
 </file> </file>
  
-<WRAP center round alert 60%> +Код подключения к сети и создания веб-сервера был изучен в предыдущих экспериментахпоэтому здесь повторно останавливаться на этом не будем.
-Перед запуском программы необходимо убедитьсячто библиотека micropyserver загружена во внутреннюю память микроконтроллера. +
-</WRAP> +
-<WRAP center round download 60%> +
-{{ :products:esp-iot:micropyserver.zip |}} +
-</WRAP>+
  
-Код подключения к сети и создания веб- сервера был изучен в предыдущих экспериментах, поэтому здесь повторно останавливаться на этом не будем.+Создаем шину 1-Wire на 12 выводе микроконтроллера и создаем объект датчика температуры DS18B20 (подробно о работе с [[theory:1wire|шиной 1-Wire]] и [[products:laboratory_iot_c:exp39|датчиком DS18B20]])
  
-Создаем шину 1-Wire на 12 выводе микроконтроллера и создаем объект датчика температуры DS18B20 (подробно о работе с [[theory:1wire|шиной 1-Wire]] и [[products:laboratory_iot:exp39|датчиком DS18B20]]) +<code arduino[enable_line_numbers="2", start_line_numbers_at="10"]>
-<code python[enable_line_numbers="2", start_line_numbers_at="11"]>+
 # the device is on GPIO12 # the device is on GPIO12
-ow = onewire.OneWire(Pin(12)+OneWire oneWire(BUS_PIN); 
-  +DallasTemperature sensors(&oneWire);
-# create the onewire object +
-ds = ds18x20.DS18X20(ow)+
 </code> </code>
  
-Когда происходит обращение к веб-серверу по адресу / (корневая директория, главная страница), то вызывается функция ''show_message''. В ней считываются данные с датчика о текущей температуре и возвращаются клиенту. Для получения новых данных необходимо повторно обратиться к серверу обновив страницу в браузере.+Когда происходит обращение к веб-серверу по адресу / (корневая директория, главная страница), то вызывается функция ''showMessage''. В ней считываются данные с датчика о текущей температуре и возвращаются клиенту. Для получения новых данных необходимо повторно обратиться к серверу обновив страницу в браузере.