Tabla de contenido:

Notificador: 17 pasos
Notificador: 17 pasos

Video: Notificador: 17 pasos

Video: Notificador: 17 pasos
Video: Buscando frutas con notificador #17 #shorts 2024, Noviembre
Anonim
Notificador
Notificador

El dispositivo se puede conectar, por ejemplo, al sistema IFTTT y reaccionar cuando aparece un nuevo correo. En app.remoteme.org, generaremos un enlace después de llamar qué bytes se enviarán a Arduino, y Arduino mostrará algunos efectos de luz y reproducirá algunos mp3 desde la tarjeta SD.

Paso 1: Qué se necesita

Qué se necesita
Qué se necesita
Qué se necesita
Qué se necesita
  • NodeMCU, WemOS o algo similar
  • Dos anillos de LED con diodos WS2812B (he usado anillos de 16 leds)
  • DFRobotDFPlayerMini: este es un reproductor de mp3. Reproduce mp3 desde la tarjeta SD y se comunica con Arduino por RX / TX
  • Vocero
  • Tarjeta SD
  • Convertidor lógico -He usado este, el reproductor de mp3 usa 5V y Arduino 3.3, por eso necesitamos este convertidor
  • Conocimientos y habilidades para hacer PCB simples por nosotros mismos.

La Torre:

  • cartón - dos espesores diferentes
  • Papel de trazar
  • papel de aluminio

Paso 2: construcción de la torre

Edificio de la torre
Edificio de la torre
Edificio de la torre
Edificio de la torre
Edificio de la torre
Edificio de la torre
Edificio de la torre
Edificio de la torre

Sobre el plano de la torre en vista lateral (mi aventura con el dibujo técnico terminó en la escuela primaria), todas las dimensiones en milímetros.

Principio de funcionamiento

  1. anillo de LED iluminando
  2. Papel de trazar
  3. El cono truncado, hecho de cartón y cubierto con papel de aluminio, por lo que refleja las luces de los anillos de leds, en la figura 3 ‘= la malla recortada
  4. tubo de cartón - sostiene las torres verticalmente, dentro del tubo hay cables para leds
  5. La altura depende de ti tengo 85mm
  6. El soporte dentro de todas las partes electrónicas.

Todos los elementos horizontales deben estar hechos de cartón más grueso.

Paso 3: diagrama de cableado

Diagrama de cableado
Diagrama de cableado
Diagrama de cableado
Diagrama de cableado
Diagrama de cableado
Diagrama de cableado
Diagrama de cableado
Diagrama de cableado

El reproductor de mp3 se suministra con un voltaje de 5V y se comunica con Arduino a través de TX / RX, se necesita un convertidor lógico porque el Arduino funciona con un voltaje de 3.3V. El control de anillos también está conectado a Arduino (D5, D6) a través del convertidor lógico.

En el repositorio, encontrará archivos eagle con planos de PCB

Sugiero no soldar permanentemente Arduino y el reproductor de mp3 solo para usar pines dorados femeninos

Paso 4: Principio de funcionamiento

Nuestro Arduino se conecta al sistema app.remoteme.org usando WebSockets (hay bibliotecas listas) a través de esta conexión se envían mensajes de 5 bytes:

  • el primer byte del efecto de luz para el anillo LED superior
  • Efecto de luz de segundo byte para el anillo LED inferior
  • el número del archivo mp3 que se reproducirá
  • la cantidad de segundos durante cuánto tiempo se reproducirán el efecto de luz y el mp3
  • si el mp3 debe reproducirse una vez o en un bucle

código fuente

Código fuente completo que puede encontrar aquí

en los archivos SingleRing.cpp y SingleRing.h hay una clase para controlar los efectos de los anillos LED. Le sugiero que comience mirando la función setMode (int m):

