Tabla de contenido:

Asistente personal: 9 pasos (con imágenes)
Asistente personal: 9 pasos (con imágenes)

Video: Asistente personal: 9 pasos (con imágenes)

Video: Asistente personal: 9 pasos (con imágenes)
Video: 9 Herramientas con Inteligencia Artificial que DEBES PROBAR 2024, Mes de julio
Anonim
Image
Image
Asistente personal
Asistente personal

En este instructivo, le mostraré cómo puede usar el poder de ESP8266, la creatividad en el diseño y la programación de software, para hacer algo divertido y educativo.

Lo llamé Asistente personal, porque es de bolsillo, habla contigo y puede brindarte información útil y (por supuesto) no útil (pero aún genial) sobre el clima, la hora y la fecha, los mensajes de Gmail, los nacidos vivos y tasas de mortalidad, etc.

Traté de mantener el diseño simple. El dispositivo tiene dos interfaces de usuario. Un pulsador físico y una aplicación basada en web, a la que el usuario puede acceder mediante un navegador web y cambiar la configuración y la configuración del dispositivo.

Cómo funciona Los componentes principales de este proyecto son un módulo Microcontrolador y Reproductor de música. Nuestro microcontrolador (NodeMCU) utiliza tecnología WiFi para conectarse a un punto de acceso con conexión a Internet; para que pueda obtener los datos necesarios, procesarlos e indicarle al reproductor de música (DFPlayer Mini) cuándo, qué archivo MP3 se debe reproducir.

Por ahora, eso es todo lo que necesita saber. Te daré información más detallada en los próximos pasos, así que no te preocupes.

Paso 1: Piezas necesarias

Piezas necesarias
Piezas necesarias
  • NodeMCU ESP-12E (interfaz de USB a serie CP2102)
  • DFPlayer Mini
  • Botón pulsador momentáneo SPST
  • Altavoz de 8 ohmios y 2 vatios
  • Tarjeta Micro SD (necesitará algunos kilobytes, por lo que la capacidad no importa)
  • Tuercas y tornillos

    • Tuercas M3 (x6)
    • Pernos M3 - 23 mm (x4)
    • Pernos M3 - 15 mm (x2)
  • Diodo de señal 1N4148 (x1)
  • Resistencias

    • Resistencia 1K (x1)
    • Resistencia de 10K (x2)

Otras partes:

  • PCB (puede solicitar un prototipo en línea o visitar una tienda local)
  • Lámina acrílica cortada con láser

    • Lámina transparente de 2 mm de espesor
    • Hojas de 2,8 mm de grosor en dos colores diferentes (naranja y verde, rojo y verde, tú decides y los colores no importan)
  • Cualquier cargador micro USB de 5 voltios (al menos) 1 amperio (para encender el dispositivo)

Paso 2: cómo funciona

Cómo funciona
Cómo funciona
Cómo funciona
Cómo funciona

De acuerdo, quiero brindarle información más detallada sobre cómo funciona el software.

El software consta de algunos Servicios. Cada Servicio, tiene sus propios Módulos. (Puede considerar un servicio como una clase y sus módulos como sus métodos). Cada módulo, puede considerarse como un objeto ejecutable. Entonces, nuestro software consta de algunos objetos ejecutables.

Aquí tenemos algunos servicios y sub-servicios o sus módulos:

  • Gmail

    Mensajes no leídos

  • Clima
    • Temperatura actual
    • Condición de hoy
    • Hoy bajo / alto
    • Condición del mañana
    • Mañana bajo / alto
    • Pronóstico de precipitación
    • La salida del sol puesta de sol
  • Tiempo

    • Tiempo actual
    • Fecha actual
  • Nacimiento y muerte

    • Nacimiento mundial
    • Muerte mundial

Hay una cola circular que contiene módulos. Lo llamamos Operation Queue. Dije, cada módulo es un objeto ejecutable. Entonces, cuando presiona el botón pulsador en el dispositivo, mira en la cola de operaciones y ejecuta el siguiente módulo (u objeto).

Puede editar los miembros de la cola de operaciones en la interfaz de usuario basada en web que explicaré más adelante. Por ahora, les daré un ejemplo. Considere la cola de operaciones actual como esta:

