Un ejemplo de esto son nuestros teléfonos móviles, cuando usamos una de las aplicaciones de mapas para escoger la ruta más rápida que nos hará llegar a nuestro destino. Todos los demás usuarios que usan la aplicación están publicando en en servidor su localización y velocidad, de modo que la aplicación nos puede mostrar los atascos y puntos a evitar en tiempo real.
Cuando activamos en nuestro móvil el servicio para encontrar el móvil en caso de extravío, éste va publicando de forma periódica su ubicación en un servidor de internet, de modo que para encontrarlo solo tenemos que acceder al registro desde un ordenador y consultar la última localización grabada.
Hay muchos microcontroladores en el mercado adecuados para proyectos de IoT, los más comunes son Arduino y sus variantes específicamente optimizadas para IoT, Raspberry PI y sus variantes para IoT, pero en mi opinión la mejor opción por precio, tamaño y prestaciones es NodeMCU.
NodeMCU es una placa de desarrollo de proyectos IOT basada en el ESP8266, hay varias versiones, para distinguirlas se puede leer este artículo de Luis LLamas: enlace
En programarfacil también hay un buen artículo sobre la NodeMCU: enlace
Es muy importante tener en cuenta, que el cable con conector microUSB que vayamos a usar para programar nuestra NodeMCU tiene que ser un buen cable de datos (no el del cargar cualquier cosa), si no el ordenador no la reconocerá. Yo tuve que probar con ocho cables que tenía en casa, hasta que di uno que era capaz de comunicar la NodeMCU con el ordenador.
Como empezar con NodeMCU: enlace
Tutorial: enlace
En los proyectos de IoT es necesario disponer de un servidor en el que publicar y recuperar los datos. Muchos de estos servidores además permiten crear interfaces atractivas para mostrar los datos de una forma significativa usando gráficos, mapas, imágenes y también permiten definir elementos interactivos para envíar datos al microcontrolador por medio de botones, mandos giratorios, barras deslizantes... etc.
Yo he probado algunos y los que mas me han gustado son Blink, ThingSpeak y Arduino Cloud
Blink es un entorno completo para crear proyectos IoT muy rápidamente y sin necesidad de escribir código. Soporta NodeMCU entre otras placas microcontroladoras. La versión gratuita no permite usar mapas y datastreams para localización.
Un punto inicio, Video promocional de Blynk: enlace
Un proyecto sencillo completo y paso a paso: enlace
Arduino Cloud es muy parecido a Blink, permite crear un proyecto completamente integrado, con una interfaz de usuario rápida de hacer , atractiva y válida para ordenador y smartphones, en combinación con el editor web de Arduino genera el esqueleto del código para el microcontrolador. Sólo soporta placas microcotroladoras que puedan conectarse directamente a Internet como NodeMCU, no soporta Arduino UNO y dispone de un API para interactuar con los datos de forma remota usando python o Javascript
Arduino IOT Cloud, proyecto de programador de eventos con NodeMCU: enlace
ThingSpeak es un servidor que proporciona acceso de lectura/escritura/suscripción a los datos de un proyecto agrupados en lo que ellos llaman "canal" mediante protocolos muy simples (HTTP y MQTT). Dispone de librerías para Arduino y Phyton con APIs que facilitan el uso de estos protocolos para leer/escribir/recibir los datos.
En estos vídeos se muestra lo simple y potente que es el entorno de ThingSpeak
IoT from Data to Action, Part 1: Getting Started with ThingSpeak: enlace
IoT from Data to Action, Part 2: Writing and Reading Data in ThingSpeak: enlace