Primeros pasos con la nube de Arduino


Los dispositivos conectados en todo el mundo aumentan en miles de millones cada año. Arduino IoT Cloud es una plataforma que permite a cualquier persona crear proyectos IoT, con una interfaz fácil de usar y una solución todo en uno para configuración, escritura de código, carga y visualización.

En este post, veremos algunos componentes diferentes de Arduino IoT Cloud y brindaremos una descripción general porque además hay basta información en Arduino IoT Cloud, ya que tiene varias páginas de documentación disponibles. A continuación encontrará una lista de algunas páginas populares:

A continuación se muestra una lista de las funciones de Arduino IoT Cloud.

  • Monitoreo de datos : aprenda cómo monitorear fácilmente los valores del sensor de su Arduino a través de un tablero.
  • Sincronización de variables: la sincronización de variables le permite sincronizar variables entre dispositivos, lo que permite la comunicación entre dispositivos con una codificación mínima.
  • Programador : programe trabajos para que se activen o desactiven durante un período de tiempo específico (segundos, minutos, horas).
  • Cargas por aire (OTA) : cargue el código en dispositivos que no estén conectados a su computadora.
  • Webhooks : integre su proyecto con otro servicio, como IFTTT.
  • Soporte de Amazon Alexa : haga que su proyecto sea controlado por voz con la integración de Amazon Alexa.
  • Uso compartido del panel : comparta sus datos con otras personas de todo el mundo.

Hardware compatible

Para usar Arduino IoT Cloud, se requiere una placa compatible con la nube . Se puede elegir entre utilizar una placa Arduino oficial, o una placa basada en el microcontrolador ESP32/ESP8266. Además Arduino IoT Cloud actualmente admite la conexión a través de Wi-Fi, LoRaWAN® (a través de The Things Network) y redes móviles.

Todas las placas Arduino compatibles con la nube vienen con un elemento seguro de hardware (como el criptochip ECC508 ), donde puede almacenar sus claves de seguridad.

Wifi

Las placas Arduino oficiales solo admiten la banda de frecuencia de 2,4 GHz para transmitir datos. Las siguientes placas se conectan a Arduino IoT Cloud a través de Wi-Fi.

  • MKR 1000 Wi-Fi :Arduino MKR1000 ha sido diseñado para ofrecer una solución práctica y rentable para cualquiera que busque añadir conectividad WiFi a sus proyectos con una mínima experiencia en redes. El diseño incluye un circuito de carga Li-Po que permite al Arduino MKR1000 funcionar con alimentación de batería o 5V externos, cargando la batería Li-Po mientras funciona con alimentación externa. El cambio de una fuente a otra se realiza automáticamente. El MKR1000 tiene un procesador Arm Cortex-M0+ de 32 bits, el habitual rico conjunto de interfaces de E/S, y WiFi de bajo consumo con un chip criptográfico para una comunicación segura. Se puede programar utilizando el conocido y fácil de usar software Arduino (IDE). Todas estas características hacen de esta placa la opción preferida para los emergentes proyectos IoT alimentados por batería en un factor de forma compacto. Su precio ronda los 60€ en Amazon.
MKR 1000 Wi-Fi :
  • MKR Wi-Fi 1010 :MKR 1010 simplifica la creación de prototipos de aplicaciones IoT basadas en WiFi, fácil de conectar y configurar a otros productos de Arduino. El módulo híbrido de conectividad WiFi / BLE tiene un modo de bajo consumo de energía, mejorando la vida útil de las baterías .Ideal para principiantes y profesionales en IoT para la construcción de redes de sensores inalámbricos en minutos o dispositivos de control remoto. La placa puede conectarse a cualquier tipo de red WiFi existente o puedes usarla para crear tu propio Punto de Acceso Arduino. También es posible conectar su placa a diferentes servicios de la Nube, ¡incluyendo Arduino IoT Cloud! Fácil de alimentar con un cable USB o una batería Li-Po externa de 3.7V. Recarga la batería a través del puerto USB. Cuesta unos 40€ en Amazon
MKR 1010
  • Conexión Nano RP2040 : La placa Raspberry Pi Pico incorpora el chip microcontrolador RP2040 propio de Raspberry Pi, con procesador Arm Cortex M0+ de doble núcleo que funciona a 133 MHz, 264 KB de SRAM y 2 MB de memoria Flash integrados, así como 26 pines GPIO multifunción .Es una placa microcontroladora de bajo coste y alto rendimiento con interfaces digitales flexibles con Pre-Soldered Header, es más conveniente para los ingenieros a utilizar. Para el desarrollo de software, está disponible el SDK C/C++ de Raspberry Pi, o el MicroPython. También hay recursos completos de desarrollo y tutoriales para ayudarle a empezar fácilmente, e integrarlo en los productos finales rápidamente. Esta placa es mas económica rondando los 16€ en Amazon.