COLA (Mensajes no leídos | Pronóstico de precipitación | Hora actual)

Presiona el botón pulsador, los mensajes no leídos deben ejecutarse.

COLA (Mensajes no leídos | Pronóstico de precipitación | Hora actual)

Por lo tanto, el dispositivo utilizará los datos que recopiló (aquí, el número de sus mensajes no leídos que se obtienen de la fuente de la API de correo de Google) para hablar con usted. ¿Pero cómo? Aquí, NodeMCU le dirá al Módulo MP3, cuándo debería reproducir qué pieza MP3 para formar una oración significativa. Para lograrlo, he diseñado diferentes colas, temporizadores y algoritmos. (Si eres un chico de C ++ y te gustan los microcontroladores, puedes estudiar el código por ti mismo).

Entonces, oirá que el dispositivo comienza a hablar: Tiene 4 mensajes no leídos en su bandeja de entrada de Gmail.

Presiona el botón pulsador nuevamente, el siguiente módulo será Pronóstico de precipitación que debe manejarse.

COLA (Mensajes no leídos | Pronóstico de precipitación | Hora actual)

Entonces, escucharás algo como: No olvides tu paraguas, mañana está lloviendo. Y así sucesivamente … Una cosa más interesante: para algunos módulos (como el pronóstico de precipitación), puede esperar frases aleatorias para los mismos estados. Por ejemplo, si mañana hay precipitaciones y llueve, y no nieve, puede esperar "hay posibilidad de que llueva mañana", "trae tu propio sol, mañana lloverá", "tut, tut, parece que va a llover mañana"., o …

¿Cómo obtenemos diferentes datos para cada servicio?

  • Gmail

    Mensajes no leídos Google tiene una potente API a la que puede acceder a sus diferentes servicios, incluido Gmail. Pero, por motivos de seguridad, necesita diferentes métodos de autenticación y autorización como OAuth. ESP8266 no es tan poderoso para ejecutar diferentes algoritmos hash complicados. Por lo tanto, utilicé una tecnología de inicio de sesión simple y antigua para acceder a la bandeja de entrada de Gmail. Es Google Atom Feed que también pueden utilizar los lectores de RSS. Enviamos una solicitud HTTP para acceder al feed de Gmail y su respuesta está en formato XML. Entonces, contamos el número de mensajes no leídos y lo usamos en nuestro programa

  • Clima Utilizamos la API de Yahoo Weather para obtener información meteorológica diferente. Recientemente, al igual que Google, Yahoo ha cambiado su API meteorológica, por lo que deberá utilizar los estándares OAuth para acceder a sus datos. Desafortunadamente, ESP8266 no puede manejar su complejidad, por lo que usaremos un truco para resolver el problema. En lugar de acceder directamente a la API de Yahoo Weather, enviaremos nuestra solicitud a un archivo personalizado en un servidor. Nuestro archivo obtiene datos de Yahoo Weather y simplemente nos los envía.

    • Condición del mañana Condición del mañana le dirá si mañana es más cálido o más frío que hoy, o allí si no habrá un cambio sensible en la temperatura. Comparamos "hoy bajo / alto" con "mañana bajo / alto" para lograr esto. Puede comprobar cómo escribí este algoritmo y cómo funciona en el archivo de la biblioteca del programa.
    • Pronóstico de precipitaciones Si consulta la documentación de Yahoo Weather, puede ver la tabla de códigos de condición. Como dice, los códigos de condición se utilizan en la respuesta para describir las condiciones actuales. Usaremos los códigos de condición de mañana y sus significados para averiguar si habrá alguna precipitación y si llueve o nieva.
  • TimeNTP son las siglas de Network Time Protocol. Es un protocolo de red para la sincronización del reloj entre sistemas informáticos. Como tenemos acceso a Internet, usaremos un cliente NTP para obtener tiempo de un servidor NTP y lo sincronizaremos a través del temporizador interno ESP8266 (como el que lo usas con millis () si eres un usuario de Arduino).
  • Nacimiento y muerte Calcularemos el número de nacimientos y muertes desde el comienzo del día (gracias a NTP Client, es simple obtener el número de segundos desde el comienzo del día). Utilicé las tasas mundiales de natalidad y mortalidad de la ecología.

Paso 3: configurar el software

Configurar el software
Configurar el software

Usaremos Arduino IDE para cargar nuestro programa en NodeMCU. Puede descargar e instalar el último IDE de Arduino desde su sitio oficial:

Antes de comenzar, debe configurar Arduino IDE para Nodemcu. No te voy a decir los pasos aquí, porque podría estar fuera del tema. Pero puedes seguir los pasos y explicaciones de este excelente instructable.

Nuestro programa tiene algunas dependencias de biblioteca. ¿Qué es una dependencia de software?

La dependencia es un término amplio de ingeniería de software que se usa para referirse cuando una pieza de software depende de otra.

Aquí hay una lista de las bibliotecas de Arduino que necesita tener en su computadora para poder compilar el programa Asistente personal:

  • ArduinoJson
  • DFRobotDFPlayerMini
  • NTPClient

Puede descargarlos uno por uno desde su página de Github, luego extraer los archivos zip en el directorio de la biblioteca de Arduino. Su ruta en su sistema es: C: / Users [your-username] Documents / Arduino

Escribí una biblioteca para mantener el código limpio y evitar la complejidad. Descargue el archivo PersonalAssistant-Library.zip y extráigalo en el directorio de la biblioteca Arduino. Como hiciste antes con esas tres bibliotecas.

Archivo YahooWeather.php

Dado que ESP8266 no es lo suficientemente potente para realizar algoritmos hash, no podemos usarlo directamente para enviar solicitudes HTTP a Yahoo Weather API, según los estándares OAuth. Por lo tanto, usaremos un archivo entre nuestro dispositivo y la API de Yahoo Weather. Puede descargar el archivo YahooWeather.zip, extraerlo y poner el archivo YahooWeather.php en un servidor web. Por ejemplo, si su dominio es example.com y coloca el archivo en el directorio api, su punto final api se convierte en example.com/api/YahooWeather.php. Enviará solicitudes de datos meteorológicos a este punto final.

El bosquejo del programa y el FFS (sistema de archivos Flash)

Su placa NodeMCU tiene un sistema de archivos flash de 4 MB para almacenar datos. Entonces, cuando lo tengamos, ¿por qué no usarlo?

¿Recuerdas cuando dije que nuestro dispositivo tiene dos interfaces de usuario? Además de ese botón pulsador solitario, nuestra segunda interfaz de usuario es una sencilla aplicación basada en web. Con esta aplicación, puede manipular la cola de operaciones habilitando / deshabilitando cada módulo, cambiando la configuración del servicio o la configuración del dispositivo, como establecer WiFi SSID y contraseña. Almacenaremos todos estos archivos en el sistema de archivos Flash NodeMCU y ejecutaremos un servidor web ligero para manejar las solicitudes de los usuarios desde su navegador web.

Editar archivo de configuración

Descargue el archivo PersonalAssistant-Sketch.zip y extráigalo en algún lugar de su computadora. Abra el archivo config.json que se encuentra:

PersonalAssistant / data / config.json

Puede usar cualquier editor de texto o código como el bloc de notas, el bloc de notas ++, Atom, etc. El archivo es una estructura de datos json, por lo que es un par clave / valor legible por humanos y puede editarlo fácilmente. Puede cambiar estos campos:

  • Gmail

    • username: su nombre de usuario de Gmail con su @ gmail.com
    • contraseña: su contraseña de Gmail
  • Clima
    • woeid: la ubicación para la que desea recibir información meteorológica. el WOEID (Where On Earth IDentifier) es un identificador de referencia que utiliza Yahoo para la ubicación. Puede realizar una búsqueda en las ubicaciones de WOEID en este enlace.
    • api: es el punto final de la API. El enlace a su archivo yahooweather.php.
    • appId, consumerKey y consumerSecret: para acceder a la API de Yahoo Weather, debes crear un proyecto en la página de desarrolladores de Yahoo. Esto le dará una clave de consumidor y un secreto que son necesarios para usar la API. Para comenzar, visite la página de Yahoo Weather Developer y cree una aplicación.
  • Zona horaria

    zona horaria: ingrese la zona horaria según su ubicación. Puede ser un número flotante positivo o negativo y su unidad son las horas

  • Wifi

    • ssid: SSID de su red.
    • contraseña: su contraseña de red. NodeMCU usará ssid y contraseña para conectarse a su red wifi.

Cargar el croquis del programa y los datos de FFS

Conecte el NodeMCU a su computadora, usando un cable micro-USB a USB.

Ahora abra el archivo PersonalAssistant.ino que se encuentra:

PersonalAssistant / PersonalAssistant.ino

En Arduino IDE, desde Herramientas> Placa, seleccione NodeMCU 1.0 (Módulo ESP-12E). Desde Herramientas> Puerto, seleccione el puerto correcto. Representa su NodeMCU.

Ahora, seleccione Herramientas> Carga de datos de boceto ESP8266, esto cargará el contenido de la carpeta de datos al ESP8266. Espere unos momentos hasta que termine. Luego, seleccione Sketch> Cargar o simplemente presione los botones Ctrl + U en su teclado para comenzar a cargar el programa. Espere hasta que vea el mensaje "la carga está lista".

Paso 4: configura la tarjeta Micro SD

Usamos una tarjeta micro SD para almacenar las piezas del archivo MP3. Es NodeMCU quien decide qué archivo debe reproducirse en qué momento y DFPlayer Mini lo ayuda a hacer una oración significativa decodificando los archivos MP3.

Usé Amazon Polly para generar las piezas de voz que necesitaba.

Amazon Polly es un servicio que convierte texto en voz realista, lo que le permite crear aplicaciones que hablan y crear categorías completamente nuevas de productos habilitados para voz.

No olvide que nuestro dispositivo no utiliza la API de Amazon Polly para hablar de forma dinámica. Tenemos algunas piezas de voz estáticas fuera de línea y, al juntarlas, hacemos diferentes oraciones.

Usé este sitio para generar archivos MP3. La salida de voz que seleccioné fue inglés de EE. UU. / Salli.

Lo único que debe hacer es descargar el archivo microSD.zip y luego extraerlo en su tarjeta micro SD. Contiene los 78 archivos MP3 necesarios.

Probablemente su tarjeta Micro SD viene con un adaptador. Puede insertar su tarjeta Micro SD en su adaptador y conectarla a su computadora portátil. Si su computadora no admite la lectura de tarjetas, debe usar un lector de tarjetas externo.

Paso 5: diseñar los esquemas y configurar la PCB

Diseñar los esquemas y configurar la PCB
Diseñar los esquemas y configurar la PCB
Diseñar los esquemas y configurar la PCB
Diseñar los esquemas y configurar la PCB
Diseñar los esquemas y configurar la PCB
Diseñar los esquemas y configurar la PCB
Diseñar los esquemas y configurar la PCB
Diseñar los esquemas y configurar la PCB

Diseñé el esquema y la placa con Autodesk EAGLE. He incluido archivos SCH y BRD en PersonalAssistant-PCB.zip. Puede editarlo y / o enviarlo fácilmente a un fabricante de PCB local o en línea para solicitar y obtener su placa.

Una cosa más que mencionar es que ESP8266 opera en 3.3v mientras que DFPlayer Mini funciona en 5v. Dado que estos dos módulos necesitan comunicarse entre sí a través de la interfaz en serie, no podemos conectar directamente una salida de 5v a una entrada de 3.3v ya que daña su ESP8266. Entonces necesitaremos una conversión de nivel de 5v a 3.3v. Usamos un diodo de señal y una resistencia de 10K para que esto suceda.

Paso 6: Sueldelo

Sueldelo
Sueldelo
Sueldelo
Sueldelo

Montar la placa es bastante simple ya que tiene algunos componentes. Siga los diseños esquemáticos y de la placa en el paso 5 para colocar fácilmente cada elemento en su lugar correcto.

Empecé soldando las resistencias y el diodo, ya que son pequeños. Puede cortar fácilmente sus colas innecesarias con un cortador de alambre. De arriba a abajo, debe colocar resistencias de 1K, 10K y 10K.

No es necesario que suelde todos los pines NodeMCU y DFPlayer Mini en la PCB. Soldar los pines con un camino es suficiente.

No olvide que los altavoces y los diodos tienen polaridad. Tiene un altavoz y un diodo en sus componentes. Para el diodo, el lado con una línea negra es su lado negativo o el cátodo.

