Эксперимент 57. Wi-Fi термометр

В прошлых экспериментах мы научились создавать веб- сервер на Python и получать данные от пользователя. Мы управляли цветом светодиода. Теперь наоборот, мы создадим веб сервер, который сообщает нам полезную информацию. Пусть это будут данные о температуре. Создадим прострой термометр, к которому мы сможем обратиться с помощью браузера.

Схема эксперимента

Рисунок 1. Электрическая принципиальная схема эксперимента

Рисунок 2. Монтажная схема эксперимента

Программный код эксперимента

Exp39.py
  1. import time
  2. from machine import I2C, Pin
  3. import onewire
  4. import ds18x20
  5. from micropyserver import MicroPyServer
  6. import network
  7. import gc
  8. _init()
  9. gc.collect()
  10.  
  11. # the device is on GPIO12
  12. ow = onewire.OneWire(Pin(12))
  13.  
  14. # create the onewire object
  15. ds = ds18x20.DS18X20(ow)
  16.  
  17. wlan_id = "Имя WiFi сети"
  18. wlan_pass = "Пароль"
  19.  
  20. wlan = network.WLAN(network.STA_IF)
  21. wlan.active(True)
  22. wlan.connect(wlan_id, wlan_pass)
  23. time.sleep(1)
  24.  
  25. while wlan.isconnected() == False:
  26. pass
  27.  
  28. print('Device IP:', wlan.ifconfig()[0])
  29.  
  30. def show_message(request, params):
  31. ''' request handler '''
  32. roms = ds.scan()
  33. ds.convert_temp()
  34. time.sleep_ms(750)
  35.  
  36. for rom in roms:
  37. temp = str(ds.read_temp(rom))
  38. server.send(temp)
  39.  
  40. server = MicroPyServer()
  41. ''' add request handler '''
  42. server.add_route("/", show_message)
  43. ''' start server '''
  44. server.start()

Перед запуском программы необходимо убедиться, что библиотека micropyserver загружена во внутреннюю память микроконтроллера.

Код подключения к сети и создания веб- сервера был изучен в предыдущих экспериментах, поэтому здесь повторно останавливаться на этом не будем.

Создаем шину 1-Wire на 12 выводе микроконтроллера и создаем объект датчика температуры DS18B20 (подробно о работе с шиной 1-Wire и датчиком DS18B20)

  1. # the device is on GPIO12
  2. ow = onewire.OneWire(Pin(12))
  3.  
  4. # create the onewire object
  5. ds = ds18x20.DS18X20(ow)

Когда происходит обращение к веб- серверу по адресу / (корневая директория, главная страница), то вызывается функция show_message. В ней считываются данные с датчика о текущей температуре и вовзращаются клиенту. Для получения новых данных необходимо повторно обратиться к серверу обновив страницу в браузере.