Raspberry Pi Pico
  • Nano 33 Internet de las Cosas :Diseñado para interacciones de corta distancia de BT y proyectos de ahorro de energía. Esta placa es pequeña (48mm x 18mm) y robusta estando construida alrededor del módulo NINA B306, basado en el nRF 52840 nórdico y que contiene un poderoso Cortex M4F.La arquitectura de la placa es totalmente compatible con Arduino IDE Online y Offline; tiene un sensor inercial de 9 ejes (IMU) y un bajo consumo de energía en comparación con otras placas del mismo tamaño.Clock 64MHz, Flask 1MB, RAM 256KB.Dos conectores de 15 pines, uno a cada lado de la placa. Cuesta unos 28€ en Amazon

nano-33
  • Portenta H7 : es una placa que permite ejecutar simultáneamente código de alto nivel junto con tareas en tiempo real. El diseño incluye dos procesadores que pueden ejecutar tareas en paralelo. Por ejemplo, es posible ejecutar código compilado de Arduino junto con uno de MicroPython, y tener ambos núcleos para comunicarse entre sí. La funcionalidad de Portenta es doble, puede ejecutarse como cualquier otra placa de microcontrolador integrada o como el procesador principal de una computadora integrada. Portenta puede ejecutar fácilmente procesos creados con TensorFlow™ Lite, podría tener uno de los núcleos que calcula un algoritmo de visión por computadora sobre la marcha, mientras que el otro podría realizar operaciones de bajo nivel como controlar un motor o actuar como una interfaz de usuario.Utilice Portenta cuando el rendimiento sea clave, entre otros casos, lo imaginamos como parte de:Maquinaria industrial de alta gama, Equipo de laboratorio,Visión por computador, PLC,Interfaces de usuario preparadas para la industria, Controlador de robótica , Dispositivos de misión crítica,Computadora estacionaria dedicada,Cálculo de arranque de alta velocidad (ms). Cuesta unso 100€ en la pagina oficial de Arduino
portenta-h7
  • Portenta H7 Lite conectado :El Portenta H7 Lite Connected está diseñado para proporcionar la potencia computacional del Portenta H7 para aplicaciones de IA y soluciones de control de baja latencia, con un módulo que se vuelve más rentable al eliminar la función de interfaz de video de alta resolución. Llena la brecha entre las versiones H7 completa y H7 Lite al integrar conectividad inalámbrica, agregando otra opción para que los clientes de Arduino Pro construyan la solución perfecta con la combinación correcta de rendimiento y simplicidad. El Portenta H7 Lite Connected ejecuta simultáneamente código de alto nivel y tareas en tiempo real gracias a sus dos procesadores. Por ejemplo, puede ejecutar código compilado por Arduino y MicroPython al mismo tiempo, y hacer que los dos núcleos se comuniquen a través de un mecanismo de llamada de procedimiento remoto que permite llamar a funciones en el otro procesador sin problemas para realizar múltiples tareas reales. Sus algoritmos de aprendizaje automático ahora pueden ejecutarse simultáneamente junto con la interacción de sensor/actuador de baja latencia. Cuesta unos 89€ en la tienda oficial
  • Control de la máquina Portenta: Portenta Machine Control es una unidad de control industrial totalmente centralizada y de bajo consumo capaz de controlar equipos y maquinaria. Se puede programar utilizando el marco Arduino u otras plataformas de desarrollo integradas.Gracias a su poder de cómputo, Portenta Machine Control permite una amplia gama de casos de uso de inteligencia artificial y mantenimiento predictivo. Permite la recopilación de datos en tiempo real desde la planta de producción y admite el control remoto de equipos, incluso desde la nube, cuando se desee. Cuesta unos 300€ en la tienda de Arduino.
portenta-induistrial
  • Nicla Visión : combina un potente procesador IC STM32H747AII6 Dual ARM® Cortex® M7/M4 con una cámara a color de 2 MP compatible con TinyML, así como un sensor de movimiento inteligente de 6 ejes, un micrófono integrado y un sensor de distancia. Puede incluirlo fácilmente en cualquier proyecto porque está diseñado para ser compatible con todos los productos Arduino Portenta y MKR, se integra completamente con OpenMV, es compatible con MicroPython y también ofrece conectividad WiFi y Bluetooth® Low Energy. Es tan compacto, con su factor de forma de 22,86 x 22,86 mm, que puede adaptarse físicamente a la mayoría de los escenarios y requiere tan poca energía que puede funcionar con batería para aplicaciones independientes.Todo esto convierte a Nicla Vision en la solución ideal para desarrollar o crear prototipos con procesamiento de imágenes en el dispositivo y visión artificial en el borde, para seguimiento de activos, reconocimiento de objetos, mantenimiento predictivo y más, más fácil y rápido que nunca. Entrénelo para detectar detalles, de modo que pueda concentrarse en el panorama general. Cuesta unos 95€