Paso 7: el recinto

El recinto
El recinto
El recinto
El recinto
El recinto
El recinto

Decidí diseñar un recinto elegante de una manera creativa. Estaba preocupado por su forma extraña durante el diseño, pero al final, no fue tan malo. ¡Al menos parece un piano de cola y se siente genial sostenerlo en la mano!

En lugar de la clásica forma cúbica de hexaedro con 6 caras, diseñé un recinto multicapa. De abajo hacia arriba, cada capa se coloca sobre su capa inferior. (Los llamé L0 a L6, de abajo hacia arriba)

Colores y espesores

Puede usar dos colores complementarios para hacer el contraste más fuerte, como:

  • Rojo y verde
  • Azul y naranja
  • Amarillo y morado
  • Azul y amarillo

Usé acrílico transparente para la capa superior, para que puedas ver el interior del dispositivo.

El espesor de la capa superior (capa-6) debe ser de 2 mm. El espesor de las otras capas (capa-0 a capa-5) debe ser de 4 mm. Si desea utilizar una pantalla acrílica de 2,8 mm, como hice yo, no hay problema. Pero necesita cortar dos series de la capa 1 y la capa 3 para el desplazamiento.

Para ensamblar el gabinete, comience desde la capa inferior (L0). Coloque la tabla sobre ella, use los pernos más cortos y apriétela con las tuercas. Ahora puede colocar los cuatro tornillos más largos desde la parte inferior de la capa 0. Algo parecido a una torre. Luego, puede continuar fácilmente montando otras capas en ellos.

Nota: Puede utilizar una arandela opcional entre la capa inferior y la placa.

También he agregado textos de información para los puertos del dispositivo (alimentación y tarjeta micro SD). Puede utilizar grabado láser en la capa superior.

He incluido formatos de archivo CDR y DXF. Puede descargarlos, editarlos y utilizarlos para corte láser.

Paso 8: Acceso a la interfaz de usuario basada en web

Acceso a la interfaz de usuario basada en web
Acceso a la interfaz de usuario basada en web

Encienda el dispositivo

Puede encender el dispositivo con cualquier cargador micro USB de 5v. Conecte el micro USB al puerto de alimentación del dispositivo, que es la entrada micro USB en su NodeMCU.

Acceder a la interacción del usuario

¿Recuerda que cargamos algunos archivos en el sistema de archivos Flash ESP8266? Es hora de usarlo. Todo lo que necesita es la dirección IP asignada a ESP8266 en la red. Hay muchas formas diferentes de encontrar la dirección IP. Enumeraré algunos de ellos aquí:

  • En la página de configuración de su enrutador, en algún lugar de la Lista de arrendamiento de DHCP, puede ver la lista de dispositivos con sus direcciones IP en su red.
  • En Microsoft Windows y macOS, puede ejecutar comandos como arp -a en la terminal.
  • En Android e iOS, puede utilizar aplicaciones como Fing. (Android / iOS)
  • En Linux, puede utilizar herramientas como Nmap.

Después de encontrar la dirección IP, ábrala usando su navegador web. Puede manipular la cola de operaciones habilitando / deshabilitando módulos.

Paso 9: Pensamientos finales

Este proyecto requirió mucho tiempo y energía. Puede agregar muchas más opciones al Asistente personal. Dejé algunas partes abiertas para futuros desarrollos. Algunas partes como:

  1. Añadiendo más servicios y módulo. Por ejemplo, contar números, lanzar un dado o lanzar una moneda.
  2. Después de conectarse a la red, el dispositivo puede decir la dirección IP. Puede agregar esta opción para simplificar el proceso de búsqueda de direcciones IP.
  3. Añadiendo la capacidad de cambiar la configuración de WiFi en el panel de control basado en web.
  4. Añadiendo la capacidad de cambiar la configuración del servicio en el panel de control basado en web. (Su formulario html está listo. Necesita manejar las solicitudes)
  5. Agregar más respuestas de voz en diferentes estados del dispositivo.
  6. Añadiendo una página de inicio de sesión para el panel de control basado en web. Puede hacer esto agregando / comparando cookies en las líneas de encabezado

Y me encantaría conocer sus ideas sobre este instructable.:)

Recomendado: