Archivo de la etiqueta: Curso IoT Open Source

Arduino en IoT

Arduino se ha convertido una figura destacada e incluso uno de los impulsores del IoT y no por casualidad, sino que  por sus características es un HW con gran capacidad para usar en proyectos de IoT.

Características de Arduino para IoT

  • Barato y rápido prototipado.
  • HW libre y por lo tanto es modificable para que consuma menos y para hacer un HW final de características industriales.
  • Disponibilidad de HW de comunicaciones de todo tipo para conectar con Arduino. Nuevas tecnologías de comunicación llegan antes que para elementos comerciales
  • Librerías y SW público para su reutilización o adaptación.
  • Flexibilidad en la programación.
  • Apoyo de la comunidad.

No en vano cuando se busca IoT (Internet de las cosas) enseguida aparece Arduino. Arduino sirve para recoger datos no solo del entorno sino de máquinas o elementos externos y comunicarnos con Internet, mediante su consumo eléctrico, contactos de alertas externas, su temperatura, su posición, etc…

Arduino nos permite de una forma sencilla y barata poder conectar entre sí elementos cotidianos para manejarlos y añadir sensores a cualquier elemento y en cualquier ubicación.

Qué es Arduino: https://aprendiendoarduino.wordpress.com/2018/04/02/que-es-arduino-7/ 

Hardware Arduino:

Hardware Arduino IoT

La familia de Arduino MKR son una serie de placas con un factor de forma diferente al de Arduino mucho más pequeño y basados todos en el microcontrolador de 32 bits de Atmel SAMD21. Estas placas están pensadas principalmente para IoT.

MKR Family: https://store.arduino.cc/arduino-genuino/arduino-genuino-mkr-family 

Arduino MKRZero

Producto: https://store.arduino.cc/arduino-mkrzero

Primero modelo de la familia MKR y heredero del Arduino Zero.

Arduino MKR1000 WIFI

Producto: https://store.arduino.cc/arduino-mkr1000 

Versión para IoT con procesador Atmel ARM Cortex M0+ de 32bits ATSAMW25 que es el mismo procesador que Genuino Zero pero con wifi integrado, chip de cifrado y antena integrada.

El ATSAMW25 está compuesto por tres principales bloques:

  • SAMD21 Cortex-M0+ 32bit low power ARM MCU
  • WINC1500 low power 2.4GHz IEEE® 802.11 b/g/n Wi-Fi (mismo que el wifi 101 shield)
  • ECC508 CryptoAuthentication

Arduino MKR WiFi 1010

Producto: https://store.arduino.cc/arduino-mkr-wifi-1010 

El MKR WIFI 1010 es una mejora significativa del MKR 1000 WIFI. Está equipado con un módulo ESP32 fabricado por U-BLOX. Esta placa tiene como objetivo acelerar y simplificar la creación de prototipos de aplicaciones de IO basadas en WiFi gracias a la flexibilidad del módulo ESP32 y su bajo consumo de energía.

La placa tienes estos 3 bloques principales:

  • SAMD21 Cortex-M0+ 32bit Low Power ARM MCU;
  • U-BLOX NINA-W10 Series Low Power 2.4GHz IEEE® 802.11 b/g/n Wi-Fi; and Bluetooth
  • ECC508 Crypto Authentication

Actualización firmware bluetooth para Arduino MKR WiFi 1010: http://forum.arduino.cc/index.php?topic=579306.0 

La librería para controlar el bluetooth es:

Arduino MKR FOX 1200

Producto: https://store.arduino.cc/arduino-mkrfox1200 

Arduino anunciado en abril de 2017. En una placa de desarrollo pensada para el IoT con conectividad Sigfox. Comparte muchas características con otras placas de la familia MKR como em microcontrolador SAM D21 32-bit Cortex-M0+.

Incluye un módulo ATA8520 con conectividad sigfox de amplia cobertura y bajo consumo capaz de funcionar durante 6 meses con dos pilas AA. También incluye una suscripción por dos años a la red Sigfox: http://www.sigfox.com/en 

Web: https://blog.arduino.cc/2017/04/18/introducing-the-arduino-mkrfox1200/ 

Más información sobre el Arduino MKRFOX1200 en el artículo: https://www.aprendiendoarduino.com/2018/03/05/arduino-mkrfox1200/ 

Arduino MKR WAN 1300

Producto: https://store.arduino.cc/mkr-wan-1300 

Presentado el 25 de septiembre de 2017 en la maker faire de NY: https://blog.arduino.cc/2017/09/25/introducing-the-arduino-mkr-wan-1300-and-mkr-gsm-1400/ 

Arduino + LoRa: 

Arduino MKR WAN1310

Nueva placa evolución de la MKRWAN 1300: https://store.arduino.cc/mkr-wan-1310

Esta placa mejora el consumo de la anterior y dispone de mayor memoria flash para poder hacer data logging y OTA

Esta tarjeta de código abierto se puede conectar a:

  • Arduino Create
  • Tu propia red LoRa usando el Arduino Pro Gateway para LoRa 
  • Infraestructura LoRaWAN existente como The Things Network 
  • O incluso otras tarjetas que utilizan el modo de conectividad directa

Presentación de la placa: https://blog.arduino.cc/2019/10/10/new-mkr-wan-1310-for-lora-connectivity-comes-with-2mbyte-flash-and-extended-battery-life/

Proyectos: https://create.arduino.cc/projecthub/products/arduino-mkr-wan-1310

Arduino MKR GSM 1400

Producto: https://store.arduino.cc/mkr-gsm-1400 

Presentado el 25 de septiembre de 2017 en la maker faire de NY: https://blog.arduino.cc/2017/09/25/introducing-the-arduino-mkr-wan-1300-and-mkr-gsm-1400/ 

Arduino + GSM:

Arduino MKR NB 1500

Producto: https://store.arduino.cc/arduino-mkr-nb-1500

El nuevo estándar Narrow Band IoT, con el ecosistema Arduino fácil de usar. Totalmente compatible con las clases Narrow Band IoT NB y las redes LTE CAT M1.