nicla-vision
  • Opta .   Gracias a su poder de cómputo (STM32H747XI dual Cortex®-M7+M4 MCU Arm® de baja potencia de 32 bits: incluye un Cortex® M7 que funciona a 480 MHz y un Cortex® M4 que funciona a 240 MHz comunicandose los dos núcleos a través de un mecanismo de llamada a procedimiento remoto que permite llamar a funciones en el otro procesador sin problemas) Arduino Opta permite una amplia gama de aplicaciones de control, monitoreo y mantenimiento predictivo en tiempo real.Permite a los profesionales ampliar los proyectos de automatización mientras aprovechan el ecosistema abierto y ampliamente conocido de Arduino. Póngalo a trabajar rápidamente, aprovechando las numerosas bibliotecas de software disponibles. El elemento seguro integrado garantiza actualizaciones de firmware inalámbricas y control remoto a través de Arduino Cloud o servicios de terceros. Arduino Opta está disponible en tres variantes:Opta Lite: puertos Ethernet y USB-C® integrados, Opta RS485: puertos Ethernet y USB-C® integrados, además de conectividad RS485 y Opta WiFi: puertos Ethernet y USB-C® integrados, además de RS485 y Wi-Fi/Bluetooth® Low Energy.El Opta está programado para ser lanzado pronto, junto con la documentación sobre cómo usarlo.

opta

La conexión a través de Wi-Fi es una alternativa fácil y sus credenciales se pueden ingresar de manera segura durante la configuración de un proyecto. Este tipo de conexión es más adecuado para proyectos de bajo alcance, en los que conecta su placa a la nube a través del enrutador de su hogar/trabajo/escuela. Ahora veremos otros tipos de conectividad:

LoRaWAN®

Las siguientes placas se conectan a Arduino IoT Cloud a través de The Things Stack , un servidor de red LoRaWAN® conectado a miles de puertas de enlace LoRa® públicas.

  • MKR WAN 1300
  • MKR WAN 1310

Se recomienda la conexión a través de LoRaWAN® para proyectos de bajo consumo tanto en áreas remotas como urbanas, donde Wi-Fi u otros tipos de conectividad populares no están disponibles. Las placas MKR WAN 1300/1310 están equipadas con un módulo de radio LoRa y tienen una ranura para una antena. Con la configuración adecuada de bajo consumo, la placa puede enviar datos a la nube durante meses con una sola batería.

Placas GSM / NB-IoT

El MKR GSM 1400 y el MKR NB 1500 requieren una tarjeta SIM para conectarse a la nube, ya que se comunican a través de las redes móviles.

  • MKR GSM 1400
  • MKR NB 1500

La conexión a través de redes móviles se puede considerar en áreas remotas donde no hay Wi-Fi o en proyectos móviles (como el seguimiento de carga). Tenga en cuenta que una conexión segura es una operación que consume mucha memoria, por lo que no hay mucha memoria para la aplicación del usuario (por ejemplo, alrededor de 2,6 kB en el MKR GSM 1400). El uso de muchas variables de IoT Cloud puede hacer que el boceto se quede sin memoria en las placas que no descargan la pila SSL y hacen que se bloquee.

ESP32 / ESP8266

Arduino IoT Cloud es compatible con una amplia gama de placas de terceros basadas en los microcontroladores ESP32 y ESP8266 con soporte para Wi-Fi. Para configurarlos, simplemente elija la opción de terceros en la configuración del dispositivo.

Configuración de placas de terceros.
Configuración de placas de terceros.

Ethernet

Arduino IoT Cloud admite la conexión a través de Ethernet en varios dispositivos. Las opciones para conectarse vía Ethernet son las siguientes:

  • Conéctese con el Portenta H7 en combinación con un portador/escudo compatible con Ethernet .Para conectarse con la placa Portenta H7 , necesitará uno de los siguientes protectores/portadores :Escudo de visión Portenta Ethernet o Control de la máquina Portenta
  • Conéctese con la Opta . *

Para habilitar la comunicación a través de Ethernet con el Portenta H7, mientras configura su dispositivo, debe seleccionar la opción «Ethernet». Si su dispositivo ya está configurado como un dispositivo Wi-Fi, debe quitarlo antes de configurarlo para la comunicación Ethernet.

Elija la opción Ethernet.
Elija la opción Ethernet.

Tenga en cuenta que el hardware más antiguo, como Ethernet Shield Rev2 y MKR ETH Shield , actualmente no es compatible con Arduino IoT Cloud.

Primeros pasos

Configurar Arduino IoT Cloud y acceder a las diferentes funciones disponibles implica unos simples pasos. ¡Así que echemos un vistazo a cómo ir de principio a fin!

1. Crear una cuenta de Arduino

Para comenzar a usar la nube Arduino IoT, primero debemos iniciar sesión o registrarnos en Arduino .

2. Vaya a la nube Arduino IoT

Una vez que nos hayamos registrado, puede acceder a Arduino IoT Cloud desde cualquier página en arduino.cc haciendo clic en el menú de cuatro puntos en la esquina superior derecha. También puede ir directamente a Arduino IoT Cloud .

Navegando a la nube.
Navegando a la nube.

3. Crear una cosa

El viaje siempre comienza creando una Cosa nueva . En la descripción general de Thing, podemos elegir qué dispositivo usar, a qué red Wi-Fi queremos conectarnos y crear variables que podemos monitorear y controlar. Este es el espacio de configuración principal, donde todos los cambios que hacemos se generan automáticamente en un archivo de boceto especial .

