Interceptar Amazon Dash Button para otras aplicaciones


Amazon  lleva mas  un año enviando sus famosos  botones Dash , los cuales se pueden transformar en exactamente eso con sólo unos minutos, es   decir que un pequeño dispositivo permita con el simple hecho de darle un botón , desencadenar una  compra predefinida al famoso portal de compra…   pero, obviamente , estos botones  inteligentes están abiertos   a otras posibilidades  sin duda infinitas y que vamos a intentar explorar en este post

Los  famosos Amazon Dash  son  botones pequeños, de plástico  y de un coste ínfimo (  5€) ,pero ademas incluyen  una batería y una conexión WiFi en su interior . Amazon quiere que usted los pegue en el interior de sus puertas y los utilice  para  comprar productos de uso cotidiano  como pueden ser los pañales, té , café,  productos de limpieza   y un largo etcétera.

nescafe.jpg

Existe  una  manera   mas fácil   de darle otros usos a  cualquier botón  Amazon Dash si quiere usar SmartThings para  otras cosas útiles.

Ejemplos de usos:

  • Presionar el botón Dash y encender las luces. (Luces del dormitorio, luces de la sala de estar, todas las luces o lo que sea).
  • Presionar el botón Dash y encender el televisor, cambia a una entrada de TV y abrir Netflix.
  • Presionar el botón Dash y abrir la puerta de la puerta / garaje.
  • Presionar el botón Dash  y abrir una aplicación de cámara en el teléfono e incluso encender la TV y proyectar la cámara al televisor.
  • Presione el botón Dash y abrir una aplicación  en el ordenar que  realice alguna acción.
  • !En resumen: posibilidades ilimitadas!

Entender cómo funciona el registro del botón.

Nuestro objetivo es detectar cuando uno de estos botones Dash se   pulsa  y luego hacer algo más que ordenar  cosas en Amazon. El hack impresionante sería abrir el botón y re-programarlo  ( de hecho esto ya se puede hacer  reprogramando el STM32  que incluye )   pero  vamos a seguir  una  ruta muchísimo mas fácil:  sólo vamos a usar  un programa que rastrea nuestra red wifi para buscar  la evidencia de que el botón fue pulsado  , luego registrar un punto de datos cuando escucha estos y una vez detectado desencadenar una acción .

Resulta que Amazon nos dio una manera muy fácil de hacer esto porque estaban tan preocupados con el ahorro de energía , pues estos  botones  se desactivan la mayor parte del tiempo para conservar la batería dentro y sólo se encienden cuando son pulsados, lo cual significa que tienen que volver a conectarse a su red Wifi cada vez que son pulsados ( y eso  es fácil de detectar).

Los dispositivos de Internet no solo se conectan a una red Wifi y empiezan a hablar con Amazon: se presentan primero a la red local . Esta introducción se hace con algo llamado una sonda ARP , y es esencialmente una comprobación de seguridad para asegurarse de que la dirección MAC que el dispositivo va a utilizar como identificador ya no está siendo utilizada por otra persona.

Cada vez que pulsa un botón Dash, se vuelve a conectar a la red, causando una transmisión predecible  de llamada una sonda ARP que podemos detectar y actuar.

Eso es una gran noticia para nosotros: cada vez que se pulsa un botón Dash, se enciende su radio y transmite rápidamente el mensaje, “Hola! Mi nombre es [Dirección MAC]! “

Así, que conceptualmente, el problema esta resuelto pues sólo tenemos que:

  1. Evitar que el botón realice cualquier pedido
  2. Escuche las sondas ARP del botón Dash
  3. Traducir esas sondas a llamadas   cualquier cosa que se nos  ocurra

Paso 1: Configurar la red wifi en el botón

Para   usar el botón ,primero  debe registrar el Botón básicamente para configurar la red wifi a la que se conectará .  Lo que no queremos es asignar el botón para pedir algo , por lo en lugar de asignar algún producto , antes de finalizar la vinculación simplemente  no haremos nada  !pero el botón de tablero todavía seguirá registrado! , así  que lo sucede a continuación es que cuando presione el botón del tablero, recibirá una notificación  en las versiones antiguas  que dice “Su (inserte el nombre del botón del tablero) está casi listo para usar … bla, bla, bla”.

Pasos del botón Dash (Nuevo botón Dash):

  1. Abra la aplicación Amazon Shopping y vaya a su cuenta.
  2. Vaya a Configurar un nuevo botón de tablero y haga clic en Aceptar y comenzar para comenzar.
  3. Mantenga presionado el Botón de tablero por 6 segundos hasta que la luz destelle en azul y haga clic en Conectar. (Asegúrate de que Bluetooth esté habilitado)
  4. Haga clic en la red Wi-Fi a la que desea conectar el botón del tablero y haga clic en Continuar.
  5. El botón de tablero ahora está registrado. No haga nada todavía.
  6. Donde dice Elija un producto simplemente salga (no queremos pedir nada) haciendo clic en la X en la esquina superior derecha.
  7. Hemos terminado con la configuración del botón del tablero.

Pasos del botón de tablero (dispositivo antiguo):

  1. Abra la aplicación Amazon Shopping y vaya a su cuenta.
  2. Diríjase al botón del tablero con el que tiene programada la configuración y haga clic en Desactivar este botón del tablero. Aparecerá una ventana emergente preguntándole si está seguro. Decir que sí.
  3. Ahora vaya a Configurar un nuevo botón de tablero y haga clic en Aceptar y comenzar para comenzar.
  4. Mantenga presionado el Botón de tablero por 6 segundos hasta que la luz destelle en azul y haga clic en Conectar. (Asegúrate de que Bluetooth esté habilitado)
  5. Haga clic en la red Wi-Fi a la que desea conectar el botón del tablero y haga clic en Continuar.
  6. El botón de tablero ahora está registrado. No haga nada todavía.
  7. Donde dice Elija un producto simplemente salga (no queremos pedir nada) haciendo clic en la X en la esquina superior derecha.
  8. Hemos terminado con la configuración del botón del tablero.

Nota: Puede activar y desactivar la notificación de Amazon Shopping para cada dispositivo que desee habilitar o deshabilitar en caso de que se moleste. Esto se puede hacer abriendo la aplicación Amazon Shopping en cada dispositivo individual y deshabilitando o habilitando “Alexa Shopping & Dash Updates”. Habilite en el dispositivo que planea hacer esta guía de configuración. Deshabilite en todos los dispositivos en los que no planea usar esta configuración. Naranja = Activado.

Paso 2: Captura  de la IP del botón

