Primeros pasos con Terraform


Desde hace un tiempo se oye hablar mucho de DevOps, una fusión que combina las áreas de   Desarrollo,Operaciones y Control de calidad

Es una extensión natural de metodologías Agile y es habitual el uso de los principios CAMS, cuyas siglas vienen de:

  • Cultura relacionada con comunicación humana, procesos y herramientas
  • Automatización de procesos
  • Monitorización
  • Sharing feedback, buenas prácticas y conocimiento

En DevOps son habituales las prácticas siguientes:

  • Planificación ágil
  • Despliegue continuo (CI/CD). La subida de cambios al repositorio de código desencadena la ejecución de pruebas automatizadas que finalmente  realizan el despliegue de los cambios tras superarse las pruebas.
  • Infraestructura como código (Infrastructure as Code). Se trata del desarrollo de scripts para las tareas de despliegue y gestión de la infraestructura
  • Contenedorización. Combinada con la Infraestructura como código permite el despliegue instantáneo de aplicaciones en contenedores.
  • Microservicios. Facilita el aislamiento de problemas y maximiza la producción
  • Infraestructura cloud. Favorece la disponibilidad y la automatización.

 

En este post vamos a ver Terraform, una herramienta para construir, modificar y versionar infraestructura de forma segura y eficiente.

Terraform es una herramienta de orquestación de código abierto desarrollado por Hashicorp que nos permite definir nuestra infraestructura como código, esto quiere decir que es posible escribir en un fichero de texto la definición de nuestra infraestructura usando un lenguaje de programación declarativo y simple.

Terraform tiene soporte para una gran cantidad de proveedores de infraestructura local o en la nube, Amazon Web Services (AWS), Digital Ocean, Microsoft Azure, VMware vSphere, son ejemplos de proveedores de servicios. Puedes ver todos los proveedores soportados en la documentación de Terraform.

 

Estos proveedores de nube cuentan con sus propias herramientas de infraestructura como código, por ejemplo algunos de ellos como Amazon AWS que tiene a CloudFormation que solo soporta la infraestructura en Amazon, OpenStack tiene Heat, Azure tiene Resource Manager, pero Terraform no está cerrado a un proveedor en específico, puede trabajar con todos ellos e incluso de forma simultánea sin ningún inconveniente.

Instalación en sistema operativo Windows

La instalación de Terraform es muy sencilla. Se descarga como un binario que hay que descomprimir y luego se coloca en un directorio incluido en el PATH del sistema y. Probamos su funcionamiento desde la terminal con terraform donde a encontramos el ejecutable.

Bueno, estos son los pasos  a seguir para instalar Terraform en ambiente Windows:

Nos iremos a la  página oficial https://www.terraform.io/downloads.html.

 

Seleccionamos el sistema operativo y la arquitectura, en nuestro caso elegiremos Windows 64­bit puesto que lo instalaremos en una maquina Windows 10.

Creamos un directorio para el ejecutable de Terraform,copiamos el fichero descargado anteriormente al directorio terraform y nos situamos en el directorio terraform.,Justo entonces descomprimimos el ejecutable ( necesitaremos el winzip instlado ) en el interior del directorio creado anteriormente.

Ahora vamos a añadir la variable de entorno de Terraform para el usuario, para ello en el de cortana buscamos “Configuracion avanzada del sistema ” y pinchamos en este . A continuacion pulsamos en Variables de entorno

 

En la siguiente pantalla pulsamos el botón Nueva.

Asignamos un nombre a la variable y en el botón Examinar archivo buscamos la ruta del ejecutable de Terraform.

Ahora desde una ventana de símbolo de sistema comprobamos que Terraform funciona escribiendo terraform -v.

 

NOTA:  En el caso de usar Linux seguiriamos unos pasos similares: Seleccionamos desde la pagina de descargas de Terraform el sistema operativo y la arquitectura, ( normalmente Linux 64­bit puesto si por ejemplo lo instalasemos en una maquina Debian jessie) .Creamos un directorio para los binarios de Terraform y moveremos el fichero descargado anteriormente al interior de la carpeta.Nos situamos en el directorio terraform,descomprimimos los binarios de Terraform con el comando unzip.Finalmente exportamos las variables de entorno de Terraform con el comando export PATH=/home/usuario/terraform:$PATH y comprobamos que se ha instalado bien ejecutando terraform –version.

 

Sintaxis

Hashicorp usa su propio lenguaje de configuración para la descripción de la infraestructura.

Los archivos Terraform se pueden escribir en dos formatos:

  • HashiCorp Configuration Language (HCL). El formato preferido es el HCL. Desde Terraform 0.12 está disponible HCL2 y se recomienda usar HCL2La extensión de los archivos es .tf

  • JSON. La extensión de los archivos es .tf.json

El objetivo de Terraform es declarar recursos. Todas las características del lenguaje giran en torno a hacer que la definición de recursos sea más flexible y convniente.

Los recursos puede agruparse en módulos, que crean una unidad de configuración de nivel más alto. Un recurso describe un objeto básico de infraestructura, mientras que un módulo describe un conjunto de objetos y sus relaciones para crear un sistema mayor.

 

Una configuración Terraform consta de un módulo raíz donde comienza la evaluación. El módulo puede contener módulos hijo que se van llamando unos a otros. La configuración más sencilla de módulo contendría sólo un archivo .tf (main.tf) aunque se recomienda una organización como la siguiente:

  • main.tf: Configuración de lo recursos del módulo

  • providers.tf: Proveedor de los recursos del módulo.Terraform puede crear stacks de infraestructura en varios proveedores. Por ejemplo, una configuración podría crear infraestructura en Google Cloud Platform y en OpenStack-DI.Hay gran cantidad de proveedores Terraform, tanto oficiales, mantenidos por Hashicorp, (AWS, Azure, Google Cloud Platform, Heroku, Kubernetes, MongoDB Atlas, OpenStack, VMware Cloud, VMware vSphere, …​) como de la comunidad y terceros (OpenShift, Trello, Telegram, …​).Porejemplo para openstack usarimos este archivo

     

    provider "openstack" {
      user_name   = var.openstack_user_name
      tenant_name = var.openstack_tenant_name
      password    = var.openstack_password
      auth_url    = var.openstack_auth_url
    }
  • variables.tf Variables de entrada-Las variables de entrada se usan como parámetros para los módulos. Se crean mediante bloques variable.Las variables se usan siguiendo esta sintaxis var.<variable>. POr ejemplo para openstack usariamos esta sintaxis:

     

    variable "openstack_user_name" {
        description = "The username for the Tenant."
        default  = "your-openstack-user"
    }
    
    variable "openstack_tenant_name" {
        description = "The name of the Tenant."
        default  = "your-openstack-project"
    }
    
    variable "openstack_password" {
        description = "The password for the Tenant."
        default  = "your-openstack-password"
    }
    
    variable "openstack_auth_url" {
        description = "The endpoint url to connect to OpenStack."
        default  = "http://openstack.di.ual.es:5000/v3"
    }
    
    variable "openstack_keypair" {
        description = "The keypair to be used."
        default  = "your-openstack-keypair-name"
    }



  • output.tf: Variables de salida.Sse usan para pasar valores a otros módulos o para mostrar en el CLI un resultado tras un despliegue con terraform apply.Se definen con bloques output y un identificador único. Normalmente, toman como valor una expresión (p.e. una IP generada para una instancia creada).

NOTA: Para evitar introducir datos sensibles en los archivos de configuración y evitar que queden expuestos en el sistema de control de versiones es buena práctica configurar valores sensibles en variables de entorno.

El convenio de Terraform es que definamos en la shell las variables precedidas de TF_VAR_. Por ejemplo, definimos una variable de entorno TF_VAR_PASSWORD que será accedida por Terraform como PASSWORD.

