===== Эксперимент 65. Wi-Fi термометр =====
В прошлых экспериментах мы научились создавать веб-сервер на Python и получать данные от пользователя. Мы управляли цветом светодиода. Теперь наоборот, мы создадим веб сервер, который сообщает нам полезную информацию. Пусть это будут данные о температуре. Создадим прострой термометр, к которому мы сможем обратиться с помощью браузера.
==== Схема эксперимента ====
{{ :products:esp-iot:exp18_sch.png?nolink |}}
//Рисунок 1. Электрическая принципиальная схема эксперимента//
{{ :products:esp-iot:exp18_mon.png?direct&600 |}}
//Рисунок 2. Монтажная схема эксперимента//
==== Программный код эксперимента ====
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()
Перед запуском программы необходимо убедиться, что библиотека micropyserver загружена во внутреннюю память микроконтроллера.
{{ :products:esp-iot:micropyserver.zip |}}
Код подключения к сети и создания веб- сервера был изучен в предыдущих экспериментах, поэтому здесь повторно останавливаться на этом не будем.
Создаем шину 1-Wire на 12 выводе микроконтроллера и создаем объект датчика температуры DS18B20 (подробно о работе с [[theory:1wire|шиной 1-Wire]] и [[products:laboratory_iot:exp39|датчиком DS18B20]])
# the device is on GPIO12
ow = onewire.OneWire(Pin(12))
# create the onewire object
ds = ds18x20.DS18X20(ow)
Когда происходит обращение к веб-серверу по адресу / (корневая директория, главная страница), то вызывается функция ''show_message''. В ней считываются данные с датчика о текущей температуре и возвращаются клиенту. Для получения новых данных необходимо повторно обратиться к серверу обновив страницу в браузере.