anular SingleRing:: setMode (int m) {switch (m) {caso 0: setConfiguration (0, 0, 50, 0, 5, 1); break; // off = 0 case 1: setConfiguration (6, 0, 50, 0, 0, 20); break; // caso verde estándar sólido 2: setConfiguration (6, 0, 0, 50, 0, 20); break; // caso azul estándar sólido 3: setConfiguration (6, 50, 0, 0, 0, 20); break; // caso rojo estándar sólido 4: setConfiguration (6, 50, 10, 0, 0, 20); break; // caso naranja estándar sólido 5: setConfiguration (1, 0, 100, 0, 5, 2); break; // policía en el sentido de las agujas del reloj verde caso 6: setConfiguration (1, 0, 100, 0, 5, -2); break; // la policía revierte el caso verde 7: setConfiguration (1, 0, 0, 100, 5, 2); break; // policía en el sentido de las agujas del reloj caso azul 8: setConfiguration (1, 0, 0, 100, 5, -2); break; // la policía revierte el caso azul 9: setConfiguration (1, 100, 0, 0, 5, 2); break; // caso rojo estándar policial 10: setConfiguration (1, 100, 0, 0, 5, -2); break; // la policía revierte el caso rojo 11: setConfiguration (1, 100, 20, 0, 5, 2); break; // caso naranja estándar policial 12: setConfiguration (1, 100, 20, 0, 5, -2); break; // policía revertir naranja case 13: setConfiguration (2, 0, 0, 50, 8, 10); break; // caso azul estándar cruzado 14: setConfiguration (2, 0, 0, 50, 8, -10); break; // cross revert blue case 15: setConfiguration (5, 0, 50, 0, 0, 20); break; // parpadea en verde estándar caso 16: setConfiguration (5, 0, 50, 0, 0, -20); break; // parpadea verde odwyrtka case 17: setConfiguration (5, 0, 0, 50, 0, 20); break; // parpadea en azul estándar caso 18: setConfiguration (5, 0, 0, 50, 0, -20); romper; // parpadear revertir azul caso 19: setConfiguration (5, 50, 0, 0, 0, 20); break; // parpadea en rojo estándar caso 20: setConfiguration (5, 50, 0, 0, 0, -20); break; // parpadeo revertir rojo case 21: setConfiguration (5, 50, 10, 0, 0, 20); break; // parpadea naranja estándar case 22: setConfiguration (5, 50, 10, 0, 0, -20); break; // parpadeo revertir naranja default: setConfiguration (0, 0, 50, 0, 5, 1); descanso; // apagado = 0}}

dependiendo del parámetro dado, el anillo mostrará el efecto. Puede agregar su propio efecto llamando a la función setConfiguration con nuevos parámetros (cambio de color, velocidad de visualización) agregando un nuevo modo o agregando un efecto completamente nuevo, o avíseme en los comentarios si me gusta, agregaré un nuevo efecto

arduino.ino:

#include "Arduino.h" #include "SoftwareSerial.h" #include "DFRobotDFPlayerMini.h"

#incluir

#include #include #include "SingleRing.h"

#incluir

#incluir #incluir

#incluir

#define WIFI_NAME ""

#define WIFI_PASSWORD "" #define DEVICE_ID 205 #define DEVICE_NAME "siren" #define TOKEN ""

#define DIODES_COUNT 16

SingleRing top = SingleRing (DIODES_COUNT, D5);

SingleRing bottom = SingleRing (DIODES_COUNT, D6);

SoftwareSerial mySoftwareSerial (D4, D3); // RX, TX

DFRobotDFPlayerMini myDFPlayer; RemoteMe & remoteMe = RemoteMe:: getInstance (TOKEN, DEVICE_ID);

ESP8266WiFiMulti WiFiMulti;

configuración vacía () {mySoftwareSerial.begin (9600); Serial.begin (115200);

if (! myDFPlayer.begin (mySoftwareSerial)) {// Utilice softwareSerial para comunicarse con mp3.

Serial.println (F ("No se puede comenzar:")); Serial.println (F ("1. ¡Vuelva a comprobar la conexión!")); Serial.println (F ("2. Inserte la tarjeta SD!")); mientras (verdadero); } Serial.println (F ("DFPlayer Mini online."));

myDFPlayer.setTimeOut (500); // Establecer tiempo de espera de comunicación en serie 500ms

myDFPlayer.volume (30);

myDFPlayer. EQ (DFPLAYER_EQ_NORMAL);

myDFPlayer.outputDevice (DFPLAYER_DEVICE_SD); WiFiMulti.addAP (WIFI_NAME, WIFI_PASSWORD); while (WiFiMulti.run ()! = WL_CONNECTED) {retraso (100); }

remoteMe.setUserMessageListener (onUserMessage);

remoteMe.setupTwoWayCommunication ();

remoteMe.sendRegisterDeviceMessage (DEVICE_NAME);

top.setup ();

bottom.setup (); top.clear (); bottom.clear (); }

booleano turnOff = true;

turnOffMillis largo sin firmar = 0;

void onUserMessage (uint16_t senderDeviceId, uint16_t tamaño de datos, uint8_t * datos) {

uint16_t pos = 0; uint8_t bottomMode = RemoteMeMessagesUtils:: getUint8 (datos, pos); uint8_t topMode = RemoteMeMessagesUtils:: getUint8 (datos, pos); uint8_t trackNumber = RemoteMeMessagesUtils:: getUint8 (datos, pos); uint8_t tiempo = RemoteMeMessagesUtils:: getUint8 (datos, pos); uint8_t mode = RemoteMeMessagesUtils:: getUint8 (datos, pos);

bottom.setMode (bottomMode);

top.setMode (topMode); if (modo == 1) {myDFPlayer.loop (trackNumber); } else {myDFPlayer.play (trackNumber); } turnOff = falso; turnOffMillis = millis () + 1000 * tiempo; }

bucle vacío ()

{remoteMe.loop (); top.loop (); bucle inferior (); si (turnOffMillis

}

explicación:

#define WIFI_NAME "" #define WIFI_PASSWORD "" #define DEVICE_ID 205 #define DEVICE_NAME "notificator" #define TOKEN ""

Necesitamos proporcionar los datos anteriores, instrucciones detalladas aquí en el enlace. También he mostrado cómo registrarse en remoteme.org y generar el token.

anular el mensaje de usuario (uint16_t senderDeviceId, uint16_t tamaño de datos, uint8_t * datos) {uint16_t pos = 0; uint8_t bottomMode = RemoteMeMessagesUtils:: getUint8 (datos, pos); uint8_t topMode = RemoteMeMessagesUtils:: getUint8 (datos, pos); uint8_t trackNumber = RemoteMeMessagesUtils:: getUint8 (datos, pos); uint8_t tiempo = RemoteMeMessagesUtils:: getUint8 (datos, pos); uint8_t mode = RemoteMeMessagesUtils:: getUint8 (datos, pos);

bottom.setMode (bottomMode);

top.setMode (topMode); if (modo == 1) {myDFPlayer.loop (trackNumber); } else {myDFPlayer.play (trackNumber); } turnOff = falso; turnOffMillis = millis () + 1000 * tiempo; }

Esta función se llamará cuando el mensaje llegue a Arduino y muestre la notificación. El código es tan claro que se describe a sí mismo. Me refiero a los detalles de las clases a la documentación aquí y aquí.

bucle vacío () {remoteMe.loop (); top.loop (); bucle inferior (); si (turnOffMillis <millis ()) {

if (! TurnOff) {

top.clear ();

bottom.clear (); myDFPlayer.stop (); turnOff = verdadero; }}

En el bucle, llamamos a las funciones de bucle de los objetos, y también si ha pasado el tiempo de visualización de notificaciones, apagamos los diodos y el sonido.

Paso 5: reproductor de MP3

Reproductor de mp3
Reproductor de mp3

Se comunica con Arduino a través de TX / RX - Detalles del reproductor en sí aquí, y la biblioteca aquí

Subimos archivos mp3 a la tarjeta SD. Los archivos de la tarjeta se ordenan alfabéticamente y luego llamando a:

myDFPlayer.play (5);

Reproducimos el quinto archivo de la tarjeta SD desde el directorio raíz. Es por eso que es bueno dar a los archivos en la tarjeta SD los prefijos 01, 02, etc. En mi caso, se ve como en la pantalla de impresión de arriba.

Para generar comandos de voz Puede utilizar esta página.

Paso 6: Cargar el programa en Arduino

Subiendo el programa a Arduino
Subiendo el programa a Arduino
Subiendo el programa a Arduino
Subiendo el programa a Arduino

Antes de cargar el boceto en Arduino, debe descargar las bibliotecas necesarias aquí encontrará instrucciones detalladas

además, necesitamos instalar la biblioteca DFRobotDFPlayerMini y Adafruit_NeoPixel

Paso 7: Control

Control
Control
Control
Control

Enviamos a nuestro Arduino cinco bytes

  • el primer byte del efecto de luz para el anillo LED superior
  • Efecto de luz de segundo byte para el anillo LED inferior
  • el número del archivo mp3 que se reproducirá
  • la cantidad de segundos durante cuánto tiempo se reproducirán el efecto de luz y el mp3
  • si el mp3 debe reproducirse una vez o en bucle (1 si debe reproducirse en bucle)

Enviando bytes

07 0F 01 05 01

El anillo superior mostrará las luces de la policía (modo 6), la parte inferior parpadeará en verde (modo 15) (consulte la función setMode en singleRing.cpp y los comentarios al lado). El primer archivo de la tarjeta SD se reproducirá durante 5 segundos. Y el archivo se reproducirá en el bucle (verifique la función en UserMessage en arduino.ino)

Enviemos estos bytes. Mire la pantalla de arriba y haga clic en los iconos en el orden escrito por 1, 2, 3. Aparece la ventana

Luego mire la segunda pantalla y llene la ventana como en la segunda pantalla

La ventana que aparece se utiliza para enviar mensajes al dispositivo. En el campo 1, seleccionamos el dispositivo remitente - porque solo tenemos un dispositivo, lo seleccionamos (este es un campo obligatorio y no importa que sea el mismo dispositivo al que enviamos un mensaje) En el campo 2 le damos bytes a enviar (en rojo el valor que ingresamos en 2 se representará como una cadena) luego haga clic en el botón Enviar.

Después de enviar el mensaje, nuestro notificador debería reaccionar mostrando los efectos de iluminación apropiados y reproduciendo el mp3 seleccionado. Te animo a probar diferentes efectos dando los primeros dos bytes de un número entre 0 y 22 (ver descripción en la función setMode).

Paso 8: envío de mensajes mediante URL

Envío de mensajes mediante URL
Envío de mensajes mediante URL
Envío de mensajes mediante URL
Envío de mensajes mediante URL
Envío de mensajes mediante URL
Envío de mensajes mediante URL
Envío de mensajes mediante URL
Envío de mensajes mediante URL

Si queremos mostrar notificaciones de una aplicación externa, por ejemplo, con IFTTT, necesitamos tener una URL que haga exactamente lo mismo que hicimos en la ventana del paso anterior. remoteme.org proporciona REST APi. Vaya a él haciendo clic en la pestaña Swagger a la izquierda (la última). Se mostrará una página, en esta página también podemos probar nuestras URL.

En la primera pantalla, tiene la función Necesita expandir y luego completar los datos como en la segunda pantalla.

Complete los datos como en la captura de pantalla anterior. Después de hacer clic en ejecutar le enviaremos un mensaje

070F010501

El receptor es el dispositivo con 205 id, el mismo dispositivo también es un remitente. MessageId con la configuración "No_RENEVAL" es irrelevante. Y luego haga clic en Ejecutar. El notificador reaccionará de la misma manera que cuando envía mensajes desde la aplicación. Después de llamar a REST, a continuación se muestra la URL a la que se llamó: mire la tercera pantalla. Y copiar y pegar en la URL del navegador está marcado con un borde verde. En la cuarta pantalla, mi navegador Chrome después de pegar la URL

En mi caso, la URL es:

app.remoteme.org/api/*/rest/v1/message/sendUserMessageHexString/205/1/NO_RENEWAL/1/070F010501/

Paso 9: URL anónima para enviar mensaje

URL anónima para enviar mensaje
URL anónima para enviar mensaje

En el paso anterior, tiene una URL que envía datos a su dispositivo. Desafortunadamente, después de cerrar la sesión de app.remoteme.org, deja de funcionar. Esto se debe a que no proporcionamos el token de autenticación y ya no estamos conectados. Obtengamos nuestro token (o creemos uno nuevo) y péguelo en la URL en lugar de la estrella.

Mire la pantalla y reemplace * en la URL con su token

en mi caso, el token es:

~ 267_ZxoWtJ) 0ph y 2c

entonces mi URL final se ve así:

app.remoteme.org/api/~267_ZxoWtJ)0ph&2c/rest/v1/message/sendUserMessageHexString/205/1/NO_RENEWAL/1/070F010501/

Ahora podemos llamarlo incluso si no estamos conectados. Y cuando se llame, se enviará un mensaje a nuestro dispositivo 205

Paso 10: Integración con IFTTT 1/7

Integración con IFTTT 1/7
Integración con IFTTT 1/7

La URL creada en el paso anterior es adecuada para su ejecución por aplicaciones externas. Cómo usarlo lo mostraré en el IFTTT. Lo configuraré para que el notificador se encienda cuando llegue un correo electrónico a la dirección de correo electrónico (cuenta de Gmail).

Inicie sesión en IFTTT. Luego vaya a la pestaña Mis subprogramas y luego a "Nuevo subprograma" - primera pantalla

Paso 11: Integración con IFTTT 2/7

Integración con IFTTT 2/7
Integración con IFTTT 2/7

A continuación, haga clic en "+ esto"

Paso 12: Integración con IFTTT 3/7

Integración con IFTTT 3/7
Integración con IFTTT 3/7

Luego, en el campo "Servicios de búsqueda", escriba "Gmail".

Luego, "nuevo correo electrónico en la bandeja de entrada" (es posible que se necesite alguna configuración).

Paso 13: Integración con IFTTT 4/7

Integración con IFTTT 4/7
Integración con IFTTT 4/7

ahora hacemos clic en "+ eso"

Paso 14: Integración con IFTTT 5/7

Integración con IFTTT 5/7
Integración con IFTTT 5/7

busque "Webhooks" y haga clic en él

Paso 15: Integración con IFTTT 6/7

Integración con IFTTT 6/7
Integración con IFTTT 6/7

luego "Realizar una solicitud web"

Paso 16: Integración con IFTTT 7/7

Integración con IFTTT 7/7
Integración con IFTTT 7/7

completamos la URL de nuestra url con el token. Escriba el contenido a application / json y haga clic en "crear acción" y finalizar. Ahora tenemos nuestro applet:

Paso 17: Resumen

En este tutorial, mostré cómo enviar mensajes a nuestro Arduino desde sistemas externos. También integramos algún otro sistema que no sea IFTTT de manera similar. No necesariamente tiene que ser un “notificador”. Quería mostrar en este ejemplo cómo enviar mensajes desde sistemas externos a nuestro Arduino.

sourcecodesFanPage en Facebook

Saludos, Maciek

Recomendado: