Programación OTA Arduino MKR con Control por Voz y Extras
Componentes y suministros
| Componente | Cantidad | Notas |
|---|---|---|
| Arduino MKR1000 | 1 | Necesario para todos los proyectos OTA. Los componentes siguientes solo para el caso de uso: termostato de habitación. |
| Sensor DHT11 Temperatura y Humedad (4 pines) | 1 | |
| Relé (genérico) | 1 | |
| Protoboard (genérica) | 1 |
Aplicaciones y servicios en línea
- Arduino IDE
- Microsoft Azure IoT Hub
- Microsoft Visual Studio 2015 (UWP)
- Microsoft Project Oxford (API Reconocimiento de Voz)
Sobre el proyecto
Visión general
Nuestra contribución tiene 2 partes.
Parte 1: Una colección de componentes reutilizables. Sirven como marco para construir diversos proyectos IoT que aprovechan características útiles:
- Programación Over-the-Air (OTA) del Arduino MKR1000 (subida del binario compilado). Varios métodos: desde LAN o desde Internet, de forma segura, vía Microsoft Azure IoT Hub.
- Aplicación cliente Universal Windows Platform (UWP), con interfaz de usuario agradable. Se comunica de forma segura con la placa vía Azure IoT Hub.
- Reconocimiento de voz (en la app cliente), mediante la API de Speech Recognition de Microsoft Project Oxford. Los comandos de voz controlan la placa vía Azure IoT Hub.
Parte 2: Un caso de uso / ejemplo, construido con los componentes anteriores: un termostato de habitación, controlado vía teléfono (app UWP). Lo construimos para demostrar cómo combinar los componentes en un proyecto real. Incluso lo pusimos en producción: mientras escribimos esto, la calefacción de nuestra oficina está controlada por este proyecto.
Parte 1: Componentes reutilizables para OTA
Principio de funcionamiento OTA

Desarrollamos los siguientes componentes:
Para Arduino IDE:
- Una librería en tiempo de ejecución. Maneja la mecánica de subida y copia del firmware.
- Un paquete «boards» personalizado. Tiene algunos ajustes de enlazador necesarios para la librería.
- Un plugin para Arduino IDE. Envía señales de descarga y sketches binarios compilados (firmware). Se comunica con la placa, Azure IoT Hub, la app servidor despachadora IoT (ver abajo).
Para instalar en un servidor de terceros (p.ej. Microsoft Azure Web Site):
- IoT Dispatcher, una aplicación PHP + MySQL que almacena y sirve firmware.
Principio de funcionamiento app UWP

Desarrollamos:
- Una app cliente UWP, escrita en C#. Se comunica con la placa vía Azure IoT Hub y reconoce comandos de voz vía Microsoft Project Oxford. Puede usarse como punto de partida para varios proyectos.
DEMO OTA
Parte 2: Caso de uso / Ejemplo: Termostato de habitación
Como se mencionó, desarrollamos el termostato para demostrar cómo combinar nuestros componentes en un proyecto real. En nuestro caso, lo pusimos en producción: controla la calefacción de nuestra oficina.
La lógica es simple:
- Cuando la temperatura baja de la temperatura objetivo ⇒ el relé (calefacción) se enciende
- Cuando la temperatura supera la objetivo ⇒ el relé/calefacción se apaga
- La interfaz de usuario / app UWP: muestra el estado y establece la temperatura objetivo (vía cuadro de texto o voz)




1. Construir el proyecto (Hardware)

No proporcionamos diagrama Fritzing, ya que usamos un MKR1000 Beta. La disposición de pines puede cambiar en el futuro.
2. Configurar entorno de desarrollo para OTA y Azure IoT Hub
- Instalar Arduino IDE, al menos versión 1.6.7
- Instalar Arduino SAMD Boards. Desde Arduino IDE: Herramientas > Placa: ... > Gestor de placas ... > seleccionar «Arduino SAMD Boards»
- Descargar y descomprimir librerías en: SKETCHBOOK_DIR (p.ej. Documentos/Arduino)/libraries: WiFi101, AzureIoT, RTCZero.
Y ahora nuestros componentes:
- Descargar y descomprimir la librería run-time OTA en: SKETCHBOOK_DIR/libraries.
- Descargar nuestro paquete «boards» personalizado. Crear directorio: SKETCHBOOK_DIR/hardware/flower-platform. Descomprimir ahí.
- Descargar el plugin Arduino IDE. Crear directorio: SKETCHBOOK_DIR/tools. Descomprimir ahí.
Para OTA seguro vía Internet/HTTPS:
- Descargar IoT Dispatcher e instalarlo en un servidor PHP + MySQL. P.ej. tenemos instrucciones para desplegar en Microsoft Azure Cloud.
3. Probar OTA
Hay 3 métodos de subida OTA.
1) Probar OTA vía LAN: Archivo > Ejemplos > Arduino-FlowerOTA > WiFiOTA. Cambia las líneas comentadas con «// CHANGE ME» para configurar IP, parámetros WiFi, plain/ssl, firma del servidor. Luego Flower Platform > Subir OTA ...