Resumen de la Cosa.
Resumen de la Cosa.

4. Configuración de un dispositivo

Los dispositivos se pueden agregar y vincular fácilmente a una Cosa. Arduino IoT Cloud requiere que su ordenador tenga instalado Arduino Agent . El proceso de configuración es rápido y fácil, y se puede hacer haciendo clic en el botón «Seleccionar dispositivo» en la descripción general de Thing. Aquí podemos elegir entre cualquier placa que se haya configurado, o seleccionar la opción “Configurar nuevo dispositivo” .

Configuración de un dispositivo.
Configuración de un dispositivo.

«Dispositivos»

La pestaña del dispositivo.
La pestaña del dispositivo.

5. Creando Variables

Las variables que creamos se generan automáticamente en un archivo de boceto. Hay varios tipos de datos entre los que podemos elegir, como int, float, boolean, long, char . También hay variables especiales, como Temperatura, Velocidad, Luminancia que se pueden usar. Al hacer clic en el botón «Agregar variable» , podemos elegir el nombre, el tipo de datos, la configuración de actualización y el modo de interacción.

Creación de variables.
Creación de variables.

6. Conexión a una red

Para conectarse a una red Wi-Fi, simplemente haga clic en el botón «Configurar» en la sección de red. Ingrese las credenciales y haga clic en «Guardar» . ¡Esta información también se genera en su archivo de boceto!

Ingreso de credenciales de red.
Ingreso de credenciales de red.

5. Creando Variables

Ahora que hemos configurado las variables, los dispositivos y los ajustes de red, ¡podemos comenzar a programar nuestros dispositivos!

Un archivo de boceto generado automáticamente se puede encontrar en la pestaña «Bosquejo» . Tiene la misma estructura que un típico archivo *.ino , pero con algún código adicional para hacer la conexión a su red y a la nube.

Un boceto que, por ejemplo, lee un sensor analógico y usa la variable de nube para almacenarlo. Cuando se haya cargado el boceto, funcionará como un boceto normal, ¡pero también actualizará las variables de la nube que usamos!

Además, cada vez que creamos una variable que tiene habilitado el permiso de lectura y escritura , también se genera una función en la parte inferior de su archivo de boceto. ¡Cada vez que esta variable cambie, ejecutará el código dentro de esta función! Esto significa que podemos dejar la mayor parte del código fuera del loop() y solo ejecutar código cuando sea necesario.

Para subir el programa a nuestra placa, simplemente haga clic en el botón «Subir» .

Edición de un boceto en el editor de la nube.
Edición de un boceto en el editor de la nube.

El editor también tiene una herramienta Serial Monitor , que se puede abrir haciendo clic en la lupa en la barra de herramientas. Aquí puede ver información sobre su conexión o comandos impresos a través de

Serial.print()

.

La herramienta de monitor en serie.
La herramienta de monitor en serie.

Una vez que hayamos cargado correctamente el código, podemos abrir la pestaña «Serial Monitor» para ver información sobre nuestra conexión. Si tiene éxito, imprimirá «conectado a network_name» y «conectado a la nube» . Si no se conecta, también imprimirá los errores aquí.

El editor en la nube es una versión «mínima» reflejada del Editor web. Cualquier cambio que realice también se reflejará en el Editor web, que es más adecuado para desarrollar bocetos más avanzados.

8. Creación de un panel

Ahora que configuramos el dispositivo y la red, creamos variables, completamos el boceto y cargamos correctamente el código, podemos pasar a la parte divertida: ¡crear tableros!

Los tableros son una interfaz de usuario visual para interactuar con sus tableros en la nube, y podemos configurar muchas configuraciones diferentes según lo que necesite su proyecto de IoT. Podemos acceder a nuestros tableros haciendo clic en la pestaña «Tableros» en la parte superior de la interfaz de Arduino IoT Cloud, donde podemos crear nuevos tableros y ver una lista de tableros creados para otras cosas.

Navegación a los tableros.
Navegación a los tableros.

Si hacemos clic en “Crear nuevo tablero” , entramos en un editor de tableros. Aquí, podemos crear algo llamado widgets . Los widgets son la representación visual de nuestras variables que creamos, y hay muchos diferentes para elegir. A continuación se muestra un ejemplo que utiliza varios tipos de widgets.

Los diferentes widgets disponibles.
Los diferentes widgets disponibles.

Cuando creamos widgets, también debemos vincularlos a nuestras variables . Esto se hace haciendo clic en un widget que creamos, seleccionando una cosa y seleccionando una variable que queremos vincular. Una vez que está vinculado, podemos interactuar con él, por ejemplo, un botón, o podemos monitorear un valor de un sensor. ¡Mientras nuestra placa esté conectada a la nube, los valores se actualizarán!

Digamos que tenemos un widget de temperatura que queremos vincular a la variable de temperatura dentro del proyecto de la nube .

Vincular una variable a un widget.
Vincular una variable a un widget.

Tenga en cuenta que no todos los widgets y variables son compatibles. Un interruptor y un número entero, por ejemplo, no se pueden vincular y no serán una opción al configurar su tablero.