Seguiremos estos pasos:

  1. Configurar la variables en la shell

    $ export TF_VAR_PASSWORD=xxxx
  2. Cargar la variable en Terraform en el archivo variables.tf

    ...
    variable "PASSWORD" {} 
    ...
      La variable de entorno TF_VAR_PASSWORD es reconocida en Terraform como PASSWORD
  3. Usar la variable en Terraform en el el archivo providers.tf

    provider "openstack" {
      user_name   = var.openstack_user_name
      tenant_name = var.openstack_tenant_name
      password    = var.PASSWORD 
      auth_url    = var.openstack_auth_url
    }

Idenpotencia

Una característica muy interesante de Terraform es la idempotencia, así como la facilidad para aplicar cambios. Si volvemos a ejecutar un despliegue con terraform apply y no ha habido cambios en los archivos de configuración tras el último despliegue (cuyo estado quedó almacenado en el archivo .tfstate), el despliegue quedará intacto. Es decir, no se volverá a crear infraestructura repetida ni se reemplazará la infraestructura creada por una nueva si no hay cambios en los archivos de configuración.

Sin embargo, si modificamos la configuración modificando los archivos Terraform estaremos indicando un nuevo estado al que queremos llegar. En este caso, al aplicar terraform apply sí se desplegarán los cambios realizados en la configuración. Sin embargo, sólo se desplegarán los cambios, manteniendo intacta la configuración no modificada.

Estos son los pasos que se deben seguir para construir, mantener y eliminar una infraestructura con Terraform.

  1. Inicializar el directorio del proyecto Terraform (terraform init). El comando descarga todos los componentes necesarios, incluyendo módulos y plugins.

  2. Crear un plan de ejecución (terraform plan). El comando determina las acciones necesarias para alcanzar el estado deseado especificado en los archivos de configuración.

  3. Crear o modificar la infraestructura (terraform apply). Terraform es idempotente. Al usar este comando sólo se ejecutan los cambios que se hayan realizado en los archivos de configuración sin volver a crear lo que ya existe y no se ha modificado. Para esto se utilizan los archivos de estado.

  4. Mostrar las variables de salida de un despliegue (terraform output).

  5. Eliminar la infraestructura (terraform destroy). Se usa para eliminar la infraestructura creada.

Como lanzar terraform

Dentro de cada carpeta de ejemplos ejecuta:

$ terraform init
$ terraform apply

Tras unos instantes se mostrarán las IPs asignadas a las máquinas virtuales creadas y aprovisionadas.

El comandoterraform init  creará una carpeta .terraform con en plugin de OpenStack instalado y disponible para ser usado en el proyecto.

 

Ejemplos  para probar   todo esto que hemos visto  tanto en Open Stack como Google Cloud Platform se pueden encontar en  https://github.com/ualmtorres/terraform-examples

 

 

Portátiles y otros productos a buen precio en los días de Amazon Prime


Desde  hoy  Amazon ha comenzado su semana del Black Friday y  lo ha hecho rebajando una selección de sus dispositivos de marca  propia  como son famoso libro electrónico Kindle , sus altavoces con el Alexa integrado, su tableta Fire  y su famoso pincho Amazon Fire  Stick  con rebajas que llegan al 50%  de su precio normal . Así, vamos a encontrar sus tablets como el Fire 7 y Fire 8 HD, algunos de sus altavoces inteligentes Echo y los Kindle y Kindle Paperwhite a precios muy atractivos que sin duda nos harán pensar en adquirirlos sin aun no contábamos con ellos .Además  hay muchos mas productos electrónicos interesantes  donde sin duda destacan los chromebooks  y los utraportatiles

 

 

Actualmente, los portátiles orientados a tareas informáticas de trabajo, estudio y ocio, están siendo desbancados  por los  netbooks  (ChromeBooks), pues claramente los fabricantes se ahorran el  costo de la licencia de Windows 10  y por tanto son mucho mas económicos porque además  requieren muchos menos recursos.  Afortunadamente aun podemos encontrar  ordenadores con licencia de win10  ideales para trabajo mas potentes como  edicion de  documentos offline, retoque fotografico , multimedia, etc   y un claro ejemplo de ello, son los modelos que conforman la serie Notebook 14s, fabricados por el gigante americano Hewlett- Packard.

Con esto en mente,  aprovechando Amazon  prime  day  y solo por unas horas ( estas ofertas terminan el miércoles día 14 ) nos   encontraremos   con el HP 14s-dq1040ns, un modelo de 14’’ de reducido precio ( esta rebajado 100€) , ideal para quienes trabajan a diario  con aplicaciones ofimáticas  o multimedia  gracias al chipset de 10ª generación, Intel Core i3-1005G1, alimentado a su vez por 2 núcleos reales operando a 3.40 GHz, una caché de tipo L3 de 4 MB y 4 núcleos virtuales, con  la tecnología HyperThreading.

El conjunto además  se complementa con una memoria RAM de 8 GB del tipo SDRAM DDR4-2666  ,ocupando una de las ranuras DDR4 del equipo ampliable con la inclusion de otras  memoria de 4 GB para aumentar la capacidad de serie a unos 12 GB. Y para el almacenamiento, se apuesta por un disco SSD de  256 GB, que reduce drásticamente los tiempos de arranque del sistema operativo y los programas instalados en dicha unidad.  Además  si necesita más espacio, no tiene más que utilizar la ranura SD, compatible con tarjetas de múltiples formatos, o bien optar por unidades externas.

Respecto a la conectividad, este  este ordenador cuenta con  una entrada USB-C reversible y otros 2 puertos de tipo USB 3.1, una salida de vídeo HDMI 1.4b, un lector SD, un conector de audio (combo) y una webcam HD con micrófono digital. No cuenta con el típico puerto RJ-45 ( ni lector de DVD )  pero si disponemos de tecnología Wi-Fi 4 -operando a 2.4 GHz-, y conexión Bluetooth 4.2.

 

Con este ordenador no debería tener problemas de movilidad   pues su batería soportara  hasta 10 horas y 15 minutos ,  su peso no llega siquiera a los 2 kg (1,46 kg) y su perfil no excede los 17 mm de grosor. 

El excelente nivel de detalle que provee este portátil, corre por cuenta de un diagonal LED de 14 pulgadas de bisel delgado, equipado con una resolución Full HD y una superficie antirreflejos para favorecer el trabajo incluso en espacios al aire libre.

En este cuadro  podemos  ver las especificaciones completas

Hardware

Número de producto 1C4G4EA
Nombre del producto HP Notebook 14s-dq1040ns
Microprocesador Intel® Core™ i3-1005G1 (frecuencia base de 1,2 GHz, hasta 3,4 GHz con tecnología Intel® Turbo Boost, 4 MB de caché L3, 2 núcleos)
Chipset Intel® SoC integrado
Memoria, estándar SDRAM DDR4-2666 de 8 GB (1 x 8 GB)
Gráficos de vídeo Gráficos Intel® UHD
Disco duro SSD de 256 GB PCIe® NVMe™ M.2
Unidad óptica Unidad óptica no incluida
Pantalla Monitor Full HD de 14″ (35,56 cm) en diagonal
Conectividad inalámbrica Combo de Realtek RTL8821CE 802.11b/g/n (1 x 1) y Bluetooth® 4.2
Ranuras de expansión Lector de tarjetas SD multiformato HP
Puertos externos 1 USB 3.1 Gen 1 Type-C™ (solo transferencia de datos, velocidad de señalización 5 Gb/s); 2 USB 3.1 Gen 1 Tipo A (solo transferencia de datos); 1 Smart Pin CA; 1 HDMI 1.4b; 1 combo de auriculares/micrófono
Dimensiones mínimas (P x A x L) 32,4 x 22,5 x 1,79 cm
Peso 1.46 kg
Tipo de fuente de alimentación Adaptador de alimentación Smart AC de 45 W
Tipo de batería Batería de ion-litio de 3 celdas 41 Wh
Duración de la batería en uso mixto Hasta 10 horas y 15 minutos
Duración de la batería durante la reproducción de vídeo Hasta 8 horas y 30 minutos
Cámara Cámara HD HP TrueVision con micrófono digital de matriz doble integrado
Características de audio Altavoces dobles

Software

Sistema operativo Windows 10 Home en modo S
HP apps HP 3D DriveGuard; HP CoolSense; HP JumpStart; HP Support Assistant
Software incluido McAfee LiveSafe™
Software preinstalado Netflix
Software: Productividad y finanzas 1 mes de prueba para los nuevos clientes de Microsoft 365

Además, sus compradores recientes dan cuenta de lo eficiente que es su procesador Core i3 al correr las aplicaciones de uso cotidiano, la nítida resolución que entrega su pantalla Full HD y lo manejable que es su diseño ultracompacto de 1,46 kg.

Si le interesa este portatil  aqui puede encontrar mas información.

 

Echo Dot 3ª generación a 20€

Continuemos  con   uno de los  dispositivos más baratos  dentro del ecosistema de Amazon  consistente en  un dispositivo  cuya  funcionalidad es de lo más interesante ,pues es capaz de convertir cualquier sistema de  sonido  en un altavoz inteligente con Alexa  gracias  a una conexión bluetooth   o   directa  por cable estéreo con un jack de 3.5mm

Amazon en efecto  nos propone su altavoz inteligente de tercera generación   donde en efecto tenemos  el asistente Alexa  con un amplificador  y  un  altavoz  ya incorporado  .  La  rebaja es muy sustancial pues su precio normal es de 59.99€ por lo que   la rebaja es  del 67 %   , lo   cual es claramente muy ventajoso , pero con un pequeño “pero” pues oiremos el sonido en monoaural  a no ser que compremos  otro vinculándolo al  primero consiguiendo así un sonido estereofónico   . También puede  usar Drop In para conectar con otras habitaciones de su hogar en las que tenga otro  dispositivo Echo compatible.

Para lso aficionados al audio ,  a pesar de llevar un solo altavoz  también incluye una salida de audio de 3,5 mm para uso con altavoces externos (cable de audio no incluido en la caja)  así que  tenemos el altavoz , el amplificador  y la fuente de señal   lo cual lo hace realmente versátil ..

La configuración   del Echo  Dot se hace  a través de  la app de  Alexa en 3 sencillos pasos . Además  también podemos añadir  nuevas funcionalidades  gracia  a los skills que son  también muy sencillos de instalar

 

 Como otros  modelos,  permite controlar la música con la voz: reproduce en streaming canciones en Amazon Music, Spotify, TuneIn y otros servicios.  También   al tener integrado la conexión con Alexa permite pedir que reproduzca música, responda a preguntas, narra las noticias, consulte la previsión del tiempo, configure alarmas, controle dispositivos de Hogar digital compatibles y mucho más.   

En cuanto a comunicaciones permite  llamar o enviar mensajes a cualquiera que tenga un dispositivo Echo, la app Alexa o Skype sin mover un dedo. Asimismo : gracias a los cientos de Skills, Alexa aprende y añade nuevas funciones y formas de realizar tareas continuamente, como ayudar en la cocina o jugar, entre otras.

Por último   también permite controlar sus dispositivos de Hogar digital con la voz encendiendo las luces, regulando  los termostatos, cerrando las puertas con llave y mucho más con dispositivos de Hogar digital compatibles

Y por cierto  como en otros modelos , también han tenido en cuenta la privacidad   añadiendo  un botón que desconecta los micrófonos electrónicamente, aunque  ya sabemos que ha sido comprometida  en EEUU  con varios caso de escuchas por parte de empleados de Amazon o de la policía.

Este modelo es el altavoz más compacto, sencillo y barato de Amazon, que esta vez desciende a un precio nunca visto: de su PVP de 59,99 euros a 20 euros, disponible en tres colores. 

Ojo  porque las llamadas y mensajes a través de Bluetooth no son compatibles.

 

Echo Show 5  a 45€

Estamos  ante otro altavoz ,pero esta vez con pantalla  y  que vuelve a bajar de precio pues de los 89,99 euros oficiales ( a veces rebajados a 74,99 euros ) esta semana Amazon ofrece un descuento del 44% quedando en   44,99 euros.  (es decir le mismo descuento que ofrecia en la campaña anterior)