Asegúrate de usar:
WiFiClient client;
y (cf. la «firma del servidor» de la ventana emergente).
ota.begin(&udp, &client, "1hvtdliHzKLjMykvfW1MfPwsFthUU/YfjN8fOZJ3Qhc=");
NOTA: para los 3 métodos, necesitas hacer una subida inicial vía USB. Después, puedes seguir usando OTA con el método que elijas.
2) Probar OTA vía despachador seguro, usando el mismo archivo:

Asegúrate de usar:
WiFiSSLClient client;
y
ota.begin(&udp, &client, "mi-clave-subida-iot-dispatcher"); // cf. configurado en IoT Dispatcher (PHP)
3) Probar OTA vía despachador seguro + Azure IoT Hub. Archivo > Ejemplos > Arduino-FlowerOTA > WiFiOTA-AzureIoTHub. De nuevo: ajusta las líneas comentadas con «// CHANGE ME».

4) Probar el caso de uso / ejemplo: el termostato. Está disponible aquí.
4. Probar la interfaz de usuario (App UWP con Azure IoT Hub y Reconocimiento de Voz)
El proyecto UWP está disponible aquí. Se necesita Visual Studio 2015 y Windows 10.
Asegúrate de cambiar los parámetros de conexión según tu cuenta Azure:
SendCloudToDevice.cs
class SendCloudToDevice {
// CHANGE ME: Reemplaza las constantes con valores reales (de tu Azure Portal)
private const string HOST = "???.azure-devices.net";
private const string DEVICE_ID = "???";
private const string DEVICE_KEY = "???";
static string sharedAccessKeyName = "???";
static string sharedAccessKey = "???";
}
ReadDeviceToCloud.cs
class ReadDeviceToCloud {
// Reemplaza las constantes con valores reales (de tu Azure Portal)
private static string ConnectionString = "???";
private static string eventHubEntity = "???";
}
Este código puede servir como punto de partida para apps cliente de varios proyectos. Solo necesitas ajustar la interfaz de usuario según tu proyecto.
Pasos futuros
Placas como Arduino MKR1000, con potencia de procesamiento razonable y capacidades de comunicación SSL, representan un gran avance para la comunidad maker.
Continuamos el trabajo iniciado con este proyecto para desarrollar Flower Platform IoT, un servicio online que aceleraría tremendamente los proyectos IoT:
- Desarrollo: uso de componentes OOP y lenguaje de programación gráfica (mezclable con código manual);
- Despliegue: uso de OTA.
Aprovechando Flower Platform, planeamos crear una fundación que se centre en enseñar a niños pequeños a hacer y programar proyectos IoT.
Código
- Librería run-time que maneja subida y copia de firmware (C++): GitHub
- Paquete «boards» personalizado con ajustes de enlazador (script enlazador): GitHub
- Plugin Arduino IDE. Comunica con placa, despachador e IoT Hub (Java): GitHub
- IoT Dispatcher. Almacena y sirve firmware necesario durante OTA (PHP + MySQL): GitHub
- Caso de uso termostato (C++): GitHub
- Cliente UWP para termostato (C#, HTML, JavaScript): GitHub
Esquemáticos
No proporcionamos diagrama Fritzing, ya que usamos un MKR1000 Beta. La disposición de pines puede cambiar en el futuro.

Proceso de manufactura
- Tres Estrategias Comprobadas para Recuperar el Control de tu Programa de Mantenimiento Preventivo
- Pastillas Anticonceptivas: Historia, Beneficios, Riesgos y Producción
- Sistema Automatizado de Llenado y Monitorización de Piscina
- Emerson impulsa sostenibilidad con plataforma Zedi Cloud SCADA en Azure
- Guía paso a paso para convertirse en Administrador Azure certificado por Microsoft
- ¿Es Microsoft Azure una carrera inteligente? Cuota de mercado, salarios e insights de certificación
- Microsoft Azure anuncia servicios de tokenización Blockchain y gestión de datos
- Chuleta Microsoft Azure 2020: guía definitiva de servicios y arquitectura Azure
- Integra Azure con Power BI: Guía paso a paso para empresas modernas
- Edge IA y hardware de bajo consumo impulsan el auge del control por voz
- Microsoft presenta Azure Edge Zones para impulsar cargas de trabajo IoT e IA con 5G