Различия

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

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

Следующая версия
Предыдущая версия
products:laboratory_iot:exp65 [2021/04/25 17:33] – создано labuser29products:laboratory_iot:exp65 [2024/12/05 15:57] (текущий) – [Программный код эксперимента] labuser30
Строка 1: Строка 1:
-===== Эксперимент 57. Wi-Fi термометр =====+===== Эксперимент 65. Wi-Fi термометр ===== 
 + 
 +В прошлых экспериментах мы научились создавать веб-сервер на Python и получать данные от пользователя. Мы управляли цветом светодиода. Теперь наоборот, мы создадим веб сервер, который сообщает нам полезную информацию. Пусть это будут данные о температуре. Создадим прострой термометр, к которому мы сможем обратиться с помощью браузера. 
 + 
 +==== Схема эксперимента ==== 
 + 
 +{{ :products:esp-iot:exp18_sch.png?nolink |}} 
 +//Рисунок 1. Электрическая принципиальная схема эксперимента// 
 + 
 +{{ :products:esp-iot:exp18_mon.png?direct&600 |}} 
 +//Рисунок 2. Монтажная схема эксперимента// 
 + 
 + 
 +==== Программный код эксперимента ==== 
 +<file python Exp39.py[enable_line_numbers="2", start_line_numbers_at="1"]> 
 +import time 
 +from machine import I2C, Pin 
 +import onewire 
 +import ds18x20 
 +from micropyserver import MicroPyServer  
 +import network 
 +import gc 
 +_init() 
 +gc.collect() 
 + 
 +# the device is on GPIO12 
 +ow = onewire.OneWire(Pin(12)) 
 +  
 +# create the onewire object 
 +ds = ds18x20.DS18X20(ow) 
 + 
 +wlan_id = "Имя WiFi сети" 
 +wlan_pass = "Пароль" 
 +  
 +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 show_message(request, params): 
 +    ''' request handler ''' 
 +    roms = ds.scan() 
 +    ds.convert_temp() 
 +    time.sleep_ms(750) 
 +  
 +    for rom in roms: 
 +        temp = str(ds.read_temp(rom)) 
 +        server.send(temp) 
 +  
 +server = MicroPyServer() 
 +''' add request handler ''' 
 +server.add_route("/", show_message) 
 +''' start server ''' 
 +server.start() 
 +</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:exp39|датчиком DS18B20]]) 
 +<code python[enable_line_numbers="2", start_line_numbers_at="11"]> 
 +# the device is on GPIO12 
 +ow = onewire.OneWire(Pin(12)) 
 +  
 +# create the onewire object 
 +ds = ds18x20.DS18X20(ow) 
 +</code> 
 + 
 +Когда происходит обращение к веб-серверу по адресу / (корневая директория, главная страница), то вызывается функция ''show_message''. В ней считываются данные с датчика о текущей температуре и возвращаются клиенту. Для получения новых данных необходимо повторно обратиться к серверу обновив страницу в браузере.