También podemos tener varias cosas funcionando a la vez, dependiendo de tu plan Arduino IoT Cloud, que podemos incluir en el mismo dashboard. Esta es una excelente característica para rastrear múltiples tableros en, por ejemplo, una red de sensores más grande, donde los tableros se pueden conectar a diferentes redes en todo el mundo, pero se pueden monitorear desde el mismo tablero.

zz

IoT Cloud


En este post vamos a a ver conectar una placa MKR1000 (o MKR 1010) a la nube de Arduino IoT  de modo que podremos controlar y supervisar  las entradas  o salidas de estas places a través de Internet utilizando el sitio web de Arduino IoT Cloud.

Para ello simplemente seguiremos tres pasos,:

  • Agregaremos nuestra placa a Arduino IoT Cloud como una cosa( Thing) , es decir  una representación de nuestra placa en la nube.
  • A continuación, le daremos a nuestra cosa un conjunto de propiedades que representan sensores, LEDs, motores y muchos otros componentes en el proyecto al que queremos acceder desde la nube.
  • Subiremos a nuestra placa el código que nos propone Arduino IoT Cloud personalizado para nuestra red wifi

Si le  interesa  como hacerlo , vera que es muy sencillo,  pues como vamos a ver  casi todo esta hecho, pero antes, veremos las semejanzas   y diferencias de ambas placas  y después veremos paso a paso como lograrlo.

Arduino MKR1000

Arduino MKR1000 es una placa diseñada para ofrecer una solución práctica y rentable para cualquiera que busque agregar conectividad WiFi a sus proyectos con una experiencia mínima en redes.  Su precio no es excesivo  teniendo en cuenta que integra la conectividad  wifi (unos 38€ en Amazon)

El diseño incluye un circuito de carga Li-Po que permite que el Arduino MKR1000 funcione con una  batería o 5V externos, cargando la batería Li-Po mientras funciona con energía externa: el cambio de una fuente a otra se realizara automáticamente  y por tanto no tendremos que preocuparnos de nada más.

El MKR1000 tiene un procesador Arm Cortex-M0 + de 32 bits  corriendo a 2.4ghz ,  y cuenta con  el rico conjunto habitual de interfaces de E / S . Sin duda uno de su punto fuertes  es que integra  WiFi de baja potencia con un chip criptográfico para una comunicación segura.

Una de las grandes ventajas  es que puede programarlo utilizando el software Arduino (IDE) al que estamos  todos familiarizados  siendo muy  fácil de usar.

Todas estas características hacen de esta placa la opción preferida para los proyectos emergentes que funcionan con baterías de IoT en un factor de forma compacto.

 Desafortunadamente, Arduino aún no lo ha integrado en su IDE, por lo que la configuración no es tan fácil como lo es para la mayoría de sus otras placas ,sin embargo, siga algunos pasos para configurarlo y podrá ponerlo a prueba: –

  • Instale el último IDE de Arduino 
  •  Haga clic en Herramientas | Puerto – Seleccione el puerto COM (no se mostrará ninguna placa) 
  • Ahora haga clic en Herramientas | Junta | Obtener información del tablero. Verá información con «Tablero desconocido» como tipo
  •  A continuación, haga clic en Herramientas | Junta | Gerente de la Junta
  • Instale el paquete Arduino SAMD Boards (ARM Cortex-M0 + de 32 bits) que incluye MKR WiFi 1010, Genuino Zero, MKR1000, etc.
  • Reinicie el IDE para que surta efecto el nuevo paquete de placa
  • En este punto, puede desconectar y volver a conectar la placa para que el IDE lo vea
  • Haga clic en Herramientas | Información del tablero; esta vez verá «Arduino / Genuino MKR1000» !!! ¡No olvides este siguiente paso o no podrás subir tu boceto!
  • Haga clic en Herramientas | Tablero: 
  • Seleccione Arduino / Genuino MKR1000 . En este punto, yaa puede cargar un boceto en su tablero  como  por ejemplo el que vamos a ver en este post para controlar un led desde Internet

Como   se puede  ver en la imagen de  mas abajo , los pines disponibles son casi los mismos que los que solemos tener en un Arduino convencional  : los pines A0  a A6   para entradas  y salidas analógicas , los pines 0 al 14  para entradas salidas binarias y los típicos de alimentación externa(VIN,VCC 5v y GND)   , la referencia (AREF )  y  RESET.

Si le interesa esta placa la puede comprar en Amazon por unos 38€

Arduino MKR1010

Hablamos ahora de una placa muy similar a la anterior   algo mas barata que la la Mkr1000 ( unos  33€  en Amazon , es decir unos 5€ mas barato que la MKR1000)

Esta placa  está compuesta por tres bloques principales:

  • Microchip ATSAMD21 MCU basado en un procesador Arm Cortex-M0 
  • Serie u-blox NINA-W10 de baja potencia 2.4GHz IEEE 802.11 b / g / n Wi-Fi ECC508 CryptoAuthentication
  • El diseño incluye un Li-Po Circuito de carga que permite que Arduino MKR WiFi 1010 funcione con batería o 5V externos, cargando la batería Li-Po mientras funciona con energía externa. El cambio de una fuente a otra se realiza automáticamente.

Como  vemos , la gran diferencia  es  el Microcontrolador que es menos potente  pues  cuenta con el  Microchip ATSAMD21 (procesador Arm Cortex-M0 +)  en contraste  con el Arm Cortex-M0 + de 32 bits  corriendo a 2.4ghz del MKR100.

Respecto a la conectividad,  es similar al  MKR1000  contando con WiFi u-blox NINA-W102 (ESP32)

La alimentación se puede hacer con una fuente de alimentación externa de 5v DC  bien por  USB  o bien por el pin VIN , pero  cuenta   además  con conexión para Batería compatible (*) Li-Po de celda única, 3,7 V, 700 mAh  siendo el voltaje mínimo de funcionamiento del circuito 3,3 V .

 

Como   se puede  ver en la imagen de  mas abajo , los pines disponibles son casi los mismos que los que solemos tener en un Arduino convencional  ( y los mismo que el  MKR100)   : los pines A0  a A6   para entradas  y salidas analógicas , los pines 0 al 14  para entradas salidas binarias y los típicos de alimentación externa(VIN,VCC 5v y GND)   , la referencia (AREF )  y  RESET.

Si le interesa esta placa la puede comprar en Amazon por unos 33€

 

1. Crear una cosa y controlar un LED a través de la nube

Para empezar vamos a crear un circuito simple que consiste en un LED conectado a la placa Arduino MKR1000  (o MKR 1010).

Como se muestra en el esquema, simplemente conectaremos la pata positiva del LED al Pin digital 2 de la placa y la pata negativa a tierra a través de una resistencia de 150 ohmios.

Observe que la potencia de la placa de pan proviene del Vcc, no del pin de 5V de la placa MKR1000 pues  si lo conectamos al pin de 5V, podríamos dañar la placa  cuando por ejemplo  agreguemos  un botón.

An LED connected to Digital Pin 2 of an Arduino MKR1000

Ahora que hemos conectado nuestro LED, podremos  habilitado para IoT pero antes de eso, tendremos que configurar una placa Arduino para que pueda comunicarse con la nube.

Para este proyecto, podemos elegir un MKR1000 o un MKR  1010.  Una vez que nuestra placa está configurada, necesitaremos crear a una cuenta Arduino  ( ai aún no la tenemos creada, y hecho ya nos iremos a Arduino IoT Cloud y comenzaremos  con el  viaje a través de IoT 

Asi pues nos  iremos  Arduino IoT Cloud que comenzara con el proceso guiado de introducción  que nos ayudará a configurar nuestra placa, darle un nombre e instalar las claves que le permitirán conectarse de forma segura a nuestra nube mediante un canal cifrado.

Getting Started Wizard
Este es el asistente de introducción
Select a supported board
Seleccionaremos  una placa compatible
Let's make it connect securely to IoT Cloud
Haremos que se conecte de forma segura a IoT Cloud
Time to plug our board into our computer, it will be recognised automatically
Es hora de conectar nuestra placa a nuestro ordenador, se reconocerá automáticamente
Let's give it a name...
Vamos a darle un nombre…
and click on CONFIGURE
Ahora  haremos clic en CONFIGURAR
After a little time all is done, and we can get BACK TO CLOUD
Después de un poco de tiempo todo está hecho, y podemos llegar DE VUELTA A CLOUD

Al hacer clic en el botón «BACK TO CLOUD» podremos crear nuestra primera Cosa.

Nuestra placa MKR recién configurada se seleccionará automáticamente para ser asociada con nuestra Cosa, por lo que todo lo que queda es darle un nombre. Elegimos llamarlo IoTCloud_Tutorial_Thing pero puede nombrarlo como desee.

 

Our board is preselected ->
Nuestra placa está preseleccionada ->
Let's name it...
Vamos a nombrarlo…
and click the CREATE button
y haga clic en el botón CREAR

Ahora seremos redirigidos a nuestra vista de edición de Thing, donde podremos crear y modificar sus Propiedades – la representación de sensores y actuadores a los que queremos acceder a través de la nube.

Nuestro objetivo es encender y apagar el LED a través de Cloud cuando alternamos un interruptor gráfico en nuestro navegador. Para hacerlo, tenemos que crear una propiedad, así que haga clic en el botón + como se muestra en la imagen de abajo.

Time to create our first Property
Es hora de crear nuestra primera propiedad

Usaremos como nombre significativo que lo represente  (este nombre se reflejará en el nombre de la variable que usaremos en el boceto) como por ejemplo dado que va ser un led   de  «.light"

El Tipo de esta propiedad debe ser «ON/OFF (Boolean)».

Our properties details are set, let's CREATE it
Nuestros detalles de propiedades están establecidos  así que vamos vamos a crearlo

Podemos dejar El permiso establecido en «Leer y escribir» – para que podamos encender y apagar el LED desde el navegador. 

También deje Actualizar en «Cuando cambie el valor», lo cual  asegurará de que siempre que el valor de la propiedad/variable cambie dentro del boceto de la placa, dicho valor se enviará inmediatamente a la nube.

Finalmente haga clic en CREAR.

Property Edit view
Vista de edición de propiedades
Dashboard view
Vista del panel

 

Desde la vista Editar podemos hacer clic en «EDITAR CODE». Esto nos redirigirá al Editor mostrando un boceto ya hecho que se ha generado para nuestra Cosa.

En este caso de ejemplo se generará el siguiente código que tendremos que cargar en nuestra placa:

 

*
Sketch generated by the Arduino IoT Cloud Thing "testThing"
https://create.arduino.cc/cloud/things/d276ab77-67cb-420b-9ea4-bd34cdf385d9



Arduino IoT Cloud Properties description



The following variables are automatically generated and updated when changes are made to the Thing properties



bool switchState;
int potentiometerValue;
bool ledState;



Properties which are marked as READ/WRITE in the Cloud Thing will also have functions
which are called when their values are changed from the Dashboard.
These functions are generated with the Thing and added at the end of this sketch.
*/



include "thingProperties.h"



include



define LED_PIN 2



define POT_PIN A1



define BUTTON_PIN 5



FTDebouncer buttons;



void setup() {
pinMode(LED_PIN, OUTPUT);
buttons.addPin(BUTTON_PIN, LOW);
buttons.init();



/*
The following function allows you to obtain more information
related to the state of network and IoT Cloud connection and errors
the higher number the more granular information you’ll get.
The default is 0 (only errors).
Maximum is 3
*/
setDebugMessageLevel(2);



// Initialize serial and wait for port to open:
Serial.begin(9600);
// This delay gives the chance to wait for a Serial Monitor without blocking if none is found
delay(1500);



// Defined in thingProperties.h
initProperties();



// Connect to Arduino IoT Cloud
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
}



void loop() {
buttons.update();
ArduinoCloud.update();
// Your code here
int angleSensor = analogRead(A1);
angle = map(angleSensor, 0, 1023, 0, 270);
}



void onLightChange() {
digitalWrite(LED_PIN, light);
Serial.print("The light is ");
if (light) {
Serial.println("ON");
} else {
Serial.println("OFF");
}
}



void onPinActivated(uint8_t pinNr) {
// do something according to the _pinNR that is triggered. For instance:
Serial.println(pinNr);
toggle = !toggle;
}



void onPinDeactivated(uint8_t pinNr) {
// do something according to the _pinNR that is triggered. For instance:
Serial.println(pinNr);
}

 

El boceto se denominará exactamente igual que nuestra Cosa, más la fecha de creación y, finalmente, un número si ya existe un boceto con nombre .

Aparte del archivo .ino principal , verá tres archivos más:

  • ReadMe.adoc: se trata de un archivo de texto sin formato que contiene información sobre el boceto, el autor y el propio proyecto.
  • thingProperties.h: este es el código generado por Arduino IoT Cloud cuando agregamos nuestra propiedad. No necesitamos editar este código, pero es útil verlo ya que muestra qué variablesde nuestro archivo de boceto principal (.ino) se sincronizarán con la nube.light
  • En la Pestaña Secreto: Detalles de la conexión WiFi,  esta pestaña nos permite rellenar los valores  como  son el nombre y la contraseña de la red WiFi a la que se conectará nuestra placa.SECRET_SSIDSECRET_PASS

 

Vamos a profundizar en cada línea de este boceto para entender lo que hacen los difrentes ficheros qeu lo compone:

Fichero thingProperties.h

#include <ArduinoIoTCloud.h>

Importa la biblioteca ArduinoIoTCloud, que es necesaria para sincronizar nuestras variables de boceto locales con sus propiedadesde IoT Cloud.

#include <Arduino_ConnectionHandler.h>

El WiFiConnectionManager se utiliza para gestionar la conexión WiFi y la reconexión sin problemas.

char ssid[] = SECRET_SSID;
char pass[] = SECRET_PASS;

Estos valores se extraen de la pestaña Secreto.

#define THING_ID "d276ab77-67cb-420b-9ea4-bd34cdf385d9"

El código de identificación único de la cosa.

void onLightChange();

Esta línea declara una función que se llamará cada vez que se cambia el valor de nuestra propiedad en el panel. Este tipo de función se conoce como devolución de llamada.light

bool light;

Declaración de la variable.light

void initProperties()

Esta función se llamará dentro del bloque de nuestro archivo *.ino. setup()

ArduinoCloud.setThingId(THING_ID);

Le dice a nuestro boceto a qué cosa conectarse.

ArduinoCloud.addProperty(light, READWRITE, ON_CHANGE, onLightChange);

Este código pues le indica al sketch que trate la variable como una propiedad de nuestra cosa y que ejecute la función de devolución de llamada cada vez que se cambie el valor de propiedad de Arduino IoT Cloud.

Los permisos se establecen para esta propiedad porque esto es lo que seleccionamos al crear esta propiedad.lightonLightChangeREADWRITE

 

El resto de codigo es  el siguiente:

void onLightChange();

bool toggle;
int angle;
bool light;

void initProperties(){
ArduinoCloud.setThingId(THING_ID);
ArduinoCloud.addProperty(toggle, READ, ON_CHANGE, NULL);
ArduinoCloud.addProperty(angle, READ, ON_CHANGE, NULL, 3.000000);
ArduinoCloud.addProperty(light, READWRITE, ON_CHANGE, onLightChange);
}

WiFiConnectionHandler ArduinoIoTPreferredConnection(ssid, pass);

 

Este código Inicializa Connection Manager con el nombre de punto de acceso WiFi (SECRET_SSID) y la contraseña (SECRET_PASS)que establecemos en la pestaña Secreto

 

Fichero *.ino

Al igual que en cualquier Arduino Sketch, hay dos funciones principales, y . Se llama una sola vez; cuando el croquis se inicia o se restablece. El se ejecuta continuamente siempre y cuando la placa esté siendo alimentada.void setup(){...}void loop() {...}setup()loop()

#include "thingProperties.h"

Importa variables y funciones declaradas en thingProperties.h, así como en otras bibliotecas importadas.

setDebugMessageLevel(2);

Establece el nivel deseado de mensajes de registro que se imprimirán en el Monitor serie. En este momento el nivel se establece en 2, pero podemos cambiarlo de0 (que registra sólo errores) hasta 3 (que registra TODO!). Si algo no está funcionando con la conexión a WiFi o Cloud, será más fácil encontrar el problema si se establece en un nivel superior. Por ahora, podemos dejarlo como está.

Serial.begin(9600);

Inicializa el monitor seriepara imprimir lo y leer deél.

delay(1500);

Espera 1,5 segundos para dar al Monitor serie el tiempo necesario para inicializar.

initProperties();

Inicializa las propiedades tal como se definen en thingProperties.h.

ArduinoCloud.begin(ArduinoIoTPreferredConnection);

InicializatheArduinoCloudusingthe mencionado anteriormente ConnectionManager.

Dentro de lo que encontramosloop()

ArduinoCloud.update();

Maneja muchas cosas en segundo plano, incluyendo la sincronización de los valores de las propiedades entre la nube y la placa, checkingtheconnectiontonetworkyCloudy otra lógica. Si el valor de una propiedad cambia en el boceto, la biblioteca la detectará automáticamente y notificará a la nube, de modo que dicho valor se reflejará en nuestro Arduino IoT Cloud Dashboard. Del mismo modo, cuando se cambia el valor de una propiedad en el panel, la biblioteca actualizará el valor correspondiente en el dispositivo.

void onLightChange() {...}

La implementación de nuestra devolución de llamada que se llamará en cualquier momento que cambie el valor de la propiedad. Aquí agregaremos cualquier código que queramos que se ejecute cuando cambie la propiedad de nuestro panel.light

Y ahora, con el fin de encender y apagar el LED desde el Arduino IoT Cloud Dashboard, necesitamos escribir algunas líneas de código. Primero definimos el pin al que está conectado nuestro LED. Agregue este código justo encima de la funciónsetup()

#define LED_PIN 2

En la función, necesitamos inicializar este pin para que sea una SALIDA:setup()

pinMode(LED_PIN, OUTPUT);

Por último, en la función, agregamos un poco de lógica para rastrear el estado en el monitor serie y para encender y apagar el LED. Tenga en cuenta que esta función de devolución de llamada se genera automáticamente cada vez que se agrega una nueva propiedad con permisos de lectura y escritura.onLightChange()light

void onLightChange() {
    digitalWrite(LED_PIN, light);
    Serial.print("The light is ");
    if (light) {
        Serial.println("ON");
    } else {
        Serial.println("OFF");
    }
}

 

Pruebas

Una vez preparados los ficheros  anteriores  podemos cargar el boceto desde el IDE de Arduino haciendo clic en el botón Cargar y luego abra el Monitor Serie a la izquierda para ver si todo funciona.

Una vez conectado con éxito a nuestro WiFi, logró obtener una dirección e inició un enlace seguro, la placa se conectará a IoT Cloud y comenzará a intercambiar datos con ella.

[ 144313 ] Connecting to "FT Mobile"
[ 148284 ] Connected to "FT Mobile"
[ 148284 ] Acquiring Time from Network
....
[ 148690 ] Network Time: 1550057496
[ 148910 ] Connecting to Arduino IoT Cloud...
[ 152212 ] Connected to Arduino IoT Cloud

Si alguno de los pasos anteriores falla, recibiremos un error. Si eso sucede, podemos restablecer el tablero e intentarlo de nuevo. Si los pasos anteriores se han seguido cuidadosamente, es un caso poco probable 🙂

Al hacer clic en el botón GO TO IOT CLOUD seremos redirigidos a la página de nuestra Cosa en Arduino IoT Cloud. Desde aquí haremos clic en el botón del panel.

Dasboard view
En la Vista de Dasboard ya deberíamos ver un widget que muestra el estado de la propiedad que creamos, y debe establecerse en OFF.light

Vamos a hacer clic en él un par de veces y vamos a ver el LED encender y apagar… y ON… y OFF de nuevo…

¡Misión cumplida!