Arduino MKR Vidor 4000

Producto: https://store.arduino.cc/arduino-vidor-4000

El MKR VIDOR 4000 es altamente configurable y potente, y puede realizar procesamiento digital de audio y video de alta velocidad.

El MKR VIDOR 4000 puede configurarlo de la manera que desee; esencialmente puede crear su propia tarjeta controladora.

Viene cargado de hardware y potencial:

  • un SRAM de 8 MB
  • un chip Flash QSPI de 2 MB – 1 MB asignado para aplicaciones de usuario
  • un conector Micro HDMI
  • un conector para cámara MIPI
  • Wifi & BLE alimentado por U-BLOX NINA Serie W10.

También incluye la clásica interfaz MKR en la que todos los pines son accionados tanto por SAMD21 como por FPGA.

Además, tiene un conector Mini PCI Express con hasta 25 pines programables por el usuario. 

La FPGA contiene 16K Logic Elements, 504 KB de RAM embebida y 56 multiplicadores de 18×18 bit HW para DSP de alta velocidad. Cada pin puede conmutar a más de 150 MHz y puede ser configurado para funciones tales como UARTs, (Q)SPI, PWM de alta resolución/alta frecuencia, codificador de cuadratura, I2C, I2S, Sigma Delta DAC, etc.

La FPGA integrada también se puede utilizar para operaciones DSP de alta velocidad para el procesamiento de audio y vídeo. Esta tarjeta también incluye un Microchip SAMD21. La comunicación entre la FPGA y el SAMD21 es directa.

Accesorios para Arduinos MKR

Y los IoT Bundles:

Nuevos Arduino Nano

En la Maker Faire Bay Area del año 2019, supone un nuevo concepto de placas de pequeño tamaño, económicas y de bajo consumo.

Presentación de las placas: https://blog.arduino.cc/2019/05/17/whats-new-at-maker-faire-bay-area-2019/

Se trata de 4 modelos:

El nuevo microcontrolador ATmega4809 soliciona las limitaciones de las tarjetas antiguas basadas en ATmega328P, puede añadir un segundo puerto serie de hardware, más periféricos y memoria significa que puede abordar proyectos más ambiciosos. Utiliza un chip USB de calidad para que la gente no tenga problemas de conexión o de drivers. El procesador separado que maneja la interfaz USB también permite implementar diferentes clases de USB, como el Dispositivo de Interfaz Humana (HID), en lugar del clásico CDC/UART. 

La nueva arquitectura de fuente de alimentación basada en un convertidor DC-DC de alta eficiencia permite alimentar la tarjeta hasta 21V y accionar periféricos de salida hasta 950mA sin sobrecalentamiento.

Arduino Cloud

Arduino no solo se queda con el HW sino esta preparando un cloud para IoT que pueda usar cualquiera.

Web: https://www.arduino.cc/en/IoT/HomePage 

Arduino IoT Cloud permite conectar dispositivos a Internet y a otros dispositivos. Esta herramienta hace que la creación de objetos conectados sea rápida, sencilla y segura.

Aun es una versión beta y solo se puede usar con unos pocos modelos de Arduino, pero puede ser interesante en el futuro.

Actualmente, las tarjetas MKR1000, MKR WiFi 1010 y MKR GSM 1400 son compatibles. En el futuro, el MKR Vidor 4000 y Arduino Uno WiFi Rev2 también serán soportados.

Arduino IoT Cloud es una plataforma de aplicación de Internet of Things fácil de usar. Hace que sea muy sencillo para cualquiera desarrollar y gestionar aplicaciones de IoT, lo que les permite centrarse en la resolución de problemas reales en su negocio o en la vida cotidiana.

Web: https://create.arduino.cc/iot/things

Más información sobre Arduino IoT Cloud: https://www.arduino.cc/en/IoT/HomePage

Presentación del Arduino IoT Cloud:

Getting started con Arduino Cloud:

Proyectos con IoT cloud: https://create.arduino.cc/projecthub/products/arduino-cloud

Mejoras en Arduino IoT Cloud:

Librería Arduino IoT Cloud: https://github.com/arduino-libraries/ArduinoIoTCloud

FAQ: https://www.arduino.cc/en/Create/FAQ

Configuración Arduino

Puesta en marcha y comprobación del entorno de programación de Arduino para utilizar en el curso.

Instalación del IDE y blink para comprobar que funciona:

Programación Arduino

Librerías

Mandar Datos a un Servidor con Arduino

Vamos a conectar Arduino a un servidor para que mande datos y los muestre en una gráfica.

En este caso vamos a mandar cada 5000 ms el valor del potenciómetro, probar a mover el potenciómetro y ver cómo cambian los datos. 

También puede sustituirse el potenciómetro por un LDR que nos muestre los datos de luminosidad:

Los datos de mostrarán en esta web: https://www.aprendiendoarduino.com/servicios/datos/index.html

Las gráficas se pueden ver en esta dirección: https://www.aprendiendoarduino.com/servicios/datos/graficas.html

El código en el servidor para recoger datos y mostrar está en: https://github.com/jecrespo/aprendiendoarduino-servicios/tree/master/datos

Cargar este firmware en Arduino: https://github.com/jecrespo/Curso-IoT-Open-Source/blob/master/data_logger_temperatura_DHCP/data_logger_temperatura_DHCP.ino

En el código sustituir “X” por el número de Arduino usado y “YY” por el número de Arduino en formato con dos dígitos, es decir, 01, 03, 11, 16, etc…

Ver los datos en:

Dispositivos Hardware IoT

En este curso vamos a usar Arduino y otras placas compatibles como HW de sensorización y actuación en IoT y módulos de comunicación, pero existen otros microcontroladores, PLCs y otro hardware en general que haría la misma funcionalidad.

Podemos dividir el HW IoT en tres grandes conjuntos:

  • Placas controladoras con CPU/microcontrolador con cierta capacidad de cómputo.
  • Sensores y actuadores, conectados a los controladores para leer o actuar sobre el mundo físico
  • Módulos de comunicación, que permiten conectarse a distintos tipos de redes el HW IoT