Una forma fácil de encontrar su ID del botón de pantalla es usar Wireshark (https://www.wireshark.org/#download), que se puede  obtener  mediante una descarga gratuita para Mac / Win.

Una vez  descargada  e instalada la aplicación  podemos lanzar Wireshark, estableciendo el filtro para capturar paquetes en “arp“, seleccionando  el modo wifi para la red y haciendo clic en el icono de Blue Shark para habilitar el filtro al capturar paquetes.

wireshar.png

A continuación, verá una ventana como la siguiente: haga clic en el ícono de Green Shark para comenzar a capturar paquetes, presione el botón de Amazon Dash.

Verá una línea en el parte superior que tiene “AmazonTe …” en la fuente Colunm.

amazonte.png

Selecciónelo y en el panel a continuación, verá la dirección MAC del botón Amazon Dash en parantesis, junto a AmazonTe _… Src, como se muestra a continuación.

mac.png

Realmente la dirección MAC es importante  para algunas aplicaciones,   pero realmente lo que nos va a importar  para capturar la petición,   es la dirección ip  del botón obtenida en la pantalla  anterior   , ( en  nuestro caso : 192.168.1.32)

Alternativamente, puede seguir las instrucciones de node-dash-button para encontrar su id del botón de pantalla.

Nota :   Un pedido real se marca  controlando la luz en el botón Dash para que se vuelva verde. Actualmente se vuelve blanco cuando se transmite una solicitud DHCP o paquete ARP y luego se vuelve rojo cuando no recibe una respuesta de Amazon, así que  cuando usa un botón Dash de la manera normal, la luz se vuelve verde después de que Amazon haya realizado su pedido, pero si eso No es  lo que pretende,  todavía  puede ir a la app( o en la web)  para cancelar el pedido

Paso 3 :  Utilización  sobre windows

Existen scripts en python que pueden ejecutarse  en una raspberry Pi  para  escuchar las peticiones  en la red wifi  de modo que cuando detecten  la ip de nuestro botón desencadenen un acción.
Para  windows existe una  interesante  utilidad que busca cualquier llamada a la IP de nuestro botón  y desencadene la ejecución de un comando o aplicación.

Descargue el sw de aquí: https://github.com/fiveseven808/AmazonDashButtonHack

Una vez descomprimido  tendremos al menos dos ejecutables:

amanzonbut

En versiones  antiguas del botón era posible el auto-descubrimiento  de la ip del botón ( es decir obviar el paso comentado  nº 2),   por  lo que  los pasos  serian los siguientes :

  • Ejecutar  “AmazonButton_Discovery_160715 _ ****. Exe” para comenzar a buscar botones.
  • Pulsamos clic en “Aceptar” en el aviso y comenzariamos  a presionar el botón que desea emparejar repetidamente.
  • Si no se encuentran dispositivos de Amazon, intente de nuevo, pero comience a presionar el botón tan pronto como haga doble clic en el archivo EXE.
  • Si se encuentran más de un dispositivo de Amazon, tendrá que ir y averiguar qué IP corresponde con su botón por su cuenta.
  • Finalmente elija un programa que desea ejecutar cuando se presiona el botón
  • Ingrese un comentario para el daemon, lo cual  identificará el daemon particular que corresponde con el botón en particular.

 

Como el proceso anterior  no es mas eficaz , si ya conoce la IP de su botón( descrito en el paso 2 )  siga los siguientes  pasos:

  • Haga doble clic en AmazonButton_v4.0.exe .
  • Ingrese la IP conocida / reservada de su botón Dash ( en nuestro caso 192.168.1.36)
  • Elija un programa que desea ejecutar cuando se presiona el botón . Por ejemplo puede asociar un fichero mp3  de modo que cuando pulsemos el botón  comience  a reproducirse el tema
  • Ingrese un comentario para el daemon, lo cual identificará el daemon particular que corresponde con el botón en particular.

También permite argumentos vía  parámetros   por  línea de comando por ejemplo para automatizar el arranque de este proceso en el inicio del ordenador :

AmazonButton_v4.0.exe [IP del botón] [Programa para iniciar] “[Comentario opcional]”

Es interesante saber   que incluso se puede repetir  estas llamadas según sea necesario para cualquier otro botón.

NOTA :  Hay informes de que el nuevo botón JK29LP pierde su configuración de Wifi si la desasocia con su cuenta de Amazon. La “solución alternativa” actual es utilizar una cuenta ficticia de Amazon para configurar su botón con su teléfono y luego volver a iniciar sesión en su propia cuenta para que pueda seguir usando la aplicación.

Anuncios

APIs para IoT


Las API están estrechamente vinculadas con el IoT porque le permiten exponer con seguridad los dispositivos conectados a los clientes, canales «Go-to-Market» y otras aplicaciones de su infraestructura informática. Las API conectan «cosas» importantes, como son los coches, dispositivos médicos, redes inteligentes y termostatos, con su ecosistema. .

Veamos algunas de las APIS de Iot mas representativos:

 

 

    ThingSpeak API

ThingSpeak es un plataforma de  IoT que permite recoger y almacenar datos de sensores en la nube y desarrollar aplicaciones IoT ofreciendo tambien aplicaciones que permiten analizar y visualizar sus 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.

Thingspeak está en colaboración con Mathworksque es la empresa de Matlab y Simulink entre otros.

La API de ThingSpeak le permite crear aplicaciones de “Internet de las cosas”. Utilizar la API para crear aplicaciones en la nube que interactúan con los sensores y controles de cualquier cosa que soporta el protocolo HTTP. La API de ThingSpeak es capaz de interactuar con dispositivos de Arduino y ioBridge, iPhone y Android dispositivos móviles, sistemas de automatización del hogar, robots, termostatos, controles industriales, etcetera. ThingSpeak también admite la integración con servicios web externos como Twitter, Prowl, Twilio, WeatherBug y Foursquare, mediante el uso de la aplicación de ThingHTTP. Además de la API alojada libre, la API de ThingSpeak es open source y está disponible en GitHub para su descarga en servidores privados.

thingpeak.png

La API de ThingSpeak siempre trabaja con datos, esa es su gran especialidad. Es una API abierta para el Internet de las Cosas que permite recopilar, almacenar, analizar, visualizar y actuar sobre la información recogida en sensores y dispositivos como aplicaciones web y móviles, redes sociales como Twitter, soluciones de mensajería, VoIP y nube como Twilio, hardware de código abierto como Arduino, Raspberry Pi o BeagleBone (los reyes del Internet de las Cosas y la robótica) o con lenguajes de cálculo computacional como MATLAB… ThingSpeak es una API conocida entre los desarrolladores y dispone ya de una gran comunidad.

ThingSpeak API funciona siempre con canales, los cuales contienen los campos de datos, ubicación y estado. Para empezar a trabajar con esta interfaz es necesario crear un canal, donde se recopilará la información de dispositivos y aplicaciones, datos que posteriormente se pueden analizar y visualizar en gráficos  y el paso final es operar sobre esa documentación. El proceso con la API siempre es el mismo.

Al final, la ruta del proyecto con la API será parecida a lo siguiente, sustituyendo los campos CHANNEL_ID y FIELD_ID por los datos del canal recién abierto.

http://api.thingspeak.com/channels/CHANNEL_ID/charts/FIELD_ID

Un ejemplo del tipo de gráficos que se pueden crear fruto de la recogida, análisis y visualización con ThingSpeak son estas mediciones de temperatura:

Cosm.com

Pachube ha pasado de manos de forma alarmante : primero Pachube que se hizo famosa por monitorizar la radiactividad en Japon  , luego Xively.com   y ahora finalmente cosm ,com .

Esta veterana plataforma le permite almacenar, compartir y descubrir el sensor en tiempo real, datos de energía y medio ambiente de edificios u otros dispositivos. Pachube proporciona la mayor parte de su funcionalidad a través de su API, en lugar de a través de su sitio web. Complemento a los proyectos participantes en tiempo real para que, por ejemplo, edificios, entornos interactivos, contadores de energía en red, mundos virtuales y dispositivos móviles pueden hablar todos entre sí. Datos en tiempo real disponibles. Pachube hace uso de extendido entornos Markup lenguaje (EEML), que se extiende el protocolo de la industria de construcción IFC.

La API de Pachube permite almacenar, compartir y analizar en tiempo real los datos de energía o medioambientales recogidos por sensores en edificios y otros dispositivos. Toda la funcionalidad del sistema de Pachube viene dada por la API, que es la que facilita que la información generada por edificios, contadores de energía o dispositivos móviles con sensores sea recogida y analizada y que todos esos objetos estén conectados entre sí. Es el verdadero Internet de las Cosas.

La API de Pachube funciona en el entorno EEML (Extended Markup Language Environments), un protocolo para el intercambio de datos de sensores en ambientes a distancia, ya sean físicos o también virtuales (un ejemplo típico es la conexión con objetos de Second Life). Que exista un protocolo universal es lo que posibilita que las personas puedan compartir con la comunidad millones de datos en tiempo real de objetos, dispositivos o espacios de todo el mundo.

Los pasos a seguir para comenzar a trabajar con Pachube son bastante sencillos:

●       Agregar un dispositivo: el desarrollador da un nombre, una descripción y permisos de privacidad al dispositivo que quiere agregar y automáticamente se le asigna un ID y la clave de la API necesaria para conectar ese terminal.

●       Conectar el dispositivo: es necesario copiar el ID y la clave de la API en el código del objeto para establecer una relación bidireccional entre ambos. Se pueden conectar dispositivos, pero también apps o servicios. Para realizar esa conexión, aquí hay todo tipo de librerías para dispositivos Android, objetos programados en Java, C, Objective-C, Python, PHP, Ruby y JavaScript, y tutoriales para hardware abierto como Arduino o Raspberry Pi.

●       Prueba de funcionamiento: una vez agregado y conectado, el desarrollador puede empezar a ver valores de datos actualizados en tiempo real en su canal y depurar las alteraciones irregulares que vea en esa información.

 

 

Fitbit API

La API de Fitbit facilita a los desarrolladores el trabajo de interacción con los datos que son recogidos por cualquiera de los productos de Fitbit, ya sea una aplicación, un dispositivo o un servicio. Hoy en día, la API de Fitbit soporta la mayoría de lenguajes de lectura y escritura de información, pero ellos ofrecen una comunidad para desarrolladores donde es posible hacer sugerencias y evolucionar la API.

La API de Fitbit lo que permite en última instancia es que cualquier persona pueda desarrollar una aplicación para acceder y manipular datos recogidos por un dispositivo Fitbit, siempre y cuando cumpla dos requisitos obvios: deben ser datos relacionados con un usuario que sea él y no otra persona y cumplir con las condiciones de uso que establece la documentación de la propia API.

¿Cómo se puede empezar a probar y trabajar con la API de Fitbit?

●       Registro de la aplicación: el registro de la app permite obtener credenciales de cliente de la API. Para hacerlo es necesario disponer primero de una cuenta en el servicio de Fitbit (su apertura es totalmente gratuita).

●       El acceso a los datos de usuario se hace a través de autenticación OAuth. Las solicitudes a la API de Fitbit para leer y escribir datos de usuarios se hacen a través de este explorador de la API. Es posible también suscribirse a la API para tener la actualización de los datos en tiempo real

●       El desarrollador debe escoger alguna librería OAuth 2.0 que opere con el lenguaje de programación y marco de desarrollo utilizado para el flujo de datos. Sin esa librería no se puede crear el protocolo de autorización.

●       Las peticiones a la API necesitan de credenciales de usuario autorizado.

 

Futurista ambientador


Es  reconfortante tener una fragante casa floral de primavera para senirse como si estuviera en medio de un jardín de lavanda en lugar de una vivienda tradicional  donde probablemente viva, de heho eso es es que precisamente por esto, muchas de las diferentes empresas han creado para los amantes del aire  una multitud de aromas.

Hay muchos ambientadores en el mercado: desde los antiguos aerosoles manuales hasta los disparados por temporizador pero los últimos, aunque son automáticas, son bastante tontas pues seguirán rociando incluso si no estás cerca para  sentir el olor, desperdiciando esas recargas de fragancia no tan baratas.

¿No sería agradable si su refrescante de aire fuera capaz de comunicarse con otros dispositivos y disparar solo cuando realmente lo necesite ?

En este proyecto IgorF2 diseñó   un ambientador  conectado , usando algunas impresiones 3D, NodeMCU, IFTTT y Adafruit.IO.

!

¡Siempre tenga en cuenta que este es un prototipo experimental y podría usarse con precaución!

Paso 1: herramientas y materiales

Las siguientes herramientas y materiales fueron utilizados en este proyecto:

  • impresora 3d. En mi caso, utilicé Voolt3D, una impresora 3D basada en Grabber i3;
  • 1.75mm PLA de su color favorito;
  • Alambre de soldar. Tendrás que soldar algunos cables;
  • Destornillador. Lo necesitará para montar su caso;
  • Tornillos M2x6mm (x11) ;
  • Servomotor MG995
  • NodeMCU LoLin (- La versión NodeMCU LoLin tiene un pin UV, que está conectado al terminal USB 5V. De esta forma, es posible usar los 5 V de un cargador USB, pasando por la placa NodeMCU, para alimentar el servomotor. Otras versiones de NodeMCU no tienen este pin UV (tienen un pin reservado en su lugar). De esta forma, no podrá alimentar su servomotor directamente si usa una de esas otras versiones;
  • NeoPixel 16 x WS2812 5050 RGB LED
  • Botón pulsador de 12x12x12 mm
  • Cable MiniUSB , para la conexión entre NodeMCU y la computadora (para cargar el código);
  • Cargador USB 5V, 2A ( cargador de teléfono, por ejemplo) para alimentar el circuito;
  • 5 cables de puente hembra-hembra;
  • 3 cables de puente macho-hembra;
  • Recambio de aire fresco.

 

Paso 2: impresión en 3D

Imagen de impresión 3D

El modelo 3d se diseñó utilizando Fusion 360.

El modelo se compone de cinco partes diferentes:

  • Frente: cuerpo principal del gadget. Aquí es donde algunos de los componentes electrónicos (anillo LED y botón pulsador) y el servomotor se unirán;
  • Funda trasera: se usa para cerrar el cuerpo de la caja. Aquí es donde se instalarán NodeMCU y el recambio de renovación;
  • Botón : esta parte está conectada al botón;
  • Tapa: esta parte se enrosca en la parte posterior de la caja y permite reemplazar la recarga
  • Soporte: esta parte se utiliza para bloquear el anillo LED y el botón en su posición.

Puede descargar todos los archivos stl en https://www.thingiverse.com/thing:2613327

Este es un prototipo experimental. Tenga en cuenta que fue diseñado para un modelo determinado de recarga de renovación de aire (una Glade, cuyas dimensiones en milímetros puede encontrar en las imágenes). Si desea utilizar un modelo diferente, envíe un comentario y puedo ver si es posible cambiar las dimensiones del modelo para adaptarlo a sus necesidades.

Si no tiene una impresora 3D, aquí hay algunas cosas que puede hacer:

  • Pídale a un amigo que lo imprima para usted;
  • Encuentre un espacio para hackers / fabricantes cerca. Las piezas utilizadas en este modelo se pueden imprimir rápidamente (alrededor de 9 horas).Algunos espacios de hackers / fabricantes solo le cobrarán por los materiales utilizados;
  • ¡Improvisar! Puede intentar ensamblar una estructura sin partes impresas en 3D;

Paso 3: Explicación del circuito

Imagen del circuito explicado

Para este proyecto se utiliza  el modulo  NodeMCU LoLin para controlar el gadget. NodeMCU es una plataforma de código abierto IoT, que se ejecuta en un SoC Wi-Fi ESP8266 de Espressif Systems. Su hardware se basa en el módulo ESP-12.

La placa de desarrollo conecta una red Wi-Fi determinada y recibe algunos comandos de Adafruit.io plafrom. Un anillo NeoPixel se utiliza para la indicación del estado (si la conexión Wi-Fi fue exitosa, o si se recibió un comando dado, por ejemplo). El tablero de control también acciona un servomotor, que actuará en una recarga de renovación de aire. Un botón pulsador se usa para comandos locales.

Se utilizó un cargador USB de 5 V y 2 A para alimentar la placa de control y todos los periféricos. Es importante observar que cuando se activa el servo, se toma una corriente máxima considerable de la fuente de alimentación. De esta forma, no use el puerto USB de una computadora (o cualquier otro dispositivo) para alimentar su circuito. Podría reiniciarse o incluso dañarse.

Las figuras ilustran cómo se conectaron los componentes.

Paso 4: Prepare la electrónica

Imagen de Prepare the Electronics

Algunos de los componentes utilizados en este proyecto deben soldarse primero. En este paso, mostraré cómo se prepararon para una conexión más fácil de los componentes.

1. Terminales Solder NeoPixel

Los anillos NeoPixel generalmente vienen sin cables conectados a sus terminales. Esto significa que tuve que soldar algunos cables para la conexión de los LED al microcontrolador.

Para eso use tres puentes femeninos y femeninos. Corte un lado del puente y suelde sus cables en los terminales de anillo NeoPixel. El otro extremo de cada jumper estará con un terminal hembra, que se conectará más adelante en los pines NodeMCU.

  • Cable rojo = 5V
  • Cable negro = GND
  • Cable amarillo = entrada de datos

2. Terminales de botón de soldadura

Para conectar el botón pulsador al NodeMCU, primero tuve que soldar algunos cables de puente en dos terminales del botón.

Use dos jumpers femeninos y femeninos. Cortar un lado del jumper y suelde sus hilos al botón.

  • Cable verde = entrada de datos
  • Cable negro = GND

3. Servomotor MG995

Los servomotores generalmente tienen un terminal hembra de tres pines, pero desafortunadamente no se puede conectarse directamente al NodeMCU debido a la posición de los pines. Para conectar esos componentes usé un cable de puente macho-hembra.

Paso 5: Ensamblar los componentes

Imagen de Montar los Componentes

En este paso, veremos cómo ensamblar los componentes dentro de la estructura impresa en 3D. Si no desea imprimir el caso por algún motivo, puede saltar al siguiente paso y ver cómo está conectado el circuito.
Una vez que se imprime su estructura, ensamblar el circuito es bastante simple:

  1. Coloque el anillo de LED dentro de la caja frontal ;
  2. Coloque el botón impreso en 3D dentro del anillo;
  3. Coloque el botón pulsador en el medio del soporte impreso en 3D;
  4. Monte el soporte dentro de la caja frontal con cuatro pernos M2x6mm;
  5. Monte el servomotor dentro de la carcasa delantera con cuatro tornillos (los que generalmente vienen con el servo);
  6. Coloque la bocina del servo de acuerdo con la imagen y bloquee su posición con un perno. Cuando el servo está a 90 grados, la retención debe ser horizontal;
  7. Fije NodeMCU dentro de la caja trasera usando cuatro pernos M2x6mm;
  8. Inserte el relleno de renovación de aire dentro de la cámara;
  9. Thead la tapa, cerrando la cámara;
  10. Conecte el circuito (en el siguiente paso le mostraré cómo hacerlo);
  11. Cierre la caja con tres tornillos M2x6mm.

Después de eso, estará listo para subir el código.

Paso 6: Cableado del circuito

Imagen de Wire Up the Circuit

Una vez que los componentes se colocaron dentro de la caja, conecte los cables de acuerdo con los esquemas.

  • NeoPixel 5V (cable rojo) => NodeMcu 3V3
  • NeoPixel GND (cable negro) => NodeMcu GND
  • Entrada de datos NeoPixel (cable amarillo) => NodeMcu GPIO 15 (pin D8)
  • Botón pulsador 1 (cable verde) => NodeMcu GPIO 14 (pin D5)
  • Pulsador 2 (cable negro) => NodeMcu GND
  • MG995 servo 5V (cable rojo) => NodeMcu VU pin
  • MG995 servo GNG (cable marrón) => NodeMcu GND
  • Servo señal MG995 (cable naranja) => NodeMcu GPIO 12 (pin D6)

Paso 7: Configurar NodeMCU en Arduino IDE

Imagen de Setup NodeMCU en Arduino IDE

Para este proyecto se utiliza  Arduino IDE para programar  el NodeMcu. Es la forma más fácil si ya has usado un Arduino antes, y no necesitarás aprender un nuevo lenguaje de programación, como Python o Lua, por ejemplo.

Si nunca has hecho esto antes, primero tendrá que agregar el soporte de la placa ESP8266 al software Arduino.

1. Descargue e instale la última versión de Arduino IDE

Puede encontrar la última versión para Windows, Linux o MAC OSX en el sitio web de Arduino: https://www.arduino.cc/en/main/software

Descárguelo gratis, instálelo en su computadora y ejecútelo.

2. Agregar el tablero ESP8266

Arduino IDE ya viene con soporte para muchas placas diferentes: Arduino Nano, Mine, Uno, Mega, Yún, etc. Desafortunadamente ESP8266 no está por defecto entre esas placas de desarrollo soportadas. Por lo tanto, para subir sus códigos a una placa base ESP8266, primero deberá agregar sus propiedades al software de Arduino.

  • Navegue a Archivo> Preferencias (Ctrl +, en el sistema operativo Windows);
  • Agregue la siguiente URL al cuadro de texto Gestor de tableros adicionales (el que está en la parte inferior de la ventana de Preferencias):

http://arduino.esp8266.com/stable/package_esp8266com_index.json

  • Si el cuadro de texto no estaba en blanco, significa que ya había agregado otras placas antes en Arduino IDE. Agregue una coma al final de la URL anterior y la anterior.
  • Presiona el botón “Aceptar” y cierra la ventana de Preferencias.
  • Navegue hacia Herramientas> Tablero> Administrador de tableros para agregar su placa ESP8266.
  • Escriba “ESP8266” en el cuadro de texto de búsqueda, seleccione “esp8266 por ESP8266 Community” e instálelo.

Ahora su IDE de Arduino estará listo para trabajar con muchas placas de desarrollo basadas en ESP8266, como el ESP8266 genérico, NodeMcu (que utilicé en este tutorial), Adafruit Huzzah, Sparkfun Thing, WeMos, etc.

3. Agregar las bibliotecas

Las siguientes bibliotecas se usarán para nuestro código Arduino. Descargue las siguientes bibliotecas:

Navegue a Boceto-> Incluir biblioteca-> Administrar bibliotecas … en tu IDE de Arduino y agrega las bibliotecas de arriba.¡Ahora que su entorno de desarrollo está listo, pasemos al siguiente paso!

Paso 8: Configuración de Adafruit.IO

Imagen de la configuración de Adafruit.IO

Hay muchos servicios de registro de datos disponibles para comunicar un microcontrolador a la web. Con esos servicios, puede cargar / descargar datos desde / hacia la nube y hacer muchas cosas interesantes.
Adafruit.IO es uno de esos servicios gratuitos. ¡Es realmente fácil de usar y promete traer Internet de las cosas a todos!

Crear Adafruit IO Web Feed

  • Regístrese en https://io.adafruit.com/
  • En Feeds> Crear un nuevo feed, agregue un nuevo feed denominado “IoT air freshner command”. Creará una base de datos, y la usaremos para almacenar los comandos recibidos por el gadget.

En el siguiente paso, veremos cómo configurar IFTTT, otra plataforma utilizada  en este proyecto. La idea aquí es simple: IFTTT tendrá configurados algunos desencadenantes y enviará algunos datos a la plataforma Adafruit.IO cuando una lógica dada sea verdadera. El gadget podrá leer los datos almacenados en un feed determinado en Adafruit.IO, ejecutar un poco de lógica y realizar algunas acciones.

También es un buen momento para copiar su clave Adafruit.IO, que luego será utilizada para permitir que su dispositivo acceda a la base de datos. Navega por Configuración> Ver clave AIO y copia el código de tecla activa. Lo necesitará para su código Arduino (NodeMCU) en los próximos pasos.

Paso 9: Configuración IFTTT

Imagen de la configuración IFTTT

IFTTT es una plataforma gratuita que ayuda a conectar aplicaciones y dispositivos. Puede usarlo para conectar su teléfono inteligente con otros dispositivos, o para compartir datos entre sus servicios web favoritos (como Google, Facebook, Twitter, Instragram, etc.) y otros dispositivos físicos, por ejemplo. ¡Y la mejor parte es que es realmente fácil de usar!

IFTTT usa una lógica “si esto, luego eso”, donde “esto” representa un servicio que activará una acción determinada dada por “eso”. De esta forma, creará pequeños applets que conectan los servicios y dispositivos web. Para el proyecto descrito en este tutorial, hay varias manzanas que se te ocurren. Por ejemplo, los siguientes ejemplos podrían usarse para activar su dispositivo (“esto”):

  • se hace clic en un botón virtual en un teléfono;
  • todos los días en un momento dado;
  • un teléfono inteligente (GPS) llega a una ubicación determinada;
  • se recibe una notificación por correo electrónico.

En nuestros ejemplos, “ese” valor siempre será un enlace a Adafruit.IO, donde los comandos (resultado de un desencadenante dado) se almacenarán, y más tarde serán leídos por el NodeMCU.

Primero tendrá que iniciar sesión en:https://ifttt.com/

Luego instale la aplicación IFTTT en su teléfono inteligente. Puedes encontrarlo en Google Play Store:https://play.google.com/store/apps/details?id=com.ifttt.ifttt

En el sitio web, vaya a Nuevo applet (haga clic en el botón de flecha al lado de su inicio de sesión para acceder al menú).

Paso 10: Applet # 1 – The Lazy Boy

Imagen de Applet # 1 - The Lazy Boy

Para este applet crearemos un botón virtual que activará su gadget IoT. ¡En nuestro caso, significa que no tendrá que levantarse y encender su refrescante de aire! Haga clic en un botón, aguarde y respire profundamente.

Crear el applet en el sitio web:

  • Haga clic en + Esto;
  • Escriba “botón” en el cuadro de texto del servicio Seach y seleccione Botón widget> Presione botón . Tal como se describe en el sitio web de IFTTT, creará un activador que se activará cada vez que presione el botón;
  • Ahora elija + Eso ;
  • Escriba “adafruit” y seleccione Adafruit> Enviar datos a Adafruit IO . Esto enviará datos a un canal de información en su cuenta IO de Adafruit siempre que el activador que configuró previamente ( + Esto ) esté activado;
  • Configure el nombre del feed como “IoT air freshner command” y Data para guardar como “botón”.
  • Termina tu applet y enciéndelo.

Crea un botón virtual en dispositivos Android:

  • Mantenga presionado el fondo. Y elige Widgets ;
  • Búsqueda de IFTTT Small 1 x 1;
  • Ahora elija Enviar datos a IoT air freshner command feed;
  • Se creará un botón con el ícono de Adafruit.

Pruebas:

  • Haga clic en el botón que acaba de crear;
  • En https://io.adafruit.com/, vaya a su feed de comandos de renovación de aire IoT y verifique si se recibió el comando. Mostrará la última vez que se recibió la acción si funciona correctamente.

En pasos adicionales, le mostraré cómo crear el código para su ESP8266 para realizar una acción cuando se recibe el comando.

Paso 11: Applet # 2 – IIIIIIII es Tiiiiiime!

Imagen de Applet # 2 - IIIIIIIIt es Tiiiiiime!

Para este applet, crearemos un disparador de temporizador para su gadget de IoT, que se activará en determinados momentos. Reloj de alarma perfumado listo para despertarte!

Crea el applet en el sitio web:

  • Haga clic en + Esto ;
  • Escriba “Fecha” en el cuadro de texto del servicio Seach y seleccione el widget Fecha y hora> Todos los días a las . Tal como se describe en el sitio web de IFTTT, creará un disparador que se dispara todos los días en un momento determinado;
  • Haga clic en + Eso ;
  • Escriba “adafruit” y seleccione Adafruit> Enviar datos a Adafruit IO. Esto enviará datos a un feed en su cuenta IO de Adafruit siempre que el activador que configuró previamente (+ Esto) esté activado;
  • Configure el nombre del feed como “IoT air freshner command” y Data para guardar como “time”;
  • Termina tu applet y enciéndelo.

Pruebas:

  • Para probar si está funcionando, configure el tiempo de activación por un minuto después de su hora actual. Y espéralo;
  • En https://io.adafruit.com/ , vaya a su feed de comandos de renovación de aire IoT y verifique si se recibió el comando. Mostrará la última vez que se recibió la acción si funciona correctamente.

Paso 12: Applet # 3 – ¡Hogar, dulce hogar!

Imagen de Applet # 3 - Home, Sweet Home!

Para este applet, crearemos un activador de ubicación para su gadget IoT, que se activará cada vez que ingrese a un área específica (su hogar, por ejemplo).Utilizará el servicio de Localización de su teléfono (posición de GPS) para determinar si se acerca a una ubicación específica.

Crear el applet en el sitio web:

  • Haga clic en + Esto ;
  • Escriba “ubicación” en el cuadro de texto del servicio Seach y seleccione widget de ubicación> Ingrese un área . Tal como se describe en el sitio web de IFTTT, creará un activador que se activará cada vez que ingrese a una ubicación específica;
  • Especifique la dirección de su ubicación;
  • Haga clic en + Eso ;
  • Escriba “adafruit” y seleccione Adafruit> Enviar datos a Adafruit IO . Esto enviará datos a un feed en su cuenta IO de Adafruit siempre que el activador que configuró previamente (+ Esto) esté activado;
  • Configure el nombre del feed como “comando IoT air freshner” y datos para guardar como “ubicación”;
  • Termina tu applet y enciéndelo.

Pruebas:

Para probar si funciona, ¡tendrá que caminar un poco! Tienes que salir de la ubicación que especificaste y volver allí. :RE

Paso 13: Applet # 4 – ¡Tiene correo!

Imagen de Applet # 4 - ¡Tienes correo!

Para este applet, crearemos un activador de notificación para su gadget IoT, que se activará cada vez que se reciba un correo electrónico en su cuenta de gmail. Si un tono de llamada y una notificación de vibración no fueran suficientes, ¡ahora puede agregar una notificación de olor para los mensajes entrantes!

Crea el applet en el sitio web:

  • Haga clic en + Esto ;
  • Escriba “gmail” en el cuadro de texto del servicio Seach y seleccione widget de Gmail> Cualquier correo electrónico nuevo en la bandeja de entrada . Tal como se describe en el sitio web de IFTTT, creará un activador que se activará cada vez que llegue un nuevo mensaje a Gmail.
  • Haga clic en + Eso ;
  • Escriba “adafruit” y seleccione Adafruit> Enviar datos a Adafruit IO . Esto enviará datos a un feed en su cuenta IO de Adafruit siempre que el activador que configuró previamente (+ Esto) esté activado;
  • Configure el nombre del feed como “comando IoT air freshner” y datos para guardar como “correo”;
  • Termine su applet y enciéndelo.

Pruebas

  • Para probar si funciona, envíelo y envíe un correo electrónico;
  • En https://io.adafruit.com/ , vaya a su feed de comando de renovación de aire IoT y verifique si se recibió el comando. Mostrará la última vez que se recibió la acción si funciona correctamente.

Paso 14: Código ESP8266

Imagen del código ESP8266

Ahora que sus activadores están configurados, trabajemos en su código ESP8266.

Básicamente, su gadget se conectará a una red wi-fi y esperará hasta que se reciba un nuevo comando en Arduino.IO. Cada vez que se recibe un mensaje, el renovador de aire IoT realizará sus acciones (mover un servo motor para liberar un poco de perfume, cambiar los colores del LED) y regresar para el estado inactivo. El circuito también usará un botón como entrada.

Para cargar su código, seleccione NodeMCU 0.9 (Módulo ESP-12) (si está utilizando un NodeMCU) con una velocidad de carga de 11520 kbps.Desconecte el servomotor del NodeMCU, conecte NodeMCU al puerto USB de su computadora y cargue el código.

Llevará un tiempo (mucho más que completar y cargar un boceto para un Arduino … tenga paciencia …). ¡Ahora es un buen momento para que le des un mecano de instrucciones mientras esperas! :RE

Después de completar la carga, desenchufe el cable USB, conecte el servomotor y alimente su circuito desde un cargador USB.

Código explicado:

Para la configuración de IO de Adafruit, deberá reemplazar el nombre de usuario ( XXXXXXXXXX ) y la tecla io ( YYYYYYYYY ).

Visite adafruit.io, inicie sesión en su cuenta y copie la clave io (tal como se describió en los pasos anteriores).

/************************ Adafruit IO Configuration *******************************/
// visit io.adafruit.com if you need to create an account, or if you need your Adafruit IO key.
#define IO_USERNAME “XXXXXXXXXX”
#define IO_KEY “YYYYYYYYY”

También deberá especificar el SSID y la contraseña de su enrutador Wi-Fi.Reemplace WWWWWWWWWW y ZZZZZZZZZZ para configurar su conexión Wi-Fi.

/******************************* Configuración de WIFI ***************** ********************* /
#define WIFI_SSID “WWWWWWWWWW”
#define WIFI_PASS “ZZZZZZZZZZ”
#include “AdafruitIO_WiFi.h”
AdafruitIO_WiFi io (IO_USERNAME, IO_KEY, WIFI_SSID, WIFI_PASS);

 

Se usarán las siguientes bibliotecas (como se describe en los pasos anteriores).Deberá agregarlos en el ide de Arduino antes de compilar el código.

/ ************************ El programa principal comienza aquí ********************* ********* /

#include <ESP6266WiFi.h>
#include <AdafruitIO.h>
#include <AdafruitMQTT.h>
#include <ArduinoHttpClient.h>
#include “Servo.h”

 
Varias cosas (pines y parámetros de LED) se definen antes de la configuración:
#define SERV1 12 // Pin conectado al Servomotor
Servo s1;
#define BUTTON_PIN 14 // Pin conectado al pulsador
#define PIXELS_PIN 15 // Pin conectado a la entrada de datos NeoPixel
#define NUM_LEDS 16 // Número de NeoPixels
#define BRILLO 30
#define PIXEL_TYPE NEO_GRB + NEO_KHZ800 // Tipo de NeoPixels (vea el ejemplo de strandtest).
Anillo Adafruit_NeoPixel = Adafruit_NeoPixel (NUM_LEDS, PIXELS_PIN, PIXEL_TYPE); // + NEO_KHZ800);
AdafruitIO_Feed * command = io.feed (“iot-air-freshner-command”); // configura el feed ‘comando’
Durante la configuración, el NodeMCU inicializará los LED (apague y encienda), inicie el puerto de comunicación en serie y conéctese a Adafruit.io. Se mostrará una animación mientras intenta conectarse.

Las entradas (pulsador) y las salidas (servomotor) también se configuran durante la configuración.

void setup () {
ring.setBrightness (BRILLO);
ring.begin ();
ring.show (); // Inicializa todos los píxeles a ‘off’
// inicia la conexión en serie </ p> Serial.begin (115200);
// conectarse a io.adafruit.com
Serial.print (“Conectando a Adafruit IO”);
io.connect ();

// configuramos un manejador de mensajes para el feed ‘comando’.
// la función handleMessage (definida a continuación)
// se llamará cada vez que se envíe un mensaje
// recibido de adafruit io.
command-> onMessage (handleMessage);
// espera una conexión
int i = NUM_LEDS – 1;
int color = 255;
// anima los LED mientras espera la conexión
while (io.status () <AIO_CONNECTED) {
Serial.print (“.”);
ring.setPixelColor (i, 0, 0, color);
ring.show ();
i = i – 1;
if (i <0)

{ if (color == 255) {

color = 0; }

else

{ color = 255;

}

i = NUM_LEDS – 1;

} delay (50); }

lightPixels (ring.Color (0, 0, 0, 0)); // restablecer todos los píxeles a apagado cuando está conectado

// Estamos conectados

Serial.println ();

Serial.println (io.statusText ());

// mover el servomotor a la posición neutral s1.attach (SERV1);

s1.write (90); retraso (500);

s1.detach (); // establecer el pin del botón como entrada pinMode (BUTTON_PIN, INPUT_PULLUP);

}

El ciclo principal es bastante corto. Verifica si hay datos entrantes de Adafruit.io, y verifica si se presionó el botón. Si uno presiona el botón, envía datos a Adafruit.io.

 

void loop ()

{ // io.run (); es requerido para todos los bocetos.

// siempre debe estar presente en la parte superior de tu ciclo // función. mantiene al cliente conectado a

// io.adafruit.com, y procesa cualquier información entrante.

io.run ();

if(digitalRead(BUTTON_PIN) == LOW) {
command->save(“button”);
}

}

 

Cada vez que se recibe un mensaje, se llama a la función handleMessage .Esta función lee los últimos datos recibidos en una fuente dada en Adafruit.io, y verifica si se recibió una de las cadenas de comandos conocidas (‘botón’, ‘temporizador’, ‘ubicación’ o ‘correo’).

Según el comando recibido, los LED parpadearán con diferentes colores y el servomotor se activará.
// esta función se invoca cada vez que se recibe un mensaje
// de Adafruit IO. estaba adjunto a
// la alimentación en la función setup () arriba.

void handleMessage (AdafruitIO_Data * data) {

lightPixels (ring.Color (0, 0, 0, 0)); // restablecer todos los píxeles a apagado cuando se recibe nueva información
String commandStr = data-> toString (); // almacena los comandos entrantes en una cadena

Serial.print (“recibido <-“);
Serial.println (commandStr);

// Estas declaraciones if comparan la variable meteorológica entrante con las condiciones almacenadas, y controlan las NeoPixels en consecuencia.

// si se presionó el botón virtual
if (commandStr.equalsIgnoreCase (“button”)) {
Serial.println (“Botón virtual”);
rotatingPixels (ring.Color (255, 255, 0, 0)); // mostrar animación
lightPixels (ring.Color (255, 255, 0, 0)); // mostrar animación
launch (1);
lightPixels (ring.Color (0, 0, 0, 0)); // restablecer todos los píxeles a apagado cuando se recibe nueva información
}

// si es hora
if (commandStr.equalsIgnoreCase (“timer”)) {
Serial.println (“es hora”);
rotatingPixels (ring.Color (0, 0, 255, 0)); // mostrar animación
lightPixels (ring.Color (0, 0, 255, 0)); // mostrar animación
launch (2);
lightPixels (ring.Color (0, 0, 0, 0)); // restablecer todos los píxeles a apagado cuando se recibe nueva información
}

// si se alcanzó la ubicación
if (commandStr.equalsIgnoreCase (“ubicación”)) {
Serial.println (“Bienvenido a casa!”);
rotatingPixels (ring.Color (0, 255, 0, 0)); // mostrar animación
lightPixels (ring.Color (0, 255, 0, 0)); // mostrar animación
launch (2);
lightPixels (ring.Color (0, 0, 0, 0)); // restablecer todos los píxeles a apagado cuando se recibe nueva información
}

// si tiene correo
if (commandStr.equalsIgnoreCase (“mail”)) {
Serial.println (“¡tienes correo!”);
rotatingPixels (ring.Color (255, 0, 0, 0)); // mostrar animación
lightPixels (ring.Color (255, 0, 0, 0)); // mostrar animación
launch (1);
lightPixels (ring.Color (0, 0, 0, 0)); // restablecer todos los píxeles a apagado cuando se recibe nueva información
}
}

//La función auxiliar rotatingPixels fue desarrollada para mostrar una animación.El color se recibe como una entrada para esta variable.
// Rotación completa de Funcion NeoPixels 

void rotatingPixels (uint32_t color) {
for (int j = 0; j <3; j ++) { for (int i = NUM_LEDS-1; i> = 0; i–) {
ring.setPixelColor (i, color);
ring.show ();
delay (50);
ring.setPixelColor (i, 0, 0, 0);
ring.show ();
}
}
}

//la función de inicio se usa para controlar el servomotor. Ciclos su posición de //90 ° a 175 ° una cantidad determinada de veces.
// Actúa el servomotor
void launch (int number) {
s1.attach (SERV1);
para (int i = 0; i <number; i ++) {
s1.write (175);
delay (1000);
s1.write (90);
delay (1000);
}
s1.detach ();
}

 

Código completo Arduino  aqui; iot-air-freshner-code.inoiot-air-freshner-code.ino

 

Desde luego es un proyecto realmente muy interesante  no solo por su posible utilidad sino  porque no enseña la potencia de la herramientas o servios  web disponibles hoy en dia para ayudarnos en nuestros proyectos

¡Siempre tenga en cuenta que este es un prototipo experimental y podría usarse con precaución!

 

 

Fuente  ; instructables.com

Encender un led ( o lo que quiera) con su Raspberry PI 3 desde una aplicación móvil y no morir en el intento


Encender un led conectado a  una Raspberry  Pi desde una aplicación móvil puede  parecer  algo misterioso  y complejo  destinado  solo a aquellas personas  con conocimientos de programación, por lo que en principio no parece reservado a los aficionados , pero lo cierto es que como todo mito , este no del todo cierto  pues existen soluciones que permiten sin tener conocimientos  de programación conseguir controlar o monitorizar lo que quiera  en tan solo unos minutos

En efecto   gracias  a un  framework  generico desarrollado por  myDevices IO Project Builder llamado Cayenne , los desarrolladores , fabricantes y  también aficionados  pueden  construir rápidamente prototipos y proyectos que requieran controlar o monitorizar   cualquier cosa conectada a su Raspberry  , permitiendo con una sóla cuenta gratuita de Cayenne, crear un número ilimitado de proyectos  mediante una solución  muy sencilla  basada en arrastrar y soltar 

Obviamente el punto fuerte de cayenne  son las  capacidades de  IO  para que pueda controlar de forma remota sensores, motores, actuadores, incluidas los puertos  de GPIO con  almacenamiento ilimitado de datos recogidos por los componentes de hardware,   triggers y alertas,  que proporcionan las herramientas necesarias para la automatización y la capacidad de configurar alertas. Ademas también puede crear cuadros de mando personalizados para mostrar su proyecto con arrastrar y soltar widgets que también son totalmente personalizables.

Resumidamente algunas  características clave de esta novedosa  plataforma son las siguientes:

  •  Una aplicación móvil para configurar, el monitor y los dispositivos de control y sensores desde cualquier lugar.
  • Fácil instalación que conecta rápidamente los dispositivos, sensores, actuadores, y las extensiones en cuestión de minutos.
  • Motor de reglas para desencadenar acciones a través de dispositivos.
  • Panel personalizable con widgets de visualización de arrastrar y soltar.
  • Programación de las luces, motores y actuadores
  •  Control de GPIO que se pueden configurar desde una aplicación móvil o  desde un navegador
  • Acceso remoto instantáneo desde su smartphone o con un ordenador
  • Para construir un proyecto de la IO a partir de cero se ha logrado el objetivo de proporcionar  un Proyecto Generador de IO que reduce el tiempo de desarrollo de horas en lugar de meses.

Como veremos , hablamos de un constructor de sitio web fácil de usar, pero para proyectos de IOT, así que veamos  los pasos para crear un proyecto de IoT con esta potente herramienta usando  su Raspberry Pi 3

Paso1

En primer lugar , si no  tiene instalado Raspbian en su Raspberry Pi 3,  tendrá que crearse una nueva imagen  con esa distribución .

Para instalar Raspbian , vaya  a  Descargas ,  y seleccione Rasbian  ( a la derecha de Noobs),

No debe confundir   esta distribución con la versión  para PC o Mac (RASPBERRY PI DESKTOP) pues como puede entenderse es para un ordenador personal y no para una placa Raspberry Pi

raspbian.PNG

Verá que hay  dos versiones:

  • RASPBIAN STRETCH WITH DESKTOP

    Image with desktop based on Debian Stretch
    Version:August 2017
    Release date:2017-08-16
    Kernel version:4.9
    Release notes:Link
    SHA-256:309f355ad5ca3e15d4866dfa16f17e4a5412632fec00976fe270d59516668849        
  • RASPBIAN STRETCH LITE

    Minimal image based on Debian Stretch
    Version:August 2017
    Release date:2017-08-16
    Kernel version:4.9
    Release notes:Link
    SHA-256:52e68130c152895905abe66279dd9feaa68091ba55619f5b900f2ebed381427b

Obviamente si la SD es suficiente grande , lo interesante es descargar la primera  (RASPBIAN STRETCH WITH DESKTOP) en lugar de la versión mínima,

Una vez decidida,  descargue la imagen correspondiente  en su ordenador y siga los siguientes pasos:

  • Inserte la tarjeta SD en el lector de tarjetas SD  de su ordenador comprobando cual es la letra de unidad asignada. Se puede ver fácilmente la letra de la unidad, tal como G :, mirando en la columna izquierda del Explorador de Windows.
  • Puede utilizar la ranura para tarjetas SD, si usted tiene uno, o un adaptador SD barato en un puerto USB.
  • Descargar la utilidad Win32DiskImager desde la página del proyecto en SourceForge como un archivo zip; puede ejecutar esto desde una unidad USB.
  • Extraer el ejecutable desde el archivo zip y ejecutar la utilidad Win32DiskImager; puede que tenga que ejecutar esto como administrador. Haga clic derecho en el archivo y seleccione Ejecutar como administrador.
  • Seleccione el archivo de imagen que ha extraído anteriormente de Raspbian.
  • Seleccione la letra de la unidad de la tarjeta SD en la caja del dispositivo. Tenga cuidado de seleccionar la unidad correcta; si usted consigue el incorrecto puede destruir los datos en el disco duro de su ordenador! Si está utilizando una ranura para tarjetas SD en su ordenador y no puede ver la unidad en la ventana Win32DiskImager, intente utilizar un adaptador SD externa.
  • Haga clic en Escribir y esperar a que la escritura se complete.
  • Salir del administrador de archivos  y expulsar la tarjeta SD.

Paso 2

Ahora que tiene la imagen de Rasbian en una SD , ya puede insertar la SD en su Raspberry Pi 3  en el adaptador de micro-sd , conectar un monitor por el hdmi , conectar un teclado y ratón en los  conectores USB, conectar la  con un cable ethernet  al router  conectividad a Internet ( si es una Raspberry Pi 2  que carece de Wifi)  y finalmente conectar la alimentación  para comprobar que la Raspeberry Pi  3 arranca con la nueva imagen

Como pasos mínimos recomendamos  al menos seguir los siguientes pasos:

  • Cambiar resolución de pantalla : normalmente la resolución máxima no suele ser adecuada para muchos monitores o TV , por  lo que lo mejor es cambiarla a una menor  que permita ver con comodidad el interfaz. La resolución se cambia desde el menu    Raspberry Pi Configuration  , a continuacion  System, pulsamos en Resolution    , seleccionamos una adecuada a nuestro TV/monitor    y pulsamos Set Resolution
  • Cambiar configuracion regional e idioma:  para no tener problemas  con el teclado  o incluso la conexion wifi nos interesa personalizar la configuracion de loclalizacion  para lo cual  iremos al menus de  Raspberry Pi Configuration  , a continuacion   seleccionaremos las siguintes opciones:
    • Localisation , seleccionar en Locale   . aquí elegimos la ubicación y depues puslaremos set locale,  tambien Language  por defecto es ingles=en (English) cámbielo por ejemplo a español seleccionando es(Spanish),  tambien Country puede cambiarlo por su pais ( por ejemplo =ES(Spain),  y  CharacterSet ( ISO-8859-1)
    • Timezone: seleccionar  Area  y Location
    • Keyborad: seleccionar teclado español si el que tiene coenctado
    • Wifi Country: seleccionar el pais (county) : por ejemplo ES Spain  ( si no selecionamos no se activa el WIFI)
  • Por ultimo, una vez reiniciemos la placa para que los cambio surtan efecto , si usamos la Rasberry Pi 3 , nos queda elegir  la red wifi   a la que se contactara su placa ,para lo  cual en la esquina superior derecha nos iremos al icono de redes wifi  y pulsaremos la red correspondiente   y a continuación escribiremos su clave.

Paso 3:

Desde linea de comandos  de la consola o por ssh simplemene con el comando gpio readall   se pueden leer el estado de todos los puertos del GPIO

Como realmente  lo que buscamos es controlar los puertos del GPIO  a distancia y mediante un interfaz grafico remoto, para comenzar la configuración de su Raspberry   ,lo primero es crear una cuenta gratuita en cayenne-mydevices.com que servirá tanto para entrar en la consola web como en la aplicación movil.

Para ello, vaya a la siguiente url  e introduzca simplemente su nombre ,dirección de correo y una clave de acceso  que  utilizara para validarse.

paso1.png

Paso 2

Una vez registrado , solamente tendrá que elegir la plataforma  para avanzar en el asistente. Obviamente   seleccionamos  en nuestro caso   Raspberry Pi.

paso2.png

Paso 3

Para  avanzar  en el asistente deberemos  tener instalado   Raspbian en nuestra Raspberry Pi como vimos  en el paso 1  .

Esta versión trae pre-instalado  un montón de software para la educación,  programación y uso general contando con  Python, Scratch, Sonic Pi, Java

Es interesante destacar  que Raspbian  se puede instalar con NOOBS o descargando  la imagen   siguiendo la  guía de instalación explicada en el paso 1.

paso3

paso 4

paso4

Ahora si queremos controlar dispositivos tenemos que instalar el agante   de cayenne bien con dos  comandos o bien  desde la app

Veamos en primer lugar como instalar el agente desde  la app, de modo que lo siguiente es instalar la aplicación móvil   , que esta disponible tanto para IOS como Android.

En caso de Android este es el enlace para su descarga en Google Play

Es muy interesante destacar que  desde la aplicación para el  smartphone  se puede automáticamente  localizar e instalar el software  myDevices Cayenne en su Raspberry Pi, para lo cual ambos ( smarphone y Raspberry Pi )  han de estar conectados a la misma red,por ejemplo la  Raspberry Pi al router con un cable ethernet  y su samartphone a la wifi de su hogar ( no funcionara si esta conectada por 3G o 4G)

Una vez instalada la app , cuando hayamos introducido nuestras credenciales , si esta la Raspberry en la misma red  y no tiene instalado el agente instalara automáticamente

Hay otra opción de instalar  myDevices Cayenne en su Raspberry  Pi,la cual es bajo nuestra opinión es la mas aconsejada   que es  usando el  Terminal en su  Pi o bien por SSH  ejecutando tan sólo  dos  comandos similares a los siguientes:

wget https://cayenne.mydevices.com/dl/rpi_xxxxx.sh 
sudo bash rpi_xxxxx.sh -v

El  nombre del script rpi_xxxxx.sh  varia en cada nueva instalación asi que fijese en el nombre exacto qeu le propone el  instalador web

Aunque ambos comandos  sean ejecutados desde ssh en la Raspberry Pi , directamente en el propio  interfaz web nos ira mostrando los pasos por donde vamos  en la instalación del agente:

instaññing.PNG

A la finalización del script se reiniciara la placa,  así que tenga un poco de paciencia..

!Ya esta listo! Ya sólo tiene que empezar a conectar dispositivos y sensores a sus raspberry Pi por medio del conector  GPIO  y  por supuesto  también añadirlos en la consola de Cayenne  ,  y con esto ya podrá ver el hw  que añada  en tiempo real tanto en el interfaz web como en su smartphone.

paso 5

Como ejemplo vamos a conectar un led  o un relé  a la Raspberry Pi 3 para poder controlar estos  desde Internet desde la app de Cayenne.

Por simplicidad  hemos conectado un led  donde  el ánodo (+) lo llevaremos al pin 19 del GPIO   y  el cátodo  a la masa de la  raspberry pi en el pin 21 tal y  como se ve en el dibujo

led.PNG

Para añadir una salida al interfaz gráfico , simplemente tenemos que iremos a la consola de Cayenne  y añadiremos un controlador  a nuestro dispositivo, para ello nos iremos al botón verde ( esquina superior derecha) donde pone Add new

Pulsaremos  la primera opción de Device/Widget

Nos iremos a Actuators  pues pretendemos controlar algo ,aunque pero  no vamos a conectar una placa especifica a la salida del gpio .

Ahora vamos al grupo  Relay Switch    pues  pretendemos hacer un control on/off  y por lo tanto pretendemos actuar sobre un pin   digital de salida

Ahora es importante  seleccionar  todas   las opciones siguientes;

  • Select device : seleccionaremos nuestra placa Rasberry Pi  sobre la que vayamos actuar ya que Cayenne  permite manejar un numero ilimitado de placas
  • Conectivity: es importante seleccionar Integrated GPIO
  • Channel : seleccionar aqui el pin  al que vamos a conectar el led (en nuestro caso de ejemplo  el GPIO 19 por su proximidad  a la masa)
  • Choose Widget:  lo ideal es elegir el tipo  “Button
  • Choose Icon: se puede elegir el que se desee , pero como vamos a controlar un led, lo ideal es seleccionar el icono de led
  • Finalmente  no olvidar pulsar el boton  “Add Actuator”

rele

Una vez creado el dispositivo  conectado a la placa  simplemente , bien desde la web o bien desde la propia app de Cayenne,  nos validaremos en cualquiera de los dos  y nos  aparecerá automáticamente el botón desde el que podremos cambiar el estado del pin de GPIO  pinchando sobre el  y con ello encenderemos o apagaremos el led conectado a el  (  por supuesto tambien un relé o el circuito de control que desee)

 

led.PNG

En el ejemplo vemos como el led aparece anaranjado , y esto se se refleja en la placa donde como puede verse el led también aparece iluminado:

 

 

IMG_20170902_103738[1]

Lógicamente lo ideal es usar un rele  o cualquier circuito de control , pero realmente lo importante  es poder controlar el estado del pin del GPIO , tarea que hemos realizado perfectamente sin mucha complicación  con la herramienta Cayenne,  tal y   como ha podido ver el lector en este post.

Por supuesto podrá ver el historial , programar eventos , etc, pero toda esa configuración la reservamos para un nuevo post

Problemas posible con el agente de Cayenne

A veces  al crear el widget desde cayenne aparece   el estado de ‘inaccesible’ y por mucho que repitamos el estado Unreacheable se repite, y eso aunque la raspberry Pi sea accesible y tenga conexión.

Puede que la Raspberry Pi esté ejecutando el núcleo 4.9 de Linux, pero como  webiopi (que es un software que utiliza Cayenne para controlar / monitorizar los pines GPIO en Raspberry Pi) sólo funciona en el núcleo 4.4 que es parte de la actual Raspbian Jessie8, entonces lo mas probable es  que no funcione bien el control .

Para ver la versión del kernel ejecutando el comando uname -a  desde consola o por ssh

Cayenne esta  planeando actualizar webiopi así que cuando Jessie se mueva a algo más reciente que 4.4   actualizaran el sw, pero mientras tanto, si no tiene una necesidad específica del kernel 4.9, puede bajar a 4.4 o hacer una nueva instalación de Jessie, que debe incluir 4.4 para que pueda  acceder a las funciones de Cayenne sin problemas .

Para bajar de version desde la consola  o desde ssh el siguinte comando:

sudo rpi-update 52241088c1da59a359110d39c1875cda56496764

 

A continuación mostramos la salida de ambos comandos:

 [email protected]:~ $ uname -a
Linux raspberrypi 4.9.24-v7+ #993 SMP Wed Apr 26 18:01:23 BST 2017 armv7l GNU/Linux
[email protected]:~ $ sudo rpi-update 52241088c1da59a359110d39c1875cda56496764
 *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
 *** Performing self-update
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 12762  100 12762    0     0  33569      0 --:--:-- --:--:-- --:--:-- 33584
 *** Relaunching after update
 *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
 *** We're running for the first time
 *** Backing up files (this will take a few minutes)
 *** Backing up firmware
 *** Backing up modules 4.9.24-v7+
This update bumps to rpi-4.4.y linux tree
Be aware there could be compatibility issues with some drivers
Discussion here:
https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=144087
##############################################################
 *** Downloading specific firmware revision (this will take a few minutes)
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   168    0   168    0     0    303      0 --:--:-- --:--:-- --:--:--   304
100 52.3M    0 52.3M    0     0   969k      0 --:--:--  0:00:55 --:--:--  274k
 *** Updating firmware
 *** Updating kernel modules
 *** depmod 4.4.50+
 *** depmod 4.4.50-v7+
 *** Updating VideoCore libraries
 *** Using HardFP libraries
 *** Updating SDK
 *** Running ldconfig
 *** Storing current firmware revision
 *** Deleting downloaded files
 *** Syncing changes to disk
 *** If no errors appeared, your firmware was successfully updated to 52241088c1da59a359110d39c1875cda56496764
 *** A reboot is needed to activate the new firmware
[email protected]:~ $ sudo reboot
login as: pi
[email protected]'s password:

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri May  5 06:59:41 2017

SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.

[email protected]:~ $ uname -a
Linux raspberrypi 4.4.50-v7+ #970 SMP Mon Feb 20 19:18:29 GMT 2017 armv7l GNU/Linux

 

 

Una  vez que baje de version su kernel , también recomendamos desinstalar el agente de Cayenne y repetir    la instalación del agente  de Cayenne como vimos al principio

Para desinstalar el agente  ejecute los siguientes comandos desde consola o por ssh:

sudo /etc/myDevices/uninstall/./uninstall.sh

Entonces, después escribiremos:

sudo /etc/webiopi/uninstall/./uninstall.sh

 

 

Como vemos existen  infinidades de opciones  y un universo de posibilidades ,asi que  no tema , pues realmente el proceso como puede ver es bastante sencillo..

 

Watimetro con Esp8266


Éste proyecto se aprovecha de que los contadores modernos  inteligentes  incluyen en el frontal un LED que parpadea cada 1kW consumido, de modo que conectando un par de  cables a dicho LED y montando una pequeño circuito   basada en el módulo Wifi ESP8266, podemos medir con bastante precisión el consumo producido.

Obviamente  no es  legal abrir el contador  inteligente de nuestra vivienda para soldar un para de  cables al LED del watimetro, básicamente porque el equipo no nos pertence  ya que las compañías suministradoras  lo suelen  ofrecer en modo alquiler , pero debe saber que  éste tipo de contadores  también lo podemos instalar en nustra vivienda  o local   en el cuadro de distribución de corriente alterna en un carril DIN, normalmente a a la salida del magneto-térmico general  que alimenta a todos los circuitos que haya instalados en  nuestra vivienda.

Por ejemplo el modulo  XCSOURCE® Medidor Energía KWH Kilovatio Hora LCD CA 50Hz Fase Simple Riel DIN 230V BI04   se puede comprar por unos 14€ en  Amazon siendo la instalación de riel DIN estándar de 35mm, y ademas cumpliendo con el estándar DIN EN 50023   y con el ancho del poste sencillo (módulo de 17.5mm), que cumple con el estándar DIN 43881.

El modulo en su configuración Estándar  tiene una ventana de visualización de 7+1 dígitos  (9999999.1kwh) mediante un LCD blanco y negro así, como también una salida con un led verde para el estado de suministro de energía y Rojo para la señal de impulso de energía  como el de los contadores “inteligentes”.

Además , no necesitamos desmontar el modulo para capturar la salida del led de consumo pues tiene una salida SO Estándar donde  podemos conectar el circuito qeu vamos   a ver (respetando la polaridad)

Realmente como vemos en el esquema de conexiones de watimetro este  se alimenta por los terminales  1 y 4 (terminales de arriba)   y su salida ira a lo terminales 3 y 6  que conectaremos a la carga ( es decir el resto de circuitos de nuestro vivienda o local) , y resaltar que precisamente en lo terminales 20 (+) y 21(-)  tenemos la salida standar  SO   de pulsos de 50ms por 1wh

 

El circuito final que el autor propone para mejorar la visualizacion de watimetro  , cuenta de los siguiente elementos:

  • De  un ESP8266-12E como corazón del diseño
  • Una  pantalla OLED
  • Una conexión para programación via conversion usb-serie
  • Una fuente de almentacion de 3.3V
  • Un  circuito de  entrada procedente de la señal SO del watimetro
  • Una entrada adicional opcional para medir consumos individuales de una carga sin watimetro exterior

 

El circuito propuesto es el siguiente:

 

.

 

Hardware

  • ESP8266-12E
  • ACS712 Current Sensor
  • 0.96″ OLED Display
  • BT136 Triac
  • MOC3021 Opto-triac
  • MCT2E
  • LM11173.3V LDO Regulator
  • 5V SMPS Module

 

Software

 

Y a continuación el código fuente  Arduino  que deberíamos grabar en el el ESP8266

 

Codigo Arduino

/***********************************************************************************/
/* This is an simple application to illustrate IoT Home Automation. /
/ This is an example for our Monochrome OLEDs based on SSD1306 drivers /
/ Pick one up today in the adafruit shop! /
/ ——> http://www.adafruit.com/category/63_98 /
/ This example is for a 128×64 size display using I2C to communicate /
/ 3 pins are required to interface (2 I2C and one reset) /
/ Adafruit invests time and resources providing this open source code, /
/ please support Adafruit and open-source hardware by purchasing /
/ products from Adafruit! /
/ Written by Limor Fried/Ladyada for Adafruit Industries. /
/ BSD license, check license.txt for more information /
/ All text above, and the splash screen must be included in any redistribution /
/************************************************************************************/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <ESP8266WiFi.h>
#include / Local DNS Server used for redirecting all requests to the configuration portal /
#include / Local WebServer used to serve the configuration portal /
#include <WiFiManager.h> / https://github.com/tzapu/WiFiManager WiFi Configuration Magic */

#define VOLTAGE_DIVIDER 10.0f
#define REF_VOLT 0.9f
#define RESOLUTION 1024
#define WATTS_THRES 25.0
#define AC_VOLT 230.0
#define VPP_RMS 0.3535
#define BASE_PRICE 125
#define UNITS_UPL_FREQ 30 /* In 2Sec /
#define THEFT_THRESHOLD 15
#define VperAmp 0.1f / See AC712 Datasheet */
#define TRUE 1
#define FALSE 0
#define OLED_RESET 4
#define SSD1306_LCDHEIGHT 64
Adafruit_SSD1306 display(OLED_RESET);

const char* ssid = “IotEM”; /* Device SSID /
String apiKey = “GBH1K3293KFNO8WY”; / Replace with your thingspeak API key /
const char server = “api.thingspeak.com”;

/* Create an instance of the client */
WiFiClient client;
WiFiManager wifiManager;

/* Port Pin Definition */
int InVolPin = A0;
int LoadPin = 14;
int PulsePin = 12;
struct {
unsigned char LdCon: 1;
unsigned char Units:1;
} Flags;

double Voltage, VRMS, AmpsRMS, Watts;
volatile byte interruptCounter = 0;
int Pulses = 0;
int PrevUnits = 0;
int PrevMUnits = 0;
int Units, MeasUnits;

#if (SSD1306_LCDHEIGHT != 64)
#error(“Height incorrect, please fix Adafruit_SSD1306.h!”);
#endif

#define LoadOn() digitalWrite(LoadPin, 1)
#define LoadOff() digitalWrite(LoadPin, 0);

static void DispInfo (void);
static void DispStat (void);
static void SendUnits (void);
static void SendTheftInfo (void) ;
static void SendSMS (int8_t Type);
static void DisplayUnits(void);
static void TheftOccurred (void);

ADC_MODE(ADC_TOUT);

void setup(void) {
Wire.begin(0,2);
Serial.begin(9600);
pinMode(InVolPin, INPUT);
pinMode(LoadPin, OUTPUT);
pinMode(PulsePin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(PulsePin), handleInterrupt, FALLING);
Flags.LdCon = FALSE;

display.display();
delay(500);
LoadOn();
ConnectAP();
DisplayUnits();
}

void loop() {
static unsigned long i = 0, j = 0, l = 0;
VRMS = getVPP() * VPP_RMS;
AmpsRMS = VRMS / VperAmp;
Watts = AmpsRMS * AC_VOLT;
if (Watts >= WATTS_THRES)
Flags.LdCon = TRUE;
else
Flags.LdCon = FALSE;
#ifdef DEBUG
Serial.print(Watts);
Serial.print(AmpsRMS);
Serial.println(” Amps RMS”);
#endif
if (Flags.LdCon) {
#ifdef DEBUG
Serial.println(MeasUnits);
Serial.println(Pulses);
Serial.println(l);
#endif
if (MeasUnits == Pulses)
if(++l > THEFT_THRESHOLD) TheftOccurred();
}
if (i++ >= UNITS_UPL_FREQ) { /* End of Day /
Units = Pulses – PrevUnits;
PrevUnits = Pulses;
SendUnits();
i = 0;
}
if (interruptCounter > 0) {
interruptCounter–;
Pulses++;
MeasUnits = Pulses;
l = 0;
#ifdef DEBUG
Serial.print(“Total Units: “);
Serial.println(Pulses);
#endif
DisplayUnits();
}
delay(1000);
}
void handleInterrupt() {
interruptCounter++;
}
static void TheftOccurred(void) {
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(3);
display.setTextColor(WHITE);
display.print(“!THEFT!”);
display.display();
SendTheftInfo();
delay(5000);
LoadOff();
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(2);
display.setTextColor(WHITE);
display.print(” Contact CESCOM”);
display.display();
delay(2000);
ESP.deepSleep(0, WAKE_RF_DEFAULT); / RIP /
for(;;);
}
void DisplayUnits(void) {
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(3);
display.setTextColor(WHITE);
display.print(Pulses);
display.setCursor(90,13);
display.setTextSize(2);
display.setTextColor(WHITE);
display.print(“Kwh”);
display.display();
}
void ConnectAP(void) {
#ifdef DEBUG
Serial.print(“Connecting Wifi: “);
Serial.println(ssid);
#endif
display.clearDisplay(); / For Display /
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println(“Connecting”);
display.display();
wifiManager.autoConnect(ssid);
#ifdef DEBUG
Serial.println(“”);
Serial.println(“WiFi connected”);
Serial.println(“IP address: “);
IPAddress ip = WiFi.localIP();
Serial.println(ip);
#endif
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println(“Connected”);
display.display();
delay(1000);
}
void SendTheftInfo(void) {
if (client.connect(server,80)) {
String postStr = apiKey;
postStr +=”&field2=”;
postStr += String(1);
postStr += “\r\n\r\n”;
client.print(“POST /update HTTP/1.1\n”);
client.print(“Host: api.thingspeak.com\n”);
client.print(“Connection: close\n”);
client.print(“X-THINGSPEAKAPIKEY: “+apiKey+”\n”);
client.print(“Content-Type: application/x-www-form-urlencoded\n”);
client.print(“Content-Length: “);
client.print(postStr.length());
client.print(“\n\n”);
client.print(postStr);
}
client.stop();
}
void SendUnits(void) {
if (client.connect(server,80)) {
String postStr = apiKey;
postStr +=”&field1=”;
postStr += String(Units);
postStr += “\r\n\r\n”;
client.print(“POST /update HTTP/1.1\n”);
client.print(“Host: api.thingspeak.com\n”);
client.print(“Connection: close\n”);
client.print(“X-THINGSPEAKAPIKEY: “+apiKey+”\n”);
client.print(“Content-Type: application/x-www-form-urlencoded\n”);
client.print(“Content-Length: “);
client.print(postStr.length());
client.print(“\n\n”);
client.print(postStr);
}
client.stop();
}
float getVPP() {
float result;
int readValue; //value read from the sensor
int maxValue = 0; // store max value here
int minValue = 1024; // store min value here
uint32_t start_time = millis();
while((millis()-start_time) < 1000) //sample for 1 Sec
{
readValue = analogRead(InVolPin);
// see if you have a new maxValue
if (readValue > maxValue)
{
/record the maximum sensor value/
maxValue = readValue;
}
if (readValue < minValue)
{
/record the minimum sensor value*/
minValue = readValue;
}
}
// Subtract min from max
result = (((maxValue – minValue) * REF_VOLT) / RESOLUTION) * VOLTAGE_DIVIDER ;
return result;
}

 

Y por cierto para los incredulos en el siguiente video podemos ver el circuito en funcionamiento

 

Cómo iniciar un app automáticamente en Android


AutoStart es una interesante aplicación Android gratuita que podríamos usar, para ordenar a cualquiera de nuestras aplicaciones instaladas en el dispositivo móvil para que se ejecuten automáticamente cada vez que encendamos el terminal.

Objetivamente se puede intuir , que en Google Play existen otras alternativas que podría elegir quizás mejores ,pero  desde luego no sin un interfaz  tan minimalista como el  de este app y desde luego sobre todo que no precisen ser root  o consuman  tantos recursos en el sistema operativo Android como esta app.  Una característica muy interesante destacable respecto  otras apps es que el inicio automático funciona muy bien en todos los teléfonos o tabletas y no requiere permisos de root. Veamos el modo de usarla junto con un ejemplo:

 

 

En este post vamos a comentar la app AutoStart disponible en Google Play .  Una vez que la tengamos instalada  en nuestro dispositivo móvil Android (que puede ser un “ChromeCast” o un mini PC), sólo tiene que ejecutarla para configurarla    directamente desde la pantalla inicial  tanto que se autoinicie la app ( sin esta app corriendo no se iniciara el resto)  como se ejecuten las apps que se deseen.

Como podrá observar  pues la pantalla principal de AutoStart tiene una interfaz minimalista en la configuración.

Allí solamente tiene que tocar al botón para activar el servicio (es decir, para que esté siempre activa) y también, seleccionar al botón “Add” para agregar una o varias aplicaciones Android que desee que se ejecuten automáticamente cada vez que se encienda su dispositivo Android ,  es  decir como vemos tan solo  tiene que seleccionar las aplicaciones que desea iniciará automáticamente después de encendido del teléfono (arranque).

Otros parámetros que podrá  ajustar se ven  un poco más abajo ,los cuales pueden  ayudara hacer que haya un tiempo de espera antes de que la ejecución de estas aplicaciones en  el inicio. El primer valor corresponderá a la propia app,  mientras que el segundo, es el tiempo que debe esperar el sistema para que se vayan ejecutando el resto de aplicaciones Android.

i

Un detalle de esta app es que funciona  tanto en terminales Android con pantallas pequeñas(smartphones)  como terminales con pantallas  mas grandes como pueden ser  tabletas ,android TV, etc, dispositivos todos ellos donde en ocasiones nos puede venir muy bien poder tener disponibles al arrancar estos nuestra app favorita
 

Un ejemplo claro de uso de la app AutoStart   es usarla para iniciar Seguricasa .  La  app Seguricasa disponible en Google Play por 1€ pretende  que reciclemos o reutilicemos  un viejo terminal Android  que tengamos en desuso  fijándolo a la pared  , para que nos sirva tanto para el control de accesos ,como la monitorización del estado de suministro eléctrico  (la utilidad aquí de Autostart sera para que se inicie automáticamente la app Seguricasa en caso de agotamiento de la batería o de un apagado involuntario)

Dado que los inmuebles son el mayor activo de las personas tanto a nivel personal como a nivel de empresas o negocios,  es importante asegurarnos que no son accedidos por terceros o que siempre están alimentados eléctricamente, dada la gran dependencia del suministro de corriente alterna, por lo que es necesario tener constancia de cualquier caída en el suministro eléctrico.

Enviar notificaciones si se detecta un corte de red ,es posible sin ningún hardware adicional ,puesto que dejaría de estar alimentado externamente el Smartphone (por el cargador del terminal), circunstancia que puede ser monitorizada y procesada dentro de la aplicación  SEGURICASA  que es interpretada  como falta de red de corriente alterna.

Quizás lo interesante  de la aplicación es pues que no se necesita ningún cableado ni hardware adicional pues lo único que  requiere es el cargador que alimente el terminal ,una tarjeta SIM ( para que pueda enviar SMS’s o correo en caso de falta de suministro eléctrico)   y por ultimo un simple cartón que se fije solidario a la puerta de modo que al abrir la puerta de acceso tape el sensor de proximidad presente en el frontal de cualquier Smartphone.

 

 

La app Seguricasa puede enviar notificaciones automáticamente vía SMS o por correo electrónico según se desee en el momento que se detecte una falta de red en el suministro eléctrico o también la apertura o cierre de la puerta gracias al sensor de proximidad que incluye cualquier Smartphone y así como también  detectar actos de vandalismo sobre el terminal para notificarlo al usuario.

Como ejemplos de utilidad de esta aplicación seria la vigilancia de los alimentos perecederos (es decir de mantener la refrigeración ) o sistemas de calefacción ,aunque es obvio que todos sabemos cómo las consecuencias de una falta de red eléctrica puede abarcar otros muchísimos usos: servidores para servicios de TI, comunicaciones, seguridad , riegos automatizados, cultivos ,acuarios, etc.

Esta app, pues, está pensada dirigida a familias, pequeños comerciantes, o incluso negocios etc., ya que por su simplicidad está prevista para ser auto instalada por cualquier usuario. Seguricasa es una solución ideal pues para aquellas personas que no están dispuestos a pagar una cuota por un sistema de alarma pero les gustaría saber lo que ocurre en sus propiedades sobre todo con el suministro de corriente alterna en el acceso. La solución es única, pues no es necesario adquirir ningún hw adicional ya que se basa en un Smartphone para gestionar tanto los accesos como los cortes de red de corriente alterna de una vivienda o local

 

Como habrá podido observar , “AutoStart” ofrece una simplicidad bastante grande a la hora de manejar sel arranque automático  fiable sin ser root de cualquier aplicación como por ejemplo la aplicación Seguricasa

Acceso web a Sensores conectados a una Raspberry Pi


Aunque  efectivamente  cualquier  Raspeberry  PI  no puede procesar directamente señales analógicas al no contar  en su electronica interna con convertidores  A/D  y D/A muliproposito como otras placas (Arduino,Netduino,Edison,etc), todavía es posible procesar gran cantidad de información,  pues cuenta  con 14  entradas/salidas digitales que pueden usarse para cualquier propósito como vamos a ver a  continuación, usando como referencia la plataforma Cayenne la cual nos permite rápidamente obtener lecturas en tiempo real  de cualquier sensor que conectemos a nuestra Raspberry Pi

Aunque es posible conectar múltiples sensores analógicos  usando CI auxiliares, vamos a  ver en primer lugar  todas las posibilidades   de usar las entradas/salidas digitales para conectar diferentes tipos de sensores.

Un par de notas antes de comenzar:

  • Los diagramas proporcionados son sólo ejemplo de cómo conectar el sensor. Hay muchas maneras para conectar sensores y extensiones, así que trate de lo que funciona mejor para usted!
  • Asegúrese de que Raspberry Pi está apagada al conectar los cables.
  • Cuando utilice un cable de cinta GPIO, asegúrese de que está conectado el cable (es un color diferente que los otros) en la esquina de la Raspberry Pi y la parte superior de su RP Pi.
  • Algunas placas de prototipos  (usados en los diagramas a continuación) tienen unas lineas de alimentación  que se separan en el medio. Si este es el caso, asegúrese de que sus sensores están conectados en la misma mitad de la placa en su Raspberry Pi.

 

 SENSORES DIGITALES

Es muy sencillo leer el estado  de cualquier interruptor conectado a la Raspberry Pi .Por extraño  que pueda parecer usar sensores basados en  interruptores es unas de las vias de sensorización mas fiables que existen pues al no haber apenas electronica los hace inmunes  a interferencias, averías, sabotaje,etc

Ademas el abanico de sensores de este tipo  no se limita a interruptores mecánicos pues , también existen sensores magnéticos , sensores de líquidos, sensores conductivos,etc , todos ellos  funcionando de una manera muy similar cerrando o abriendo el circuito en función de una determinada característica

Utilice el diagrama siguiente para conectar un sensor a una de las Entradas digitales de Raspberry Pi.

 

Paso 1

Conecte alimentación de  3v de la  RP Pi (pin 1 ) para alimentar el pulsador, a través de una resistencia de 10k.
Digital Input

Paso 2

Conectar la tierra de la RP Pi al pulsador(pin 9).
Digital Input

Paso 3

Conectar el pulsador (utilizando el mismo pin como la resistencia) a uno de los pines GPIO en la RP  Pi, en este caso 17 de GPIO(pin 11).
Digital Input

Paso 4

Ahora finalmente  entre en su cuenta de Cayenne , acceda  a la RP  y agregue la entrada Digital a su escritorio  de Cayyene  para poder  leer el estado del botón usando 17 GPIO.

 

g17

 

 

 

BMP180

BMP180

Este sensor de precisión de Bosch es la mejor solución de detección de bajo costo para medir la presión barométrica y la temperatura. Dado que la presión cambia con la altitud también se puede utilizar como un altímetro! El sensor está soldado a una placa con un regulador de 3.3V, un cambiador de nivel I2C y resistencias de pull-up en los pines I2C.

Esta placa es compatible con 5V pues lleva un regulador de 3.3V y un circuito cambiador de nivel I2C  incluidos para que pueda utilizar este sensor de manera segura con la lógica de 5V y la alimentación.

En el ejemplo  vamos a agregar un sensor de temperatura y presión de BMP180 para ver lo fácil que es empezar.

Paso 1

Conectar al linea  de 3.3V de energía desde la RP Pi a BMP180 (VIN).
BMP180

Paso 2

Conectar toma de tierra de la RP(pin 9)  Pi a BMP180 (GND).
BMP180

Paso 3

Conectar los pins el SCL (pin 5) en el zapatero de Pi y BMP180.
BMP180

Paso 4

Conecte un hilo de la SDA (pin 3) en la RP Pi y BMP180.
BMP180

Paso 5

¡Listo! Ahora puede Agregar el BMP180 a su tablero de instrumentos.

Ahora finalmente  entre en su cuenta de Cayenne , acceda  a la RP  y  haga clic en Agregar nuevo > dispositivo / Widget.

Add New Device

  1. Seleccione sensores, temperatura, y BMP180.
  2. Haga clic en Add Sensor.

Add Sensor

Los widgets de temperatura y presión de BMP180 se agregan a su tablero de instrumentos.

Vamos a probarlo! Coloque su mano sobre el sensor de BMP180. Las actualizaciones de valor de la temperatura tan pronto como se recibe un cambio de temperatura.

Puede comprobar el estado actual de su sensor en cualquier momento visitando el tablero de instrumentos.
Added Sensor

TMP102

TMP102
Se trata de un tablero del desbloqueo de accesorios para el pequeño sensor de temperatura digital TMP102. El TMP102 es un sensor digital (I2C alias TWI), tiene una resolución de 0,0625 ° C, y tiene una precisión de hasta 0,5 ° C. Este es un sensor muy práctico que requiere una muy baja corriente.

La comunicación con el TMP102 se logra a través de una interfaz serie de dos hilos. No existe regulador de tensión de a bordo, por lo que el voltaje suministrado debe estar entre 1,4 a 3.6VDC. Los condensadores de filtrado y resistencias de pull-up se incluyen een la placa .

Use el siguiente diagrama para conectar el sensor de temperatura TMP102.

Una  nota antes de comenzar: Algunos sensores de TMP102 le permiten cambiar la dirección predeterminada conectando  un puente sobre el pin de dirección. Algunas versiones, como la utilizada en este ejemplo, están conectados a una dirección predeterminada de 0x48. Consulte las especificaciones de su ficha para obtener más detalles.

 

Paso 1

Alimentar desde la RP  Pi a TMP102 mediante el pin 1 de 3.3V  (VCC).
TMP102

Paso 2

Conectar la masa   de la RP Pi a TMP102 (GND).
TMP102

Paso 3

Conecte la  toma de SDA(pin 3)  de la RP  Pi hacia a TMP102  .
TMP102

Paso 4

Conecte los pines SCL de la TMP102 a la RP Pi(pin 5).
TMP102

Paso 5

¡Listo! Ahora puede Agregar el sensor de TMP102 en el panel de Cayenne, con dirección por defecto de 0x48.

DS18B20

DS18B20

Este es el último sensor digital de temperatura DS18B20 1-Wire de Maxim IC  y  es un componente muy usado en muchos proyectos de registro de datos y control de temperatura

Envia  al bus I2C la información de la temperatura exterior en  grados C con precisión 9-12 bits, -55C a 125C (+/- 0.5C).a.

Cada sensor tiene un número de serie único de 64 bits grabado en él lo cual permite un gran número de sensores que se utilizarán en un bus de datos.

Use el siguiente diagrama para conectar el sensor de temperatura DS18B20 “1-Wire”.

Un nota antes de comenzar:Para aprovechar las ventajas de la detección automática de cayenne  de sensores 1-wire, conecte a 4 GPIO.

 

Paso 1

Desde la RP Pi para alimentar el pin VDD del DS18B20, use el pin1 de 3.3V. Asegúrese de que usa una resistencia de pull-up de 4k7  entre la alimentación (VDD) y la salida (DQ) en ambos pines del DS18B20.
DS18B20

Paso 2

Conectar la tierra de la RP Pi con el conector de tierra (GND) del DS18B20.
DS18B20

Paso 3

Conectar la  salida del DS18B20 (DQ) en GPIO  4 (pin 7) en la RP Pi. La Conexión a 4 GPIO permite la detección automática del dispositivo 1-wire en Cayenne.
DS18B20

Paso 4

¡Listo! Encienda su RP Pi y Cayenne automáticamente detectará el sensor DS18B20 y añadirá este  a su panel de control.

 

VCNL 4000

vcnl4000

El VCNL4000 puede detectar su proximidad a un objeto utilizando IR dentro de un rango de aproximadamente 20 cm. Los datos de proximidad, así como los datos del nivel de luz ambiental, se pueden recoger en una interfaz I2C.

La placa la acceso a los pines I2C, el pin Vcc, GND y el pin IR + (fuente de alimentación para el emisor IR incorporado). Simplemente necesita alimentación  de 3.3Vy dé al emisor de IR en cualquier lugar de 2.5-5V y usted será capaz de decir lo lejos que está de un objeto de hasta 20 cm.

Use el siguiente diagrama para conectar un VCNL4000 de proximidad y sensor de luminosidad.

Paso 1

Conecte las líneas de energía. Conecte el pin de 3.3V de la RP Pi  al pin de  3.3V de  VCNL4000  y al alimentación de 5V(pin 5)  al pin emisor de IR (IR +).
VCNL4000

Paso 2

Conectar toma de tierra de la raspberry Pi a VCNL4000 (GND).
VCNL4000

Paso 3

Conecte las clavijas SDA de la VCNL4000 a la raspberry Pi(pin3).
VCNL4000

Paso 4

Conecte los pines SCL de la VCNL4000  a la RP Pi(Pin 5).
VCNL4000

Paso 5

¡Listo! Ahora puede Agregar el sensor de VCNL4000 en el  panel de control de Cayenne

 

TSL2561

TSL2561

TSL2561 es un sensor de luz digital avanzado, ideal para su uso en una amplia gama de situaciones de luz. En comparación con las células bajo coste CdS , este sensor es más preciso, lo que permite cálculos exactos de lux y se puede configurar para diferentes ganancia / tiempo rangos para detectar rangos de luz de hasta 0,1 – 40.000+ Lux sobre la marcha.

La mejor parte de este sensor es que contiene dos diodos infrarrojos y espectro completo! Esto significa que puede medir por separado de infrarrojos, y  el espectro completo o humano luz visible (la mayoría de los sensores sólo pueden detectar uno o el otro, lo que no representa con exactitud lo que ven los ojos humanos ya que no podemos percibir la luz infrarroja que es detectado por la mayoría de los fotodiodos)

El sensor tiene una interfaz digital (I2C). Puede seleccionar una de las tres direcciones por lo que puede tener hasta tres sensores en una placa (cada uno con una dirección I2C diferente). El qeu incluya el ADC significa que usted puede utilizar esto con cualquier microcontrolador, incluso si no tiene entradas analógicas. El consumo de corriente es extremadamente baja, así que es genial para los sistemas de registro de datos de baja potencia. sobre 0,5 mA al detectar activamente, y menos de 15 uA cuando está en modo powerdown.

Use el siguiente diagrama para conectar un sensor de luminosidad TSL2561.

Una nota antes de comenzar:El sensor de TSL2561 le permite cambiar la dirección predeterminada  tendiendo un puente sobre el pinde dirección. Dejando el pin de dirección flotante (desconectado) le dará la dirección por defecto, 0 x 39 en este ejemplo. Consulte las especificaciones de su ficha para obtener más detalles.

 

Paso 1

Alimentar desde la RP  Pi con 3.3 V (pin1)  a TSL2561 (VIN).
TSL2561

Paso 2

Conectar toma de tierra de la Rp Pi a TSL2561 (GND).
TSL2561

Paso 3

Conecte las clavijas SDA de la TSL2561  a la RP Pi(pin 3).
TSL2561

Paso 4

Conecte los pines SCL de la TSL2561 a la RP Pi(pin 5).
TSL2561

Paso 5

¡Listo! Ahora puede Agregar el sensor de TSL2561 en el panel de control de Cayenne  con dirección por defecto de 0 x 39.

 

Aunque existen muchos mas sensores y actuadores que podemos conectar a  nuestra Raspberry Pi , una vez conectados  y configurados en el panel de control de Cayenne  aparte de poder visualizar el historial , una gran utilidad es generar alertas antes determinados cambios en los valores transmitidos a la plataforma Cayenne.

Sin duda dos de las grandes utilidades es enviar alertas o notificaciones de correo ante cambios en los valores  registrados de los sensores que hemos conectado

 

 

Recibir alertas  SMS

Cayyene  le enviará alertas de notificación por mensaje de texto si selecciona.
Notification Alert

Correo electrónico

Cayenne le enviará alertas de notificación por correo electrónico si ha seleccionado.
Email Alert

 

Fuente aqui