Построение IoT-термометра на Python: Полное руководство с Zerynth
Компоненты и материалы
| MikroE Flip & Click | × | 1 |
| Arduino Due | × | 1 |
| Particle Photon | × | 1 |
| NodeMCU ESP8266 Breakout Board | × | 1 |
| SparkFun Photon RedBoard | × | 1 |
| MikroE Temp&Hum Click (HTS221) | × | 1 |
| MikroE WiFi Plus Click (MRF24WB0MA) | × | 1 |
| Espressif Wemos D1 Mini | × | 1 |
| Arduino Zero | × | 1 |
Приложения и сервисы
| Zerynth Studio — мощная IDE для встроенного программирования на Python с поддержкой IoT |
О проекте

Приложение Zerynth App
Zerynth App — мобильное приложение для Android и iOS, позволяющее быстро прототипировать графические интерфейсы для IoT-проектов.
С Zerynth App любой смартфон становится пультом управления и дисплеем для умных объектов и IoT-систем! Вы можете управлять подключенными устройствами, запрограммированными на Zerynth, обеспечивая двустороннюю связь между ними и мобильным устройством.
В этом руководстве мы разработаем простой, но мощный IoT-термометр, используя микроконтроллер на базе Zerynth и Zerynth App как удаленный дисплей.
Необходимые материалы
Сначала нужна плата. Можно выбрать любую 32-битную плату, поддерживаемую Zerynth. Мы выбрали Flip&Click от Mikroelektronika — он имеет много общего с Arduino, включая 32-битный AT91SAM3X8E от Microchip, ядро Arduino Due.
Для измерения температуры — Temp&Hum Click с датчиком HTS221 (температура и относительная влажность).
Для интернета — WiFi PLUS Click с модулем MRF24WB0MA (2.4 GHz, IEEE 802.11) от Microchip и контроллером MCW1001 со стеком TCP/IP.
Также понадобятся:
Сборка IoT-термометра
Flip&Click — «двусторонний кузен» Arduino. С одной стороны — Arduino, с другой — четыре разъема mikroBUS для «click boards» (миниатюрных шилдов). Просто вставьте Temp&Hum и WiFi Plus в слоты A и B соответственно.
Программирование на Python
Клонирование примера
После установки Zerynth Studio и создания аккаунта клонируйте пример «Zerynth App Oscilloscope». Посмотрите, как клонировать пример.

Исходный код в main.py — здесь разрабатывается логика Python-скрипта. Начнем с оригинала и адаптируем под наш проект.
################################################################################
# IoT Thermometer
################################################################################
from wireless import wifi
# пример основан на Particle Photon
# измените следующую строку для другого WiFi-драйвера
from broadcom.bcm43362 import bcm43362 as wifi_driver
import streams
import adc
# Import the Zerynth APP library
from zerynthapp import zerynthapp
streams.serial()
sleep(1000)
print("STARTING...")
try:
# Device UID и TOKEN создаются в панели ADM
zapp = zerynthapp.ZerynthApp("DEVICE UID", "DEVICE TOKEN", log=True)
# Подключение к WiFi (задайте свой SSID и пароль)
wifi_driver.auto_init()
for i in range(0,5):
try:
wifi.link("SSID", wifi.WIFI_WPA2, "PASSWORD")
break
except Exception as e:
print("Can't link", e)
else:
print("Impossible to link!")
while True: sleep(1000)
# Запуск экземпляра Zerynth App
# Создайте шаблон с файлами из папки "template", загрузите в ADM и свяжите с устройством
zapp.run()
# Чтение ADC и отправка значений в ADM
while True:
sleep(1000)
x = (adc.read(A4)*100)//4096
zapp.event({"data": x})
if x > 95:
# мобильное уведомление (лимит: 1 в минуту на устройство в ADM sandbox)
zapp.notify("ALARM!", "The value is greater than 95!")
except Exception as e:
print(e)
В этом примере графический осциллограф визуализируется в Zerynth App с данными от аналогового датчика на пине A4.
Импорт правильного WiFi-драйвера и библиотек датчиков
Пример основан на Particle Photon. Для WiFi Plus Click меняем:
from broadcom.bcm43362 import bcm43362 as wifi_driver
на
from microchip.mcw1001a import mcw1001a as wifi_driver
и
wifi_driver.auto_init()
на
wifi_driver.init(SERIAL2, D24) # слот B
Для датчика температуры Temp&Hum Click добавляем:
# Import the HTS221 library
from stm.hts221 import hts221
temp_hum = hts221.HTS221(I2C0, D21) # слот A
Чтение датчика:
tmp, hum = temp_hum.get_temp_humidity() # Read tmp and hum
Настройка SSID и пароля
Отредактируйте строку под свою сеть:
wifi.link("SSID", wifi.WIFI_WPA2, "PASSWORD")
Создание и настройка подключенного устройства
Теперь создадим «connected device» и свяжем экземпляр «zerynthapp» с ним. Ниже скриншоты с шагами. Подробнее в документации.

Учетные данные устройства (UID и TOKEN) можно скопировать из Zerynth Studio (панель ADM). «IP» — адрес Zerynth ADM, используется, когда сетевой драйвер не поддерживает разрешение имен.

Создание, загрузка и установка шаблона
Через Zerynth App можно запускать красивые адаптивные GUI на HTML, CSS и JavaScript. Никакого Android/iOS кода!
Графический интерфейс каждого устройства хостится в Zerynth ADM sandbox и состоит из HTML5, JS, CSS и изображений. Добавление ADM JS Library позволяет приложению взаимодействовать с устройством (прием и отправка сообщений).
Шаблоны добавляются через иконку «плюс».

Загрузите шаблон из соответствующей папки. Файл шаблона называется index.html — можно редактировать. В данном случае оставьте как есть.

Загрузка скрипта в устройство
После правок код должен выглядеть так:
################################################################################
# IoT Thermometer
################################################################################
from wireless import wifi
from microchip.mcw1001a import mcw1001a as wifi_driver
import streams
import adc
streams.serial()
# Import the Zerynth APP library
from zerynthapp import zerynthapp
# Import the HTS221 library
from stm.hts221 import hts221
temp_hum = hts221.HTS221(I2C0, D21) # slot A
sleep(1000)
print("STARTING...")
try:
# Device UID и TOKEN из панели ADM
zapp = zerynthapp.ZerynthApp("DEVICE UID", "DEVICE TOKEN", ip="178.22.65.123", log=True)
# Подключение к WiFi
wifi_driver.init(SERIAL2, D24) # slot B
for i in range(0,5):
try:
wifi.link("SSID", wifi.WIFI_WPA2, "PASSWORD")
break
except Exception as e:
print("Can't link", e)
else:
print("Impossible to link!")
while True: sleep(1000)
# Запуск Zerynth App
zapp.run()
# Чтение датчика и отправка в ADM
while True:
sleep(1000)
tmp, hum = temp_hum.get_temp_humidity()
print("Temp is:", tmp, "Humidity is:", hum)
try:
zapp.event({"data": tmp})
except Exception as e:
print(e)
if tmp > 30:
# Push-уведомление (лимит: 1 в минуту на устройство в ADM sandbox)
try:
zapp.notify("ALARM!", "High Temperature!")
except Exception as e:
print(e)
except Exception as e:
print(e)
Важно: «DEVICE UID», «DEVICE TOKEN», «SSID» и «PASSWORD» замените на свои.
Теперь можно загрузить скрипт в устройство (Uplink).
Просмотр дашборда в Zerynth App
Откройте Zerynth App, войдите, выберите устройство — увидите дашборд IoT-термометра. Приложение также получает push-уведомления от устройств. В данном случае — при превышении температуры порога!

Вопросы? Обсудите на форуме Zerynth.
Приятного творчества!
Код
IoT Thermometer (Python)
################################################################################
# Zerynth App Oscilloscope
################################################################################
from wireless import wifi
from microchip.mcw1001a import mcw1001a as wifi_driver
import streams
import adc
streams.serial()
# Import the Zerynth APP library
from zerynthapp import zerynthapp
# Import the HTS221 library
from stm.hts221 import hts221
temp_hum = hts221.HTS221(I2C0, D21) # slot A
sleep(1000)
print("STARTING...")
try:
# Device UID и TOKEN из панели ADM
zapp = zerynthapp.ZerynthApp("DEVICE UID", "DEVICE TOKEN", ip="178.22.65.123", log=True)
# Подключение к WiFi
wifi_driver.init(SERIAL2, D24) # slot B
for i in range(0,5):
try:
wifi.link("SSID", wifi.WIFI_WPA2, "PASSWORD")
break
except Exception as e:
print("Can't link", e)
else:
print("Impossible to link!")
while True: sleep(1000)
# Запуск Zerynth App
zapp.run()
# Чтение датчика и отправка в ADM
while True:
sleep(1000)
tmp, hum = temp_hum.get_temp_humidity()
print("Temp is:", tmp, "Humidity is:", hum)
try:
zapp.event({"data": tmp})
except Exception as e:
print(e)
if tmp > 30:
# Push-уведомление
try:
zapp.notify("ALARM!", "High Temperature!")
except Exception as e:
print(e)
except Exception as e:
print(e)
Схемы
Производственный процесс
- Термометр: от термоскопа Галилея к современным цифровым датчикам
- ИК-датчик температуры TMP006 с Raspberry Pi: библиотека Python и руководство по настройке
- Создание удалённого датчика температуры на Raspberry Pi и Python — пошаговое руководство
- Освоение PSoC 6 Pioneer Board с IoT Add-On Shield: руководство разработчика
- Как IoT революционизирует повседневную жизнь
- Установка Python и PyCharm на Windows: пошаговое руководство
- Переименование файлов и директорий в Python с os.rename() — пошаговое руководство
- Автоматизация входа в Facebook с Python и Selenium: пошаговое руководство
- Вычисление среднего значения в Python: практическое руководство
- Отправка email в Python через SMTP: простое и быстрое руководство