Dispositivos Hardware para IoT, son los dispositivos que van a medir y los que van a interactuar con el exterior. El elemento HW programable capaz de interactuar con estos dispositivos es el microcontrolador o el microprocesador.

Hay tres clases de dispositivos controlades IoT: 

  • Los dispositivos más pequeños son los controladores embedded de 8/16/32 bits System-On-Chip (SOC). Un buen ejemplo de este Open Source hardware es Arduino. Por ejemplo: Arduino Uno platform, este tipo de HW no suelen llevar sistema operativo (SO). 
  • El siguiente nivel son los dispositivos con una arquitectura de 32/64 bits como los chips de Atheros y ARM. Normalmente estos dispositivos se basan en plataformas de Linux embedded, cómo OpenWRT u otros sistemas operativos embedded (Muchas veces incluyen pequeños routers domésticos y derivados de estos). En algunos casos, no corren ningún SO. Por ejemplo: Arduino Zero o Arduino Yun. 
  • Las plataformas IoT con más capacidad son los sistemas completos de 32 y 64 bits, también se les denomina Single-Board-Computer (SBC). Estos sistemas, como Raspberry Pi o BeagleBone, pueden correr varios SO como Linux o Android. En muchos casos, estos son Smartphone o algún tipo de dispositivo basado en tecnologías móviles. Estos dispositivos pueden comportarse como Gateways o puentes para dispositivos más pequeños. Por ejemplo: un wearable que se conecta vía Bluetooth a un Smartphone o a una Raspberry Pi, es típicamente un puente para conectarse a Internet.

Además a esta lista de dispositivos podemos añadir los Microcontroladores Industriales o PLCs, softPLCs o cualquier dispositivo que pueda conectar a internet y del que pueda obtener datos como un power meter como este http://circutor.com/en/products/metering o también una gran máquina enfriadora con interfaz de red como https://www.vertiv.com/en-asia/products-catalog/thermal-management/free-cooling-chillers/liebert-hpc-l-and-hpc-m-freecooling-chillers/.

Otro tipo de HW IoT son los Gateway. Un Gateway IoT es un dispositivo físico o un programa de software que sirve como punto de conexión entre la nube y los controladores, sensores y dispositivos inteligentes. Todos los datos que se mueven a la nube, o viceversa, pasan por el gateway, que puede ser un dispositivo de hardware dedicado o un programa de software. Un gateway IoT también puede denominarse pasarela inteligente o nivel de control.

A estos dispositivos o nos nodos sensores se les lama también motes (short for remote) https://en.wikipedia.org/wiki/Sensor_node 

Los cálculos que hacen estos dispositivos se denomina Edge Computing. Hasta ahora en la mayoría de los casos las grandes plataformas de Cloud Computing se encargaban de hacer ese “trabajo sucio” de analizar los datos recolectados por los sensores y dispositivos IoT.

La Edge Computing se refiere de forma específica a cómo los procesos computacionales se realizan en los “dispositivos edge”, los dispositivos IoT con capacidad de análisis y procesos como routers o gateways de red, por ejemplo.

La eficiencia de este paradigma no es óptima en muchos casos en los que los propios nodos de la red pueden analizar esos datos para evitar ese paso por la nube. Permite que los datos producidos por los dispositivos de la internet de las cosas se procesen más cerca de donde se crearon en lugar de enviarlos a través de largas recorridos para que lleguen a centros de datos y nubes de computación.

Si hay un campo en el que este tipo de filosofía tenga sentido, ese es el del coche autónomo. Estos “centros de datos sobre ruedas” no paran de recolectar información sobre sus sistemas y su entorno, y toda esa información debe ser procesada en tiempo real para que podamos disfrutar de una conducción autónoma óptima y segura. El coche autónomo no puede estar esperando a comunicarse con la nube y a esperar la respuesta: todo ese proceso y análisis de datos hay que hacerlo en tiempo real, y es ahí donde la Edge Computing entra en juego, confirmando el importante papel que el ordenador central del coche tiene para aglutinar, analizar y dar respuesta a las necesidades de la conducción autónoma en cada momento. Intel estima que un coche autónomo podría acabar generando 4 TB de datos al día que incluye: cámaras, lidar, GPS, radar, etc…

Más información:

Programación de los dispositivos IoT

Estadística de los lenguajes de programación usados en los dispositivos HW IoT:

Firmware es un programa informático que establece la lógica de más bajo nivel que controla los circuitos electrónicos de un dispositivo de cualquier tipo. Está fuertemente integrado con la electrónica del dispositivo, es el software que tiene directa interacción con el hardware, siendo así el encargado de controlarlo para ejecutar correctamente las instrucciones externas. Ver https://es.wikipedia.org/wiki/Firmware

Un sistema operativo IoT es un sistema operativo diseñado para funcionar dentro de las restricciones propias de los dispositivos de Internet of Things, incluidas las restricciones de memoria, tamaño, potencia y capacidad de procesamiento. Los sistemas operativos de IoT son un tipo de sistema operativo integrado, pero por definición están diseñados para permitir la transferencia de datos a través de Internet.

ARM Mbed es una plataforma y un sistema operativo para dispositivos conectados a Internet basado en microcontroladores ARM Cortex-M de 32 bits. Estos dispositivos también se conocen como dispositivos de Internet of Things. El proyecto es desarrollado en colaboración por Arm y sus socios tecnológicos.

RTOS sistemas operativos en Tiempo real para sistemas embebidos, generalmente basados en linux.

Buen resumen de lo necesario para saber sobre sistemas embebidos para IoT a nivel de HW http://so-unlam.com.ar/wiki/index.php/PUBLICO:Sistemas_embebidos_e_Internet_de_las_Cosas 

Guia para elegir el mejor HW IoT: https://www.ibm.com/developerworks/library/iot-lp101-best-hardware-devices-iot-project/index.html 

Hardware IoT

El HW libre por excelencia es Arduino como microcontrolador y Raspberry Pi como microprocesador, con menor potencia física pero mayor potencia de cálculo.

Dentro del HW libre no solo debemos quedarnos con Arduino, sino que existen otros dispositivos, incluso algunos son compatibles y se programan igual que Arduino:

Más HW IoT:

¿Conoces alguna más?

En el caso de HW libre, el siguiente paso es una personalización del HW mediante el diseño de HW como Eagle o Kicad.

HW IoT Industrial

En el mundo industrial se está incorporando el IoT con la denominación IIoT (Industrial Internet of Things) ya sea con dispositivos basados en HW libre o los fabricantes de Autómatas están incorporando comunicaciones más abiertas a sus dispositivos.

PLC basado en Arduino: https://www.industrialshields.com/

Artículo de Industrial Shields sobre Arduino como aplicación de PLC: http://blog.industrialshields.com/es/iot-in-industry-improves-reliability-equipment/

PLCs basados en Arduino: https://industruino.com/ 

PLC basado en Arduino: http://www.winkhel.com/

Carcasa para Arduino y Raspberry Pi en la industria: Arduibox: http://www.hwhardsoft.de/english/webshop/raspibox/#cc-m-product-10145780397 

SIMATIC IOT2020: gateway de Siemens basado en Arduino para futuras aplicaciones industriales: http://es.rs-online.com/web/p/kit-de-desarrollo-de-iot/1244037/ y aplicaciones https://www.rs-online.com/designspark/simatic-iot2020.

Simatic IoT 2040: https://w3.siemens.com/mcms/pc-based-automation/en/industrial-iot/Documents/simatic-ioc2040-flyer-en.pdf

Los otros PLCs SBC (Single Board Computer): http://www.infoplc.net/blogs-automatizacion/item/102505-plc-single-board-computer 

OpenPLC Project: http://www.openplcproject.com/

Autómatas con MQTT: http://www.unitronics.com/ y modelo nistream https://unitronicsplc.com/unistream-series-unistream5/ 

ABB PM556, automata de ABB abierto: http://new.abb.com/drives/es/noticias-y-casos-de-exito/impulsa-el-internet-de-las-cosas-los-servicios-y-las-personas

PLC basado en Raspberry Pi: https://revolution.kunbus.com/

Otro PLC basado en Raspberry Pi: https://www.unipi.technology/ 

Sensores y Actuadores

Este es el primer elemento, es que está más cerca de las “cosas” es el HW que se encarga de medir e interactuar con las “cosas” y procesar esos datos. Este dispositivo puede tener conectado otros hardware como:

Módulos de Comunicación

Los dispositivos IoT deben tener una comunicación mediante algún tipo de protocolo y este módulo puede estar integrado o ser una expansión.

Algunos de los módulos usados en IoT

  • Ethernet
  • Modbus
  • ZigBee
  • XBee
  • WiFi
  • Bluetooth
  • Thread
  • Red de telefonía móvil (2/3/4/5G)
  • 6LoWPAN
  • LoRaWAN
  • Z-Wave
  • NFC
  • nRF24
  • Wize
  • Sigfox

Otros Módulos

Otros módulos muy importantes que van asociados al HW IoT son:

  • Power management (lowpower)
  • Componentes de identificación y seguridad (ATSHA204A, ATECCX08A, 24AA02E64T,…)

IoT en 90 Minutos

Vamos a crear un sistema IoT sencillo utilizando una placa basada en ESP8266, la plataforma Thingspeak para registrar los datos y la APP Blynk para controlar y monitorizar desde el móvil.

El objetivo es:

  • Monitorizar la temperatura y humedad de una sala remotamente desde el móvil
  • Encender desde el móvil la iluminación de la sala
  • Registrar todos los datos históricos de temperatura y humedad
  • Registrar las veces que se abre una puerta
  • Mandar avisos por alta temperatura. 
  • Mandar avisos cuando el sensor de puerta se abra.

Los avisos o notificaciones pueden ser:

Material Necesario

Hardware:

  • Wemos D1 mini
  • Sensor DHT11
  • Led + resistencia 220 ohms (para simular la iluminación) o Relé para la iluminación
  • Pulsador + Resistencia 10 kohms  (para simular la apertura de la puerta) o sensor magnético/infrarrojos.

Coste aproximado: 5 – 20 € dependiendo del material usado.

Software:

Coste del software y licencias: 0 €

Conexión Hardware

Esquema de conexión:

Pines utilizados:

  • D4: Led y también es el led integrado de la placa
  • D3: pulsador/puerta, tiene una resistencia de pull up integrada: OJO, este pin va al GPIO0 que control el arranque, asegurarse de no estar a masa/pulsado al reiniciar o cargar un nuevo programa
  • D2: sonda DHT11

El pulsador simula la apertura de la puerta y el led simula la iluminación de la sala.

Blynk

Blynk es una plataforma que permite que cualquiera pueda controlar fácilmente su proyecto Arduino con un dispositivo con sistema iOS o Android. Los usuarios tendrán ahora la posibilidad de crear una interfaz gráfica de usuario de “arrastrar y soltar” para su proyecto en cuestión de minutos y sin ningún gasto extra.

Blynk vendría a ser como tener una protoboard en tu dispositivo móvil, tablet o teléfono, que cuenta con todo lo que necesites usar, desde deslizadores y pantallas a gráficos y otros widgets funcionales que se pueden organizar en la pantalla un Arduino. Además te da la opción de poder recopilar datos de los sensores que montes en un proyecto. Funciona nada más sacarlo de la caja y conectarlo a la placa por Internet.

Arquitectura de Blynk:

Thingspeak

ThingSpeak es un plataforma de Internet of Things (IoT) que permite recoger y almacenar datos de sensores en la nube y desarrollar aplicaciones IoT. Thinkspeak también ofrece aplicaciones que permiten analizar y visualizar tus datos en MATLAB y actuar sobre los datos. Los datos de los sensores pueden ser enviados desde Arduino, Raspberry Pi, BeagleBone Black y otro HW.

Web: https://thingspeak.com/

Precios: https://thingspeak.com/prices

Pasos a seguir

Crear una cuenta en Thingspeak y configurar