El Echo Show cuenta con una pantalla de 5″, lo que abre las puertas a interaccionar con él no solo mediante la voz, sino también a realizar videoconferencias.

Como el resto de dispositivos inteligentes  del ecosistema Echo , permite controlar sus dispositivos de Hogar digital con la voz o con la práctica pantalla dispositivos compatibles ( por ejemplo podemos pedirle  a Alexa que le muestre el vídeo de las cámaras de seguridad, que controle las luces y que regule los termostatos) .

En el Echo Show 5 puede desactivar los micrófonos y la cámara con solo pulsar un botón, o puede deslizar la cubierta integrada para tapar la cámara. También se tiene el control sobre sus grabaciones de voz: puede revisarlas, escucharlas o eliminarlas en cualquier momento.

Como valor añadido permite videollamadas para estar en contacto: conecte por videollamada usando solo la voz con otros dispositivos Echo con pantalla, la app Alexa o Skype ( o  con otros dispositivos Echo compatibles de su hogar)

Por cierto permite personalízaciones  seleccionando la esfera de reloj que mejor se adapte a su estilo por ejemplo usado sus fotos favoritas como fondo de la pantalla de Inicio. 

 

Kindle  

Por último  estamos ante los  dispositivos mas demandados del ecosistema de Amazon y por tanto los que menos descuentos suelen  disfrutar incluso en el Black friday .El modelo más popular del Kindle, cuyo precio habitual es de 89,99 euros, baja por tanto  a 59,99 euros,   con una  rebaja  del 33%. Y por cierto, los miembros Prime tienen acceso a cientos de libros gratuitos.

Este erader está diseñado para la lectura disponiendo  de una pantalla de 167 ppp y alto contraste en la que se lee como en papel impreso, sin ningún reflejo, incluso bajo la luz del sol permitiendo leer sin distracciones permitiendo incluso subrayar pasajes, buscar definiciones, traducir palabras o ajustar el tamaño del texto( y todo ello sin abandonar la página que está leyendo.

Respecto a la version premium de erader, eKindle Paperwhite baja de 129,99 euros baja a 94,99 euros , es decir cuanta con una rebaja del 27 %  siendo este precio el más bajo desde su lanzamiento tratándose  del modelo de 8GB de capacidad con anuncios (existe también una version con 32 GB de almacenamiento con un descuento  menor del 22% respecto a su precio normal)  .

El Kindle Paperwhite es el modelo más ligero y fino hasta la fecha: pantalla de 300 ppp sin reflejos que se lee como en papel impreso, incluso bajo la luz del sol y  ahora es resistente al agua (IPX8), para que pueda usarlo tranquilamente en la playa, en la piscina o en la bañera.Este modelo  ofrece una relación calidad precio muy alta respecto a sus competidores  gracias a la calidad de su pantalla, su autonomía y la resistencia al agua.

 

Amazon Smart Plug

Y para terminar   hablamos del  Amazon Smart Plug , un enchufe   inteligente  que funciona con Alexa y que permite controlar cualquier toma de corriente con la voz y que si lo compremos con otros dispositivos( por ejemplo altavoz inteligente de tercera generación  )  sólo  nos costara 10€.

Con este dispositivo podemos programar el encendido y apagado automático de luces, cafeteras y cualquier otro dispositivo, o contrólarlos de manera remota cuando estémos fuera de casa.

Como es habitual en otros dispositivos de Amazon , es fácil de configurar e instalar  mediante  la app Alexa: no se necesita ningún controlador de Hogar digital pues con Alexa se puede  definir las rutinas y los programas con la app Alexa  gracias a la conectividad wifi

Por cierto si ya dispone de un altavoz inteligente    nos respetaran  el precio solo en estos días: tan solo  bastara decirle  al altavoz “Alexa   compra un Amazon Smart Plug

Controlar un potenciometro con Arduino Iot Cloud


En este post vamos avanzar en las posibilidades de la placa MKR1000 (o MKR 1010) a la nube de Arduino IoT  de modo que podremos hacer cosas mas complejas mas allá de encender o apagar un led  a distancia ( como vimos en este post ). En esta ocasión como ejemplo de la gran potencia de de esta solución  vamos a   leer en remoto las posición de un potenciometro  a través de Internet utilizando el sitio web de Arduino IoT Cloud.

Si le  interesa  como hacerlo, vera que es muy sencillo,  pues como vamos a ver  casi todo esta hecho, pero antes, volvamos a  ver  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.

 

 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€

Agregar un potenciómetro 

Ahora que tenemos confirmación de todo lo que funciona ( como vimos en este post ), podemos agregar nuevas propiedades a nuestra Cosa. Vincularemos la nueva propiedad a un potenciómetro que necesita ser añadido al circuito. El potenciómetro está conectado a la alimentación y a tierra a través de sus respectivos pines y el pin de señal está conectado al Pin analógico A1 de la placa Arduino.

Adding an analog sensor to our breadboard

Para agregar una nueva propiedad vamos a proceder como lo hicimos anteriormente: mientras que en nuestra vista de propiedades de Thing, hagamos clic en el botón + y cree una propiedad denominada .

Establezca el tipo en Int con valor mínimo y valor máximo establecido en 0 y 270 respectivamente.

El permiso debe establecerse en Solo lectura y la propiedad debe actualizarse cuando cambie el valor;

Asimismo podemos establecer un valor Delta mayor que cero si queremos introducir alguna tolerancia para la actualización (por ejemplo: si establecemos Delta en 5, el valor de propiedad se actualizará a través de la nube solo cuando la diferencia entre el nuevo valor y el valor antiguo sea mayor que 5, de lo contrario se omitirá el cambio).

Al hacer clic en CREATE, se agregará la nueva propiedad a nuestra cosa y nos traerá de vuelta a la vista de edición de la propiedad.

Aunque no lo vemos, nuestro boceto se ha actualizado para reflejar los cambios, así que hagamos clic en EDIT CODE para volver al editor.

Mirando thingProperties.h, nos daremos cuenta de que se han añadido dos nuevas líneas:

int angle;

Esta linea declara la variable que representa la propiedad que acabamos de crear

ArduinoCloud.addProperty(angle, READ, ON_CHANGE, NULL, 5.000000);

Este código conecta la variable a su propiedad correspondiente, con permisos READ (es decir: no vamos a poder establecerla desde el panel). Debido al permiso de solo lectura, no se generará ninguna función de devolución de llamada y el penúltimo argumento del método se establece en . El último argumento representa el valor Delta descrito anteriormente.

Para hacer que el potenciómetro interactúe con la nube necesitamos definir el pin al que está conectado:

#define POTENTIOMETER_PIN A1

Luego, en la función, leemos la entrada analógica del potenciómetro y la mapeamos a la variable. De este modo, al girar el potenciómetro se refleja, se cambia el valor de propiedad correspondiente en el panel de la nube.

int angleSensor = analogRead(POTENTIOMETER_PIN);
angle = map(angleSensor, 0, 1023, 0, 270);

Vamos a subir nuestro boceto de nuevo y ver lo que sucede en el tablero de nuestra cosa cuando giramos la perilla del potenciómetro. Deberíamos ver el valor subiendo y bajando de 0 a 270 (esto puede variar con la calidad de construcción del potenciómetro).

Por último, vamos a agregar una última propiedad.  Esta nueva propiedad se asociará a un botón pulsador agregado al circuito anterior como se muestra en los esquemas siguientes: un pin del botón está conectado al riel de alimentación positivo (Vcc), el otro pin está conectado al pin digital 5 (a través del cable blanco) y a tierra a través de una resistencia desplegable de 10k.

Esta configuración fuerza un nivel lógico LOW en nuestro pin cuando el botón está en reposo, mientras que rutea Vcc a través cuando se presiona (nivel lógico HIGH).

Desde el editor, vaya a IOT CLOUD y cree una nueva propiedad denominada , con Tipo ON/OFF (Boolean),Solo lectura de permisos y Actualizar cuando cambie el valor. toggle

Una vez más EDIT CODE y volveremos al editor. Un vistazo rápido a thingProperties.h mostrará que una nueva variable se ha definido y asociado a su propiedad a través de .ToggleArduinoCloud.addProperty(...)

En nuestro archivo .ino definiremos el nuevo pin y dos variables relacionadas con el estado del botón : es decir el estad actual ( btnState) y el estado anterior(btnPrevState) .btnPrevState es necesario porque queremos que la propiedad se actualice solo una vez cuando se presiona el botón y no cuando se libera.

#define BUTTON_PIN 5
int btnState;
int btnPrevState = 0;

Entonces,es importante destacar   la linea que establece como entrada  este pin para

pinMode(BUTTON_PIN, INPUT);

Y finalmente añadimos estas líneas hacia el final de la loop()

btnState = digitalRead(BUTTON_PIN);
if (btnPrevState == 0 && btnState == 1) {
 toggle = !toggle;
}
btnPrevState = btnState;

Con este sencillo código  el botón actúa como un interruptor y al presionarlo debemos ver el interruptor en la nube cambiando en consecuencia alternando  entre ON y OFF.

En este código hay un pequeño problema  pues como puede adivinar no hay gestión de los rebotes (debounce en ingles  )  , es decir la cantidad de ruido ocurrido tras el flanco cuando actuamos sobre el pulsador(en esencia, en el rango de unos microsegundos la señal es puro ruido) . Todos esos picos pueden provocar disparos múltiples de una interrupción. Disponemos de dos formas de aplicar el rebote :añadiendo dispositivos electrónicos que filtren la señal o modificando nuestro código para eliminar el rebote 

 Vamos a ir más allá y simplificar nuestro código de administración de botones usando una biblioteca adicional.

 Usar una biblioteca de anti-rebotes

El código que hemos visto se basa en variables temporales porque necesitábamos almacenar el estado anterior del botón, lo que no hace que el boceto sea sencillo de implementar  , pero  la cosa se complica con los efectos de los rebotes  o la necesidad  de utilizar varios botones ( que añadiría muchas variables).

Una solución fácil es utilizar una biblioteca de rebote,y vamos a confiar en FTDebouncer que se puede instalar a través del Administrador de bibliotecas.

Simplemente vamos a Bibliotecas desde el menú de la barra lateral, ingresamos “FTDebouncer” en el campo de búsqueda en la parte superior y presionamos Intro: aparecerá la biblioteca y podemos añadirla a nuestro boceto pulsando el botón INCLUIR.

Esto agregará la siguiente línea a la pestaña seleccionada actualmente

#include <FTDebouncer.h>

Antes de esto podemos  reemplazar la definición de variables relacionadas con el estado del botónsetup()

int btnState;
int btnPrevState = 0;

con la declaración de una variableFTDebouncer

FTDebouncer buttons;

a continuación, reemplazar la línea donde inicializamos el pin del botón

pinMode(BUTTON_PIN, INPUT);

con las siguientes dos líneas

buttons.addPin(BUTTON_PIN, LOW);
buttons.init();

Al principio le podemos a añadimos este comando antes de loop()

buttons.update();

y eliminar todo el código escrito previamente relacionado con el botón

btnState = digitalRead(BUTTON_PIN);
if (btnPrevState == 0 && btnState == 1) {
    toggle = !toggle;
}
btnPrevState = btnState;

Finalmente, al final del boceto vamos a añadir una función

void onPinActivated(uint8_t pinNr){
	Serial.println(pinNr);
	toggle = !toggle;
}
void onPinDeactivated(uint8_t pinNr){
	Serial.println(pinNr);
}

Gracias a la biblioteca, se llamará a la función (sólo una vez) cuando se pulse el botón. Cuando esto suceda, le diremos a nuestra propiedad que cambie a su valor opuesto. Si es cierto, se volverá falso y viceversa. Esta acción la realiza el operador “!”,también conocido como LogicalNOToperator.FTDebounceronPinActivated()toggle

Si queremos que se ejecute algún código cuando se suelte el botón, la biblioteca llamará a la siguiente función cuando eso suceda.