Construir un termómetro IoT con Python: Guía completa
Componentes y suministros
| MikroE Flip & Click | × | 1 | |
![]() | Arduino Due | × | 1 |
![]() | Particle Photon | × | 1 |
![]() | NodeMCU ESP8266 Breakout Board | × | 1 |
![]() | SparkFun Photon RedBoard | × | 1 |
| MikroE Temp&Hum Click | × | 1 | |
| MikroE WiFi Plus Click | × | 1 | |
![]() | Espressif Wemos D1 Mini | × | 1 |
![]() | Arduino Zero | × | 1 |
Aplicaciones y servicios en línea
![]() | Zerynth Studio |
Acerca de este proyecto

La app Zerynth
Zerynth App es una aplicación móvil para Android y iOS que permite prototipado rápido de interfaces gráficas para tus proyectos IoT.
Convierte cualquier móvil en controlador y pantalla para objetos inteligentes y sistemas IoT. Gestiona y controla dispositivos programados con Zerynth, habilitando comunicación bidireccional entre ellos y tu móvil.
En este tutorial veremos cómo desarrollar un termómetro IoT simple pero potente, usando un microcontrolador de 32 bits con Zerynth y la app Zerynth como pantalla remota.
Materiales requeridos
Necesitas una placa compatible con Zerynth (32 bits). Elegimos Flip&Click de Mikroelektronika, similar a Arduino, con núcleo AT91SAM3X8E de Microchip (el mismo de Arduino Due).
- Para medir temperatura: Temp&Hum Click con sensor HTS221 (temperatura y humedad relativa)
- Para conexión a internet: WiFi PLUS Click con módulo MRF24WB0MA (2.4GHz, IEEE 802.11) de Microchip, con controlador MCW1001 y pila TCP/IP integrada
- Zerynth Studio: IDE potente para programación embebida en Python que habilita IoT. Descargar aquí
- Zerynth App. Descargar aquí
Ensamblaje del termómetro IoT
Flip&Click es el primo de dos caras de Arduino. Por un lado es un Arduino; por el otro, cuatro zócalos mikroBUS abiertos para "click boards" (módulos complementarios como shields pero miniaturizados). Solo añade Temp&Hum y WiFi Plus en los slots A y B respectivamente.
Cómo programar el termómetro IoT con Python
Clonar el ejemplo
Instala Zerynth Studio, crea usuario y clona el ejemplo "Zerynth App Oscilloscope". Aprende a clonar un ejemplo.

Código original en main.py (lógica del script Python). Partimos de él y lo adaptamos.
################################################################################
# IoT Thermometer
################################################################################
from wireless import wifi
# Este ejemplo usa Particle Photon
# Cambia la siguiente línea para otro driver wifi
from broadcom.bcm43362 import bcm43362 as wifi_driver
import streams
import adc
# Importar librería Zerynth APP
from zerynthapp import zerynthapp
streams.serial()
sleep(1000)
print("STARTING...")
try:
# Device UID y TOKEN se crean en panel ADM
zapp = zerynthapp.ZerynthApp("DEVICE UID", "DEVICE TOKEN", log=True)
# Conectar a WiFi (configura SSID y password)
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)
# Iniciar instancia Zerynth app
# Recuerda crear plantilla con archivos de carpeta "template"
# Subir a ADM y asociar al dispositivo conectado
zapp.run()
# Leer ADC y enviar valores a ADM
while True:
sleep(1000)
x = (adc.read(A4)*100)//4096
zapp.event({"data":x})
if x > 95:
# Enviar notificación móvil (límite: 1 por minuto por dispositivo en sandbox ADM)
zapp.notify("ALARM!", "The value is greater than 95!")
except Exception as e:
print(e)
Importar el driver WiFi y librerías del sensor correctos
El ejemplo usa Particle Photon y su driver WiFi. Para usar WiFi Plus Click, cambia:
from broadcom.bcm43362 import bcm43362 as wifi_driver
por:
from microchip.mcw1001a import mcw1001a as wifi_driver
y:
wifi_driver.auto_init()
por:
wifi_driver.init(SERIAL2, D24) # slot B
Para el sensor de temperatura Temp&Hum Click, añade:
# Importar librería HTS221
from stm.hts221 import hts221
temp_hum = hts221.HTS221(I2C0, D21) # slot A
Para leer el sensor:
tmp, hum = temp_hum.get_temp_humidity() # Leer temp y hum
Configurar SSID y contraseña WiFi
Edita la línea:
wifi.link("SSID", wifi.WIFI_WPA2, "PASSWORD")
Crear y configurar un dispositivo conectado
Crea un "dispositivo conectado" y vincula la instancia "zerynthapp". Las credenciales del dispositivo (UID y TOKEN) se copian desde Zerynth Studio (panel ADM). "IP" es la dirección del ADM de Zerynth (usada cuando el driver de red no soporta resolución de hostname).


Crear, subir y configurar la plantilla
Zerynth App ejecuta interfaces GUI responsivas usando HTML, CSS y JavaScript. ¡No necesitas código Android ni iOS!
La interfaz gráfica de cada dispositivo se aloja en el sandbox ADM de Zerynth y consiste en archivos HTML5, JS, CSS e imágenes. Añadiendo la librería JS de ADM a la plantilla, la app interactúa con el dispositivo (envío y recepción de mensajes).
Las plantillas se añaden con el icono "+". Sube la plantilla desde la carpeta dedicada. El archivo que la define es index.html (editable). En este caso, déjalo como está.


Subir el script (uplink)
Tras editar, el código queda así:
################################################################################
# IoT Thermometer
################################################################################
from wireless import wifi
from microchip.mcw1001a import mcw1001a as wifi_driver
import streams
import adc
streams.serial()
# Importar librería Zerynth APP
from zerynthapp import zerynthapp
# Importar librería HTS221
from stm.hts221 import hts221
temp_hum = hts221.HTS221(I2C0, D21) # slot A
sleep(1000)
print("STARTING...")
try:
# Device UID y TOKEN del panel ADM
zapp = zerynthapp.ZerynthApp("DEVICE UID", "DEVICE TOKEN", ip="178.22.65.123", log=True)
# Conectar a 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)
# Iniciar instancia Zerynth app
zapp.run()
# Leer sensor y enviar valores a 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:
# Notificación móvil (límite: 1/min/dispositivo en sandbox ADM)
try:
zapp.notify("ALARM!", "High Temperature!")
except Exception as e:
print(e)
except Exception as e:
print(e)
Recuerda editar "DEVICE UID", "DEVICE TOKEN", "SSID" y "PASSWORD" con tus parámetros. Luego haz uplink del script a tu dispositivo.
Ver el panel del termómetro IoT en la app Zerynth
Abre Zerynth App, inicia sesión y selecciona el dispositivo para ver el panel. La app también recibe notificaciones push de los dispositivos conectados. Aquí aparecerá una notificación cuando la temperatura supere el umbral.

¿Preguntas? Abre un debate en el foro de la comunidad Zerynth.
¡Disfruta!
Código
Termómetro IoT Python
################################################################################
# Zerynth App Oscilloscope
################################################################################
from wireless import wifi
from microchip.mcw1001a import mcw1001a as wifi_driver
import streams
import adc
streams.serial()
# Importar librería Zerynth APP
from zerynthapp import zerynthapp
# Importar librería HTS221
from stm.hts221 import hts221
temp_hum = hts221.HTS221(I2C0, D21) # slot A
sleep(1000)
print("STARTING...")
try:
# Device UID y TOKEN del panel ADM
zapp = zerynthapp.ZerynthApp("DEVICE UID", "DEVICE TOKEN", ip="178.22.65.123", log=True)
# Conectar a 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)
# Iniciar instancia Zerynth app
zapp.run()
# Leer sensor y enviar valores a 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:
# Notificación móvil (límite: 1/min/dispositivo en sandbox ADM)
try:
zapp.notify("ALARM!", "High Temperature!")
except Exception as e:
print(e)
except Exception as e:
print(e)
Esquemáticos
Proceso de manufactura
- El termómetro: del termoscopio de Galileo a los sensores digitales modernos
- Sensor infrarrojo TMP006 con Raspberry Pi: librería Python y guía de configuración
- Construya un sensor de temperatura remoto con Raspberry Pi y Python – Guía paso a paso
- Dominando la Placa PSoC 6 Pioneer con Shield IoT Add-On: Guía para Desarrolladores
- Cómo el IoT Revoluciona la Vida Cotidiana
- Instalar Python y PyCharm en Windows: Guía Paso a Paso
- Cómo renombrar archivos y directorios en Python con os.rename() – Guía paso a paso
- Automatización de login en Facebook con Python y Selenium: Guía paso a paso
- Calculando Promedios en Python: Guía Práctica con Múltiples Métodos
- Convierta strings a Title Case en Python: rápido y fiable
- Envío de Email en Python con SMTP: Guía Rápida y Fácil