Web: https://thingspeak.com/users/sign_up

Tutoriales:

Crear cuenta:

Crear un Nuevo Canal llamado: “Curso IoT”

Crear 3 Fields:

  • Temperatura – Guarda los datos de temperatura
  • Humedad – Guarda los datos de humedad
  • Puerta – Guarda las aperturas de puerta

Guarda la API Key y el número de canal

Instalar Blynk 

Getting Started: https://blynk.io/en/getting-started

Docs: https://docs.blynk.cc/

Instalar Blynk en el móvil: https://blynk.io/

Crear una cuenta en Blynk

Crear un nuevo proyecto llamado “IoT en 90 minutos”

Elegir Hardware, en este caso “Wemos D1 Mini”

Guardar el Auth Token. Auth Token es un identificador único que se necesita para conectar su hardware a su smartphone. Cada nuevo proyecto que cree tendrá su propio Auth Token. Obtendrá Auth Token automáticamente en su correo electrónico después de la creación del proyecto. También se puede copiar manualmente.

Añadir 3 widgets:

  • Un botón (Conectado al Pin D4)
  • Dos Gauge en los pines Virtuales V0 y V1 para temperatura y humedad

Virtual Pin: http://help.blynk.cc/en/articles/512061-what-is-virtual-pins

Configuración del Gauge:

  • Temperatura pin virtual V0
  • Humedad pin virtual V1
  • Modo push
  • Label: C para temperatura y % para Humedad

Configuración del Botón. poner en modo switch:

Aspecto final de la APP:

Ejecutar el programa

 

Preparar IDE Arduino

Instalar el IDE de Arduino:

Instalar el soporte para las placas basadas en ESP8266 en el IDE de Arduino

Instalar librerías necesarias en IDE Arduino desde el gestor de librerías:

 Realizar montaje de Wemos D1 mini

Personalizar el Firmware y Ejecutarlo

Configurar la Vista Pública en Thingspeak

Crear una vista pública, para ello en el canal ir a “sharing” y seleccionar “Share channel view with everyone”

Configurar la vista pública de Thingspeak, es una especie de dashboard donde pondremos:

  • Gráfica de Temperatura (Tipo Spline)
  • Display numérico Temperatura
  • Gráfica de Humedad  (Tipo Spline)
  • Display numérico Humedad
  • Gráfica apertura de puerta (Tipo Step)
  • Lamp Indicator, para ver el estado de la puerta abierto/cerrado
  • Un histograma para ver la variación de la temperatura

La vista debe quedar como esta: https://thingspeak.com/channels/635134

Configurar las Notificaciones en Thingspeak

Configurar avisos en Thingspeak cuando la temperatura sea mayor de 24 grados y cuando se abra la puerta. Para ello usaremos estas utilidades de thingspeak.

Notificaciones posibles:

  • Mandar un mensaje al panel: https://www.aprendiendoarduino.com/servicios/mensajes/index.html, servicio de #aprendiendoarduino para hacer una demo.
  • Enviar un mensaje a Telegram mediante un bot al canal https://t.me/aprendiendoarduino. Para ello es necesario crear un bot, añadirlo al canal y usar su API KEY desde thingspeak con ThingHTTP
  • Enviar un mensaje al canal #arduino_iot de https://aprendiendoarduino.slack.com/
  • Mandar un tweet usando ThingTweet, para ello debemos enlazar nuestra cuenta de Twitter.
  • Mandar un email con mailgun https://www.mailgun.com/, para ello debemos darnos de alta en mailgun y usar la API Key para que dispare el webhook configurado en ThingHTTP y mande un email
  • Para cualquier otra interacción se puede usar IFTTT. Se crea un webhook que se usa desde ThingHTTP y desde IFTTT disparamos el servicio que queramos.
  • Y cualquier otra que disponga de un webhook o API

Primero debe configurarse ThingHTTP para que llame a una API o webhook que dispare la notificación que deseamos. Para ello deberemos darnos de alta en el servicio que deseemos.

Para mandar un mensaje al panel: https://www.aprendiendoarduino.com/servicios/mensajes/index.html debo llamar a esta API:

Crear un nuevo ThingHTTP llamado “Manda Mensaje Alta Temperatura” y poner:

Crear un nuevo ThingHTTP llamado “Manda Mensaje Puerta Abierta” y poner:

NOTA: si no funciona la llamada al servicio de mensajes, mandar un correo a aprendiendoarduino@gmail.com

Una vez creados los elementos ThingHTTP que dispara la notificación queda crear los react, que son las condiciones en la que se disparan las notificaciones, donde diremos en qué condiciones se mandan las notificaciones. En nuestro caso:

  • Temperatura > 24 grados solo la primera vez que pase (Run action only the first time the condition is met: Trigger the action if the condition was previously false and is currently true.)
  • El valor del canal es 1 (Puerta abierta) cada vez que pase.

Crear un nuevo react llamado “Alta Temperatura IoT 90 minutos” con los siguientes parámetros:

Crear un nuevo react llamado “Puerta Abierta IoT 90 minutos” con los siguientes parámetros:

Probar que se muestran los mensajes en el panel https://www.aprendiendoarduino.com/servicios/mensajes/index.html

Si quisiéramos mandar un tweet, simplemente seleccionar en Action “ThingTweet” y poner el texto del tweet.

Identificación Horizontales Demo

Las horizontales o Building Blocks usados en IoT:

Para la demo:

  • Devices: Wemos D1 mini + sensor temperatura + pulsador + led + relé
  • Infraestructura de comunicación: Wifi
  • Gateway: Punto de Acceso Wifi
  • Protocolo: API HTTP y MQTT (transparente al usar las librerías de Blynk y Thingspeak)
  • Plataforma: Thingspeak y Blynk
  • Servicios: Almacenamiento de datos, gráficas, disparo de eventos y análisis de datos por Thingspeak, monitorización móvil por Blynk, notificaciones por IFTTT o plataforma propia.

Limitaciones de la solución utilizada:

  • Máximo número de envíos a plataforma: 15 segundos
  • Datos almacenados solo hasta un año o 3 millones de registros
  • Límite en el cálculo de datos
  • Gráficas simples
  • Depender de terceros para las notificaciones

Instalación Raspbian

Software quickstart: https://www.raspberrypi.org/learning/software-guide/quickstart/ 

Guías de iniciación:

Formatear la tarjeta SD de la forma correcta.

Uno de los errores más frecuentes de los usuarios de tarjetas de memoria SD está en creer que este tipo de memorias funcionan igual que una memoria USB o un disco duro y se pueden formatear con las utilidades del sistema operativo. A diferencia de otros dispositivos de almacenamiento, las tarjetas SD incluyen una zona especial denominada “Protected Area”, empleada para temas de seguridad, que requiere un tratamiento especial. Adicionalmente – y dependiendo de la configuración y el tipo de tarjeta – es necesario un formateo ajustado al tipo de tarjeta.

Descargar e instalar la utilidad “SD Card Formatter” provista por la SD Association, los mismos que definen los estándares de este medio de almacenamiento. Después de instalada, se debe proceder a formatear la tarjeta SD antes de utilizarla. De esta forma se garantiza que se usará todo el espacio disponible de la tarjeta y se optimizará su desempeño y almacenamiento de acuerdo con las especificaciones del fabricante.

Descarga https://www.sdcard.org/downloads/formatter_4/eula_windows/index.html 

Instalar Imagen Raspbian

Descargar imagen Raspbian zip: https://www.raspberrypi.org/downloads/

Descargar Raspbian Buster with desktop desde: https://downloads.raspberrypi.org/raspbian_latest 

La versión por defecto de Raspbian es ahora una instalación mínima – le da el escritorio, el navegador Chromium, el reproductor multimedia VLC, Python, y algunos programas accesorios. Junto a esto se encuentra la imagen “Raspbian Full”, que también incluye todos los programas recomendados: LibreOffice, Scratch, SonicPi, Thonny, Mathematica y varios otros.

El programa de software recomendado se puede utilizar para instalar o desinstalar cualquiera de los programas adicionales que se encuentran en la imagen completa; si descarga la imagen mínima y comprueba todas las opciones en el software recomendado, terminará con la imagen completa, y viceversa.

Buster la nueva versión de Raspbian: https://www.raspberrypi.org/blog/buster-the-new-version-of-raspbian/

Guía de instalación https://www.raspberrypi.org/documentation/installation/installing-images/README.md 

Para copiar la imagen a una SD usar:

Tutoriales de instalación de Raspbian:

balenaEtcher es normalmente la opción más fácil para la mayoría de los usuarios de escribir imágenes en tarjetas SD, por lo que es un buen punto de partida. Si busca una alternativa en Windows, puede usar Win32DiskImager.

Pasos:

  • Descargar SO: Raspbian
  • Formatear microSD: SD Card Formatter 4.0
  • Flashear: Etcher
  • Acceder a la SD desde un PC: Partición “/boot” es accesible desde Windows, partición extendida.
  • Preconfiguración (recomendado para modo headless): SSH

Etcher

Etcher es una herramienta gráfica de escritura de tarjetas SD que funciona en Mac OS, Linux y Windows, y es la opción más fácil para la mayoría de los usuarios. Etcher también soporta la escritura de imágenes directamente desde el archivo zip, sin necesidad de descomprimirlas.

Descargar Etcher: https://www.balena.io/etcher/ y yscribir tu imagen con Etcher.

Win32DiskImager

Con Win32DiskImager no solo se puede copiar una imagen sino guardar una imagen de una tarjeta SD, pero el uso de Etcher es más sencillo.

Descarga https://sourceforge.net/projects/win32diskimager/

Post Instalación

Una vez instalado raspbian, conectar un monitor, teclado y ratón a Raspberry Pi para seguir con su configuración.

En caso de no tener un monitor, se puede hacer una instalación headless:

Una vez entramos en Raspberry Pi, seguimos los pasos que nos indica para cambiar contraseña, cambiar el nombre (hostname), configurar y actualizar Raspberry Pi.

Luego es posible hacer más configuraciones desde “Configuración de  Raspberry Pi” o desde comando “sudo raspi-config”:

Conexión a la Red

La forma general de conectar a Internet la Raspberry Pi es mediante 

  • Conexión a Ethernet por DHCP
  • Conectar a Wifi por DHCP

Por este motivo no es necesario configurar nada si conectamos a un router con DHCP configurado para ethernet y en WiFi solo deberemos configurar la red wifi.

DHCP:

La propia Raspberry Pi podría hacer de servidor DHCP: https://www.raspberrypi.org/learning/networking-lessons/lesson-3/plan/ 

La Raspberry Pi 3 es la primera de la familia en incluir WIFI estándar de serie, lo que es un gran avance de salida y garantiza que se normalice las conexiones, a diferencia de las versiones previas en las que había que comprar un módulo WiFi y configurar la WIFI en función del modelo de adaptador que usásemos.

En el caso actual, la configuración de la WIFI se reduce a listar las redes disponibles y elegir la nuestra, para después proporcionar la contraseña de acceso. 

Aquí tienes iconos para la configuración de varios elementos, como el volumen de audio la WIFI y hasta el Bluetooth, que recuerda viene de serie en la nueva Raspi3. Para configurar la WIFI pincha y selecciona el icono y selecciona la WiFi a conectarse.

Una vez configurado comprobar que se puede navegar.

Aunque hayas conectado correctamente a Internet hay mil razones por las que necesitas conocer más información de tus conexiones IP, especialmente saber la IP para que al actuar como servidor saber a qué IP conectarnos.

Con el comando “ifconfig” podemos saber qué interfaces están conectados y que DNS usan o que Gateway o router estas usando como salida.

Para obtener los datos de ethernet teclea ifconfig eth0 y para wifi teclea ifconfig wlan0

Con el comando route -ne se pueden ver las rutas configuradas

Más información: https://www.prometec.net/conectar-a-internet/ 

Para obtener más información de las redes ver los directorios:

  • /sys/class/net/eth0
  • /sys/class/net/wlan0

Por ejemplo en el fichero address está la dirección MAC del controlador de red

En algunas ocasiones nos puede interesar asignar una IP fija, para ello seguir el tutorial: https://www.luisllamas.es/raspberry-pi-ip-estatica/ 

Los fichero de configuración de IP son:

  •  /etc/dhcpcd.conf
  • /etc/network/interfaces

Más información: https://raspberrypi.stackexchange.com/questions/39785/dhcpcd-vs-etc-network-interfaces 

También es conveniente cambiar el hostname, seguir este tutorial: https://www.howtogeek.com/167195/how-to-change-your-raspberry-pi-or-other-linux-devices-hostname/

Acceso Remoto

Una vez instalado vamos a asegurarnos el acceso remoto para no tener que tener conectado a un monitor y un teclado y ratón y podamos manejarlo.

Acceso Remoto: https://www.raspberrypi.org/documentation/remote-access/

SSH

La mejor forma de acceder a Raspberry Pi remotamente en modo comando en línea estando en la misma red es usando SSH. 

SSH sigue un modelo cliente-servidor. El cliente inicia una petición al servidor, que autentifica la comunicación e inicia el entorno Shell. Múltiples clientes pueden conectarse a un mismo servidor. Por defecto SSH emplea el puerto TCP 22 aunque puede cambiarse fácilmente. 

SSH dispone de más usos muy interesantes. por ejemplo, podemos copiar archivos de forma segura entre dos dispositivos, o tunelizar cualquier conexión de otra aplicación a través de un canal seguro SSH.

Para activar el servidor SSH en Raspberry Pi comprobar que estás activado en menu – Preferencias- Configuración de Raspberry Pi – Interfaces

Esta conexión sólo funciona en red local. Para poder acceder desde fuera, a través de Internet, hay que configurar un mapeo de puertos en el router. El proceso completo depende del router.

Para conectarnos desde Windows a SSH, deberemos emplear un cliente SSH para conectarnos con Raspberry Pi. El cliente más utilizado en Windows es Putty, que es Open Source y está disponible en https://www.putty.org/

Descargamos y ejecutamos Putty y nos aparece una ventana donde podemos introducir la dirección IP (o el nombre) de la Raspberry Pi. Al conectarnos se nos preguntará el nombre del usuario y la contraseña.

Más información:

VNC

La mejor forma de acceder a Raspberry Pi remotamente en modo escritorio estando en la misma red es usando VNC.

VNC es un programa de software libre basado en una estructura cliente-servidor que permite observar las acciones del ordenador servidor remotamente a través de un ordenador cliente. VNC no impone restricciones en el sistema operativo del ordenador servidor con respecto al del cliente: es posible compartir la pantalla de una máquina con cualquier sistema operativo que admita VNC conectándose desde otro ordenador o dispositivo que disponga de un cliente VNC portado.

Seguir este tutorial: https://www.raspberrypi.org/documentation/remote-access/vnc/README.md

La conexión de VNC de RealVNC se incluye con Raspbian. Consiste en el servidor de VNC, que permite controlar Raspberry Pi remotamente, y el VNC viewer, que permite que controlar ordenadores remotamente de su Raspberry Pi.

El servidor VNC debe habilitarse para poder conectarse remotamente, para ello ir a menu – Preferencias- Configuración de Raspberry Pi – Interfaces y asegurarse que VNC está activado.

Una vez activado establecer la conexión desde el ordenador instalando el VNC viewer: https://www.realvnc.com/en/connect/download/viewer/ y conectarse a la IP de nuestra Raspberry:

Con VNC también se puede establecer una conexión en la nube.

Más información:

Team Viewer

En el caso que queramos conectarnos a nuestra Raspberry Pi estando en cualquier parte del mundo, una buena opción es TeamViewer.

TeamViewer es un software informático privado de fácil acceso, que permite conectarse remotamente a otro equipo. Entre sus funciones están: compartir y controlar escritorios, reuniones en línea, videoconferencias y transferencia de archivos entre ordenadores.Team Viewer es gratuito para uso personal.

Web: https://www.teamviewer.com/es/ 

La instalación es muy simple solo hay que descargarse TeamViewer Host para raspberry Pi desde https://www.teamviewer.com/es/descarga/linux/ y acerse una cuenta en la web de TeamViewer https://www.teamviewer.com/es/ 

Enlace de descarga: https://download.teamviewer.com/download/linux/teamviewer-host_armhf.deb 

Instalar el fichero teamviewer-host_xxx_armhf.deb, simplemente haciendo doble click o con el comando “sudo dpkg -i filename.deb”

Si hay dependencias solucionarlo con  “sudo apt-get update” y “sudo apt-get -f upgrade”

Una vez instalado ejecutar TeamViewer en Raspberry Pi y poner las credenciales de la cuenta de TeamViewer

Finalmente acceder a https://login.teamviewer.com/LogOn con la cuenta de TeamViewer y ya podemos acceder a nuestra Raspberry Pi. Necesitaremos instalar el cliente de TeamViewer o la app de Chrome:

Solo para controlar la Raspberry Pi remotamente ejecutar el cliente “TeamViewer_Setup.exe” de esta forma:

Más información:

Raspberry Pi en IoT

Qué es Raspberry Pi

Una Raspberry Pi es una placa de desarrollo basada en linux, pero a efectos de todos se trata de un ordenador con linux completo.

Raspberry nació con un propósito: incentivar la enseñanza de informática en el entorno docente. Es un ordenador muy pequeño, del tamaño de una tarjeta, muy económico y también muy conocido para crear prototipos. Con esta plataforma de desarrollo se gestiona una gran cantidad de datos y es especialmente atractiva para la creación de aplicaciones móviles (Apps) donde el peso de la interfaz gráfica es muy importante. Está muy indicada, además, para proyectos multimedia basados en Linux.

