Tabla de contenido:
- Paso 1: el hardware
- Paso 2: el boceto de Arduino
- Paso 3: ¡Sinatra sube al escenario
- Paso 4: Configure su máquina de desarrollo
- Paso 5: Ruby en Mac o Linux
- Paso 6: Ruby en Windows
- Paso 7: Verifique y configure su Ruby
- Paso 8: Instale Sinatra (todas las plataformas)
- Paso 9: Redis en Mac o Linux
- Paso 10: Redis en Windows
- Paso 11: Cree la aplicación de servicio web
- Paso 12: Implementar en la nube con Heroku
- Paso 13: Poniéndolo todo junto
- Paso 14: potencial
Video: Alerta de inicio: Arduino + mensajería en la nube en una pantalla grande: 14 pasos (con imágenes)
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-13 06:57
En la era de los teléfonos móviles, cabría esperar que las personas respondieran a su llamada las 24 horas del día, los 7 días de la semana.
O no. Una vez que mi esposa llega a casa, el teléfono permanece enterrado en su bolso de mano o la batería está descargada. No tenemos teléfono fijo. Llamar o enviar SMS para pedir que lo lleven a casa desde la estación de tren en una noche lluviosa o llamar para preguntar si mis llaves todavía están en mi escritorio es literalmente una ilusión.
Tengo este problema con la suficiente frecuencia como para justificar una solución. Un poco de retoques con un Arduino y una pantalla de matriz de puntos Freetronics (DMD) resultó en un dispositivo muy molesto (para mi esposa), pero un dispositivo de comunicación y un centro de información asombrosos para mí. Me encanta, ¡y es solo la versión 1!
Home Alert se compone de estas partes:
- Una pantalla de matriz de puntos Freetronics, que es una matriz de LED de 16x32. Vienen en diferentes colores, pero yo uso el rojo para enfatizar que este gadget es para notificaciones "críticas".
- Un Arduino Uno con Ethernet Shield.
- Una ruptura de reloj en tiempo real, como esta o esta.
- Un zumbador piezoeléctrico
- Un sensor de temperatura y humedad DHT22.
Home Alert se controla a través de una página web alojada en Heroku, un host de aplicaciones basado en la nube. La página web está codificada en Ruby, utilizando el marco de la aplicación web Sinatra y la tienda de valores clave de Redis.
Eche un vistazo a la página de inicio (se muestra en la primera imagen adjunta en este paso), donde el formulario espera un nuevo mensaje del usuario.
El primer campo acepta un código de hardware numérico. Es un código que le permite dirigirse a un sistema de alerta de hogar específico, ya que a cada uno se le puede dar un código único. O puede tener varias alertas de inicio que compartan el mismo código, de modo que el mismo mensaje se muestre en varias ubicaciones.
El mensaje que desea mostrar pasa al segundo campo. Cualquier texto que escriba allí se mostrará en el DMD.
Si desea hacer algo de ruido, marque la casilla ¡Sí! casilla de verificación, y es seguro que el timbre llamará la atención de todos los que estén cerca.
En este artículo, le mostraré cómo construir su propio sistema Home Alert, tanto hardware como software Arduino, así como la mini aplicación web Sinatra.
¡Empecemos!
Paso 1: el hardware
El DMD es el punto focal del dispositivo. Podría haber optado por una pequeña pantalla LCD, pero la idea principal de este proyecto era producir algo que se pueda ver y escuchar desde la distancia. Para la parte visual, necesitaba algo grande y brillante, y esta pantalla de Freetronics es exactamente lo que necesitaba. Cada panel contiene una matriz de LED de 16x32, y puede unir varios de ellos para crear pantallas mucho más grandes. Esto es algo que me gustaría hacer en un futuro próximo.
El DMD viene con una biblioteca Arduino fácil de usar. se comunica con Arduino a través de SPI de alta velocidad. Pude obtener la biblioteca de la página de Freetronics Github, luego iniciar el boceto de demostración y ponerlo en funcionamiento a los pocos minutos de abrir la caja. Me sorprendió ver una pantalla tan brillante usando solo energía del Arduino. Si desea cegar temporalmente a sus espectadores, puede conectar una fuente de alimentación dedicada a este DMD. Si esto no llama su atención, ¡nada lo hará!
Físicamente, esta pantalla mide 320 mm (W), 160 mm (H) y 14 mm (D).
El panel posterior contiene los conectores para la alimentación externa, 5 V con al menos 4 amperios de capacidad, el conector Arduino marcado como HUB1 y el conector para conectar en cadena pantallas adicionales en el lado opuesto. Según la documentación, puede conectar en cadena hasta cuatro DMD.
El DMD está controlado por un Arduino Uno. Freetronics proporciona un conector "DMDCON" muy conveniente que simplemente encaja directamente en los pines de datos y SPI correctos.
Aparte del DMD, utilicé un Arduino Uno, un Ethernet Shield, un reloj en tiempo real, un zumbador y un DHT22. Para todos estos componentes, he creado conferencias que describen su funcionamiento en mi curso de Udemy. (Autopromoción descarada: regístrese en mi lista de correo electrónico en arduinosbs.com y reciba un cupón que le dará acceso con descuento a las 55 conferencias).
El reloj en tiempo real, una ruptura basada en el IC del reloj DS18072, es un dispositivo I2C, por lo que está conectado a los pines analógicos 1 y 2 del Uno, que implementan el bus I2C.
El zumbador está conectado al pin digital 3, desde donde lo controlo usando la función tone ().
El sensor DHT22 está conectado al pin digital 2. Tenga cuidado de conectar la resistencia pull-up de 10KΩ entre la línea de 5V y la línea de datos.
Paso 2: el boceto de Arduino
El boceto no es grande en términos del recuento de líneas, pero casi agota la memoria flash disponible del Uno gracias a todas las bibliotecas incluidas. Hay mucho espacio para la optimización de la memoria, pero como estoy en la etapa de creación de prototipos, ese es un proyecto para otro día. Este código está disponible en Github.
Aquí está el boceto, con comentarios incrustados (ver adjunto en PDF).
La principal responsabilidad de este boceto es hacer que Arduino sea un consumidor de un servicio web. El servicio web es un sitio web simple con dos puntos finales, uno para que un usuario humano acceda a través de un navegador web y envíe una cadena de texto que desea mostrar en el DMD, y otro donde Arduino accederá para poder recuperar esa cadena de texto.
Descargue y lea el archivo PDF adjunto, contiene comentarios incrustados que describen su funcionamiento.
Paso 3: ¡Sinatra sube al escenario
Hay muchas formas de crear sitios web y servicios web. Desde lenguajes de programación con bibliotecas compatibles con la web hasta marcos con todas las funciones, puede resultar confuso y difícil elegir uno para este trabajo.
He usado y jugado con un buen número de tecnologías de aplicaciones web, y encuentro que Sinatra es ideal para construir servicios web y sitios web pequeños. En particular, cuando creo un servicio web para admitir un dispositivo Arduino, Sinatra es una muy buena opción.
¿Qué es Sinatra y por qué es una buena elección? ¡Me alegro de que lo hayas preguntado!
Sinatra es un lenguaje para el desarrollo rápido de aplicaciones web. Está construido sobre Ruby, un lenguaje de secuencias de comandos de propósito general muy popular y expresivo. Es posible que escuche que se hace referencia a Sinatra como un "DSL", un lenguaje específico de dominio. El dominio aquí es la Web. Las palabras clave (palabras) y la sintaxis creada para Sinatra es tal que facilita y agiliza la creación de aplicaciones web para las personas.
En un momento en el que los llamados frameworks "obstinados" para el desarrollo de aplicaciones web como Ruby on Rails y Django son muy populares, Sinatra captura el extremo opuesto del espectro. Si bien Ruby on Rails y Django requieren que el programador siga una convención específica y una forma de hacer las cosas (lo que, a su vez, implica una curva de aprendizaje larga y empinada), Sinatra no impone tales requisitos.
Sinatra es conceptualmente mucho más simple que los Rails y Djangos del mundo. Puede comenzar a usar una aplicación web que puede interactuar con su Arduino en minutos.
Lo demostraré con un ejemplo. Así es como se ve una aplicación web mínima de Sinatra (solo lea lo siguiente por ahora, en realidad no haga esto en su computadora porque probablemente aún no tenga los requisitos previos configurados para esto):
En un solo archivo, llamémoslo my_app.rb, agregue este texto:
require 'sinatra'get' / 'do "Hello, world!" end
En la línea de comando, inicie la aplicación así:
ruby my_app.rb
Su aplicación se iniciará y verá este texto en la consola:
peter @ ubuntu-dev: ~ / arduino / sinatra_demo $ ruby my_app.rbPuma 2.8.1 comenzando… * Min threads: 0, max threads: 16 * Environment: development * Listening on tcp: // localhost: 4567 == Sinatra / 1.4.4 ha subido al escenario en 4567 para su desarrollo con el respaldo de Puma
La aplicación ya está lista para recibir solicitudes de clientes. Abra un navegador, apúntelo a https:// localhost: 4567, y esto es lo que verá (vea la captura de pantalla adjunta).
Son cuatro líneas simples de código en un solo archivo. Por el contrario, Rails habría requerido más de cien archivos, generados simplemente para satisfacer los requisitos del marco. No me malinterpretes, me encanta Rails, pero ¿en serio? …
Entonces, Sinatra es simple y rápido de ejecutar. Asumiré que no sabe nada sobre Ruby, Sinatra y la implementación de aplicaciones en la nube, por lo que en la siguiente sección lo llevaré paso a paso desde cero hasta la implementación de su servicio web Arduino en la nube.
Paso 4: Configure su máquina de desarrollo
Sinatra se basa en el lenguaje de programación Ruby. Por lo tanto, debe instalar Ruby antes de instalar Sinatra.
También necesitará instalar un servidor de almacén de valores-clave llamado Redis. Piense en Redis como una base de datos que almacena datos en una clave. Utiliza la clave para recuperar los datos y está optimizada para la velocidad en lugar de la flexibilidad de las estructuras de datos para las que está diseñada una base de datos relacional tradicional. Home Alert almacena sus mensajes en Redis.
Paso 5: Ruby en Mac o Linux
Si está utilizando una computadora Mac o Linux, le recomiendo que use RVM para instalar y administrar su instalación de Ruby (RVM: Ruby Version Manager). Las instrucciones para instalar Ruby con RVM están en esta página, o simplemente copie y pegue este comando en su shell:
curl -sSL https://get.rvm.io | bash -s estable --ruby
Siéntese, recuéstese, relájese y espere a que finalice la descarga, compilación e instalación de RVM y Ruby.
Paso 6: Ruby en Windows
Si está en Windows, le recomiendo seguir esta guía en el sitio web de Ruby Installer para Windows y usar la aplicación de configuración.
Paso 7: Verifique y configure su Ruby
En el momento de escribir este artículo, la última versión estable de Ruby es 2.1.1.p76. Puede verificar la versión que se instaló con RVM escribiendo esto:
información rvm
Aparecerá mucha información sobre RVM y Ruby. En mi caso, esta es la sección Ruby:
ruby: interpreter: "ruby" versión: "2.1.1p76" fecha: "2014-02-24" plataforma: "x86_64-linux" patchlevel: "2014-02-24 revisión 45161" full_version: "ruby 2.1.1p76 (2014 -02-24 revisión 45161) [x86_64-linux]"
Te recomiendo que también uses Ruby 2.1.1, así que si ves algo más antiguo que eso, actualiza así:
rvm install 2.1.1
Esto instalará Ruby 2.1.1. El sitio del proyecto RVM contiene mucha información sobre RVM y cómo administrar su instalación de Ruby.
Paso 8: Instale Sinatra (todas las plataformas)
En Ruby, el código se comparte como paquetes llamados "gemas". El código que compone Sinatra se puede instalar en su computadora como una joya como esta:
gema instalar sinatra
Esta línea buscará todo el código y la documentación y lo instalará en su computadora.
Paso 9: Redis en Mac o Linux
Configurar Redis en Mac o Linux es fácil. El proceso se explica en el sitio web de Redis. Abra la terminal de shell y escriba estos comandos:
$ wget https://download.redis.io/releases/redis-2.8.7.tar…$ tar xzf redis-2.8.7.tar.gz $ cd redis-2.8.7 $ make
Ejecute Redis escribiendo:
$ src / redis-servidor
… ¡y ya está!
Paso 10: Redis en Windows
Redis en Windows solo se recomienda para el desarrollo, y deberá compilarlo utilizando el entorno de desarrollo gratuito de Visual Studio Express. Requiere un poco de tiempo para que funcione, pero funciona bien y vale la pena el esfuerzo. Siga las instrucciones en la página de Github del proyecto. Allí, también encontrará un enlace a la página de Visual Studio Express.
Paso 11: Cree la aplicación de servicio web
Construyamos la aplicación y ejecútela en su máquina de desarrollo. Ajustaremos el boceto de Arduino para conectarnos a esta instancia de la aplicación mientras la probamos. Una vez que estemos satisfechos de que todo está funcionando bien, lo implementaremos en la nube y actualizaremos el boceto para usar la instancia en la nube.
Aquí está el código Ruby, todo en un solo archivo llamado "web.rb" (este código está disponible en Github).
Importante: Descargue y lea el archivo PDF adjunto, contiene comentarios detallados incrustados (¡haga esto antes de continuar!).
Ahora puede probar su sistema de alerta de hogar. En su boceto, cambie las constantes SITIO WEB y PÁGINA WEB para que apunten a su máquina de desarrollo y al número de puerto para su servidor Sinatra de desarrollo. En mi caso, tengo una máquina de desarrollo en IP 172.16.115.136, y el servidor de desarrollo Sinatra está escuchando el puerto 5000, por lo que mi configuración de boceto es:
#define HW_ID "123" #define WEBSITE "172.16.115.136:5000”#define WEBPAGE" / get_message /"
Esta dirección IP es accesible solo para dispositivos en mi red doméstica.
La configuración HW_ID representa la "ID de hardware", es decir, la ID a la que el Arduino que controla el DMD se identificará en la aplicación Sinatra. Es un tipo de autenticación muy básico. La aplicación web entregará un mensaje a un Arduino solicitándolo según el HW_ID proporcionado. Puede tener varios dispositivos con el mismo HW_ID, en cuyo caso todos los dispositivos mostrarán el mismo mensaje. Si desea "privacidad", elija una identificación con muchos caracteres aleatorios que otras personas no podrán adivinar. También tenga cuidado, ninguna comunicación está encriptada.
Ahora continúe e inicie su aplicación Sinatra, escriba esto (asumiendo que está en la carpeta del proyecto Sinatra):
ruby web.rb
… y verá algo como esto (algunos detalles pueden variar, siempre que esto no se bloquee, está bien):
10:42:18 web.1 | comenzó con pid 4911910: 42: 18 web.1 | Puma 2.8.1 comenzando… 10: 42: 18 web.1 | * Subprocesos mínimos: 0, subprocesos máximos: 1610: 42: 18 web.1 | * Entorno: desarrollo10: 42: 18 web.1 | * Escucha en tcp: //0.0.0.0: 5000
Apunte su navegador web a la ubicación que el servidor está escuchando, y verá esto (vea el segundo archivo adjunto).
Sube tu boceto al Arduino, asegúrate de que esté conectado a tu red local. Si todo va bien, Arduino sondeará su servicio web una vez por minuto. Déle un mensaje para mostrar: En el campo de código HW, escriba el mismo ID que estableció para la constante HW_ID en el boceto. Escribe cualquier cosa en el campo "Tu mensaje" y marca la casilla "¿Buzz?" caja.
Envíe, espere un minuto y vea que su mensaje aparece en el DMD.
Paso 12: Implementar en la nube con Heroku
Ahora que Home Alert está trabajando en desarrollo, hagámoslo funcionar en la nube. Hay innumerables opciones disponibles para implementar aplicaciones web. Basándome en el alcance y la complejidad de Home Alert, decidí que no vale la pena el esfuerzo de configurar mi propio servidor privado virtual. En cambio, es mejor optar por un servicio como Heroku, un host de aplicaciones. Para mi escala, el nivel gratuito de Heroku es más que suficiente. Incluso para el componente de Redis, pude elegir un plan gratuito de uno de los muchos proveedores de Redis que trabajan con Heroku.
Aún así, hay un poco de esfuerzo involucrado, que tiene que ver con modificar ligeramente mi aplicación para que pueda cumplir con las especificaciones de Heroku. Los detalles están aquí, pero esencialmente deberá agregar estos archivos a su proyecto Sinatra (todos los archivos que siguen se pueden descargar desde mi cuenta de Github):
* config.ru: Le dice a Heroku qué archivo contiene la aplicación. Aquí está el contenido:
require './web'run Sinatra:: Aplicación
La primera línea apunta a web.rb, y la segunda línea realmente ejecuta su aplicación.
* Gemfile: contiene las Gems (paquetes de código ruby) que requiere la aplicación. Heroku buscará dentro de este archivo para averiguar qué otro código necesita instalar para que su aplicación funcione. Otra forma de ver Gemfile es que contiene una lista de dependencias para su proyecto. Si alguna de estas dependencias no está disponible, su aplicación no funcionará. Esto es lo que hay dentro del Gemfile para esta aplicación:
fuente "https://rubygems.org" ruby "2.1.1" gema 'sinatra'gem' puma'gem 'redis'
Primero, establece el repositorio fuente de todo el código de Gem en rubygems.org. A continuación, requiere que se utilice Ruby versión 2.1.1 para ejecutar la aplicación. Luego enumera las gemas requeridas: Sinatra, Puma (un gran servidor de aplicaciones web Ruby) y Redis.
* Procfile: le dice a Heroku cómo iniciar su servidor. Aquí solo hay una línea:
web: rackup -s puma -p $ PORT
Esta línea dice que “web” es el único tipo de servicio requerido (podría tener otros, como “trabajador”, para procesamiento en segundo plano), y que para iniciar el servicio Heroku debe usar el comando que viene después de “:”.
Puede simular lo que Heroku va a hacer siguiendo esta secuencia en su máquina de desarrollo (solo escriba la prueba antes de la flecha; lo que sigue a la flecha es solo una descripción del comando):
$> Gem install bundler -> instala Bundler, que sabe cómo manejar el Gemfile. $> instalación del paquete -> Bundler procesa Gemfile e instala las dependencias. $> rackup config.ru -> Rackup es una herramienta que puede procesar el archivo config.ru. Normalmente viene con la versión posterior de Ruby, si no la instala así: gem install rack.
El último paso resulta en el lanzamiento de su aplicación. Debería ver exactamente el mismo resultado que cuando lo inició con ruby web.rb anteriormente. Es la misma aplicación en ejecución, con la diferencia de que el segundo método es cómo lo inicia Heroku.
Estamos casi listos para implementar esta aplicación en su cuenta de Heroku. Si aún no tiene uno, siga adelante y cree uno ahora. Luego, siga la guía de inicio rápido para configurar su cuenta y su máquina de desarrollo local, y especialmente Heroku Toolbelt.
Heroku Toolbelt instala el cliente de línea de comandos de Heroku, Git (el sistema de administración de código fuente abierto) y Foreman (una herramienta Ruby que ayuda a administrar aplicaciones basadas en Procfile).
Una vez que haya completado la instalación de Heroku Toolbelt siguiendo las instrucciones en el sitio web de Heroku, siga estos pasos para implementar su aplicación (todo está escrito en la línea de comando, dentro del directorio de la aplicación):
$> heroku login -> Inicie sesión en Heroku a través de la línea de comando $> git init -> Inicialice un repositorio Git para su aplicación $> git add. -> (¡fíjate en el punto!) Agrega todos los archivos en el directorio actual al repositorio de Git $> git commit -m "init" -> Confirma estos archivos en el repositorio, con un nuevo mensaje $> heroku create -> Crea uno nuevo aplicación en Heroku. Heroku le dará a su aplicación un nombre aleatorio, algo así como "blazing-galaxy-997". Anote el nombre y la URL para poder acceder a él a través de su navegador web más tarde. Esta URL se verá así: "https://blazing-galaxy-997.herokuapp.com/". También necesitará copiar el nombre de host (la parte “blazing-galaxy-997.herokuapp.com”) de su nueva aplicación en la constante WEBSITE de su boceto Arduino. Haz esto ahora para que no lo olvides más tarde. $> complementos de heroku: agregar rediscloud -> Agrega el nivel gratuito del servicio Rediscloud Redis a su aplicación. Los ajustes de configuración se crean automáticamente y están disponibles para su aplicación. $> git push heroku master -> Implemente su código en Heroku. Esto transferirá automáticamente el código, configurará cualquier dependencia en Heroku e iniciará la aplicación. Al final del proceso, verá algo como esto: "https://blazing-galaxy-997.herokuapp.com implementado en Heroku", lo que significa que su aplicación ahora está activa en la nube pública. ¡Felicidades!
¡Adelante, pruébalo!
Paso 13: Poniéndolo todo junto
Con su aplicación web implementada, cargue el boceto actualizado en Arduino (recuerde que actualizó la constante WEBSITE para apuntar a su instancia de producción de la aplicación web).
Use su navegador para acceder a su aplicación en Heroku. Al igual que en la introducción, escriba su ID de hardware en el primer cuadro de texto, su mensaje en el segundo y marque la casilla de verificación para activar el timbre.
¡Su mensaje aparecerá en el DMD aproximadamente un minuto después si todo va bien!
Paso 14: potencial
Hay mucho más que puedes hacer con tu sistema de Alerta de Hogar …
Tener un back-end de Heroku significa que puede agregar mucha lógica que puede agregar una funcionalidad asombrosa. Por ejemplo, puede agregar la capacidad para que la aplicación administre notificaciones repetidas, reconocimientos o controle hardware de notificación adicional como luces estroboscópicas, etc. Puede extenderlo al territorio de automatización del hogar y controlar luces y puertas. Puede agregar varios DMD para mostrar diferentes mensajes en cada uno o un solo mensaje en una pantalla combinada más grande. ¡Solo estoy rascando la superficie de lo que es posible aquí!
¡Disfrutar!