En 2009 se creó la Fundación Raspberry Pi en Reino Unido y dos años más tarde comenzaron a fabricarse las primeras placas prototipo. El éxito fue tan grande que los fundadores trasladaron su producción a Gales, de donde salen miles de dispositivos al día. Existen varios modelos de placas y su popularidad ha generado que salgan al mercado diversidad de accesorios que suman funcionalidades a la placa base, al igual que Arduino.

La placa Raspberry se utiliza, como Arduino, en entornos de robótica o domótica, pero también como servidor de archivos. Es otra opción dentro del IoT y es muy interesante cuando el objetivo es procesar y tratar muchos datos. Cualquiera de ellos, Arduino o Raspberry, ofrece fórmulas eficaces para multitud de proyectos, pero todavía es difícil establecer su límite al estar en constante evolución.

Pero además, la Raspberry Pi 3 viene cargada con tecnología adicional para que podamos conectar nuestros proyectos al mundo de Internet de las Cosas.

  • 11n Wireless LAN
  • Bluetooth 4.0
  • Bluetooth Low Energy (BLE)

Estas nuevas características son precisamente las que nos van a permitir cubrir nuestras necesidades de conexión de forma inalámbrica a nivel de red local LAN y acceso a Internet, gracias al WiFi, y a nivel de comunicación con sensores y actuadores, gracias al Bluetooth. La Raspberry Pi 3 nos pone en bandeja todo lo necesario para comenzar a construir proyectos para Internet de las Cosas y aprender multitud de cosas, como programación, comunicaciones, electrónica, etc.

La Raspberry Pi 4 Model B es una actualización mayor de lo que podemos ver a primera vista, el cambio de procesador a un ARM Cortex-172 con cuatro núcleos a 1,5 GHz también implicaba pasar de los 40 nm a los 28 nm. En consecuencia, todos los componentes y la potencia del dispositivo ha cambiado.

Raspberry Pi 4 viene con Bluetooth 5.0 y Wi-Fi 802.11ac para las conexiones inalámbricas. También se ha cambiado el conector microUSB de alimentación por un USB-C que suma 500 mA extra de energía para alcanzar un total de 1.2 A. Algunos detalles extra a tener en cuenta son por ejemplo el soporte para doble monitor con resolución 4K.

Se han puesto a la venta un total de tres modelos diferentes, que varían según la capacidad de la memoria RAM que trae. Son los siguientes modelos:

  • Raspberry Pi 4 con 1 GB de RAM: 35 dólares.
  • Raspberry Pi 4 con 2 GB de RAM: 45 dólares.
  • Raspberry Pi 4 con 4 GB de RAM: 55 dólares.

Web: https://www.raspberrypi.org/products/raspberry-pi-4-model-b/

Más información: 

Buena introducción a Raspberry Pi:

Más información:

Marca powered by raspberry pi: https://www.hwlibre.com/powered-by-raspberry-pi-el-nuevo-sello-de-calidad-de-raspberry-pi/ 

Webs importantes de Raspberry Pi:

Arduino vs Raspberry Pi

Ver: https://aprendiendoarduino.wordpress.com/2017/06/19/arduino-vs-raspberry-pi-3/ 

Modelos Raspberry Pi

Raspberry Pi tiene diverso hardware. Productos Raspberry Pi: https://www.raspberrypi.org/products/ 

Hardware: https://www.raspberrypi.org/documentation/hardware/

Hardware Guide: https://www.raspberrypi.org/learning/hardware-guide/

Más información:

Modelos: 

  • Raspberry Pi (1) Model A
  • Raspberry Pi (1) Model A+
  • Raspberry Pi (1) Model B
  • Raspberry Pi (1) Model B+
  • Raspberry Pi 2 Model B
  • Raspberry Pi 3 Model B
  • Raspberry Pi 3 Model B+
  • Raspberry Pi 3 Model A+
  • Raspberry Pi 4 Model B
  • Raspberry Pi Zero (Hay dos versiones 1.2 y 1.3)
  • Raspberry Pi Zero W
  • Raspberry Pi Compute Module
  • Raspberry Pi Compute Module 3
  • Raspberry Pi Compute Module 3+
  • Raspberry Pi Compute Module Lite

Nueva Raspberry Pi 3 model A+: 

Nueva Raspberry Pi 4 model B: https://www.raspberrypi.org/products/raspberry-pi-4-model-b/

Tablas comparativas:

GPIO

Del mismo modo que Arduino disponía de una serie de pines que podíamos conectar al mundo exterior para leer o escribir, Raspberry dispone de otra serie de pines homólogos que en la jerga habitual de la RPI se llaman GPIO (General Purpose Input Output).

GPIO: https://www.raspberrypi.org/documentation/hardware/raspberrypi/gpio/README.md

La cantidad de pines disponibles en el GPIO ha variado de unas versiones a otras, manteniendo la compatibilidad con las versiones anteriores para evitar problemas, y a grandes rasgos ha habido dos versiones de GPIO. La gran variación fue de la Raspi 1 a la Raspi 2 que aumentó el número de pines disponibles y que básicamente se pueden ver aquí:

A esta forma de numerar se le suele conocer como modo GPIO, Pero surgió otra forma de numerar no de acuerdo a la posición de los pines en la salida, sino a la posición de los pines correspondientes en el chip Broadcom que es la CPU de la Raspberry, y a esta segunda manera se la llama modo BCM.

Nos encontramos con dos formas distintas de referirse a los pines, GPIO según los números del conector externo o BCM según los pines del chip que revuelven las posiciones. No tiene por qué ser mejor una que otra pero es importante asegurarse de cuál de las dos se está usando.

Disposición de los pines en la placa:

Pinout: https://pinout.xyz/ 

Más información:

IMPORTANTE:Todos los IO ports son de 3.3V, así que se debe tener cuidado.

Especificaciones eléctricas del GPIO: http://www.mosaic-industries.com/embedded-systems/microcontroller-projects/raspberry-pi/gpio-pin-electrical-specifications

Iconos de alerta de firmware: https://www.raspberrypi.org/documentation/configuration/warning-icons.md 

Para manejar los pines de GPIO la mejor manera de usarlos es en Python mediante el uso de librerías. Veremos más adelante como usarlo en el apartado de programación y manejo.