KiQ broma cat o cómo hicimos un juguete parlante para adultos
En el mundo hay una cantidad increíble de juguetes parlantes para niños y esto solo da la impresión de que los adultos se aburren. Nuestro equipo decidió rectificar esta situación.El comienzo de la historia
Todo comenzó con el hecho de que un pensamiento brillante llegó a la mente inquisitiva de un amigo mío y un colega de la red : ¿por qué no solo niños, sino también adultos para divertir bromas temáticas? El beneficio del hierro asequible y bien probado ahora nunca es una rareza, y no solo puede parpadear con luces, sino también cantar canciones .En este sentido, me llamó y se ofreció a repetir la hazaña épica para asegurarse de que ESP8266 reproduzca música MP3 en la red para que sea bueno y si el hámster se está rompiendo en pedazos, ¿ hay realmente un rendimiento suficiente, que hice rápidamente en las vacaciones de Año Nuevo en 2016:ESP8266 reproduce una radio por Internet en el video, emitiendo sonido usando el PWM de 5 bits a través del truco I2S.Sin embargo, reproducir radio MP3 desde Internet consumió casi todo el recurso ESP8266 y sonó "regular", mientras que la imaginación ya nos atrajo algo más que una columna de radio MP3. Con estos impulsos creativos, fuimos a nuestro equipo y amado chef Vladimir .Después de una pequeña lluvia de ideas, una imagen más detallada e incluso una cadena lógica de lo que no solo queremos, sino que podemos hacer:- Para reemplazar MP3 con algo que requiere menos recursos y es más libre, nos detuvimos en Speex , que flexxnn se transfirió con bastante éxito y rapidez a ESP8266.
- SD , .. , ESP8266 — .
- « » - , random . , . Apple Notification Center Service (ANCS), iPod, iPhone iPad.
- Bluetooth Low Energy (BLE), .
- . Pawn language.
- , — «» «» (), - .
Inicialmente, quería hacer un prototipo muy simple pero totalmente funcional en una placa todo en uno, así que decidimos probar MediaTek en LinkIt ONE . Y la uña de la red tuvo éxito casi de inmediato. Hubo una conexión con el teléfono y desde la tarjeta SD MP3 se reprodujo perfectamente.Parece que aquí está la felicidad y una plataforma lista para usar. Pero luego nos enfrentamos con la dura realidad de las limitaciones de su SDK cerrado y la euforia pasó.Nos dimos cuenta de que la plataforma terminada en una placa, que cumplía todos nuestros deseos, no estaba en la naturaleza, lo que significa que teníamos que crearla desde cero.Entonces, tuvimos que elegir (febrero de 2016) el chip BLE más adecuado, que debía conectarse con el ESP8266. Como una conexión entre el ESP8266 y el chip BLE (aún no sabíamos qué tipo de chip sería), decidimos usar el TWI estándar (I2C).Pero con BLE, la elección no fue muy buena entonces:- TI CC2541 : de alguna manera no me gustó de inmediato debido a la arquitectura de 8051 , y 8 Kb de RAM parecía una vida fácil poco prometedora, teniendo en cuenta la cantidad de servicios BLE y las características que necesitábamos en el juguete.
- BCM20732 : parecía muy prometedor, pero de hecho el SDK resultó ser muy tosco, y el "llavero" WICED Smart BLE de Broadcom es tan defectuoso que no escribiré nada aquí para no jurar. Avíseme si la situación ha mejorado ahora.
- nRF52832 — , . BLE — rekod , SDK , . BLE ANCS iPhone UART. SEGGER J-Link, .
- nRF51822 — , SEGGER nRF52832. — nRF52832 nRF51822 !
Como resultado, el primer hierro se parecía a una araña tarántula algo así:
fue muy triste detectar fallas debido a la caída de cables Dupont, especialmente en el módulo nRF51822, donde los pines eran un poco más pequeños.Servicios BLE en nRF51822 y aplicación iOS
Sin embargo, el asunto y yo en este spider iron comenzamos a implementar servicios y características BLE en nRF51822, dividiendo todo en aproximadamente la mitad:- Servicio de centro de notificaciones de Apple ( ANCS ): para recibir notificaciones de eventos desde un teléfono inteligente.
- Servicio de hora actual de Apple (CTS): cuando está conectado, el juguete toma tiempo desde el teléfono.
- HandShake Service (HSS) — , , «» . , lientID pair Bluetooth, , . , .
- Battery As Service (BAS) — .
- Content Service (CONTS) — , ( ).
- Settings Service (SETTS) — , (, ) ..
MaximKit al mismo tiempo estaba haciendo una aplicación para iOS .
La imagen de la derecha muestra la pantalla principal de la aplicación.Aquí flexxnn no pudo soportar nuestro sufrimiento debido a la caída de cables e hizo el primer prototipo normal en casa con una plancha láser :
no es visible en la foto, pero ya hay una ranura para tarjeta microSD allí. En el pequeño chal cuadrado a continuación: ALC5627 , el sonido ya era mucho mejor que el PWM de 5 bits a través de I2S. AXP209 fueelegido para la administración de energía. Le permite cargar y usar la batería al mismo tiempo, así como controlar su estado. El chip es muy común, pero tiene muchos detalles tanto en programación como en los componentes externos requeridos, los llamados "Arnés".Magia en el ESP8266
Paralelamente, flexxnn portó Speex , FatFs al ESP8266, creó un gestor de arranque para el ESP8266 y el nRF51822 para que fuera posible no actualizar el firmware por cable, sino hacerlo colocando los archivos de firmware en una tarjeta microSD.Personalmente, me parece que los extraterrestres lo ayudaron, ya que hizo todo esto en aproximadamente un mes. Pero él no admite estar en contacto con una mente extraña.Y luego el segundo prototipo más normal:
Pero el prototipo más normal ya no se subió a un juguete blando. E incluso si él entraba, entonces, con un movimiento brusco en un usuario potencial de un juguete, un "extraño" subiría, lo que por supuesto era inaceptable para MVP.Por lo tanto, se decidió ordenar una tarifa a los profesionales y esto es lo que sucedió como resultado:
Tal diseño ya encaja perfectamente en el gato, aunque parece de alguna manera inhumano:
al mismo tiempo, se confirmaron los temores de que los eventos desde el teléfono pudieran llegar con bastante frecuencia y, como resultado, el usuario se molestaría en lugar de divertirse. Se requería una lógica de filtrado flexible, que se puede cambiar fácilmente en cualquier momento sin parpadear. En este sentido, después de estudiar el material y darme cuenta de que no hay scripts rápidos y compactos para ESP8266 (Lua y microPython son intérpretes), decidí portar el lenguaje Pawn , que rápidamente (solo 18 veces más lento que el nativo) ejecuta un bytecode compacto.Por cierto, las fuentes de peones son muy similares a C, por lo que es un placer modificar los scripts, simplemente compílelos en el código de bytes AMX y cópielos en una tarjeta SD.Aparatos de engaño. Pretende ser iOS en Android
Y luego "de repente" todos recordamos que los teléfonos Android en el mundo no son tan pequeños, sino incluso más que los teléfonos con iOS.Como resultado, tuve que acelerar para verificar si podemos engañar a los dispositivos y pretender ser iOS en Android para que vean el servicio ANCS indistinguible de Apple.Al final, todo funcionó y después de una semana, los dispositivos (y nuestro gato no es una excepción) sinceramente creían que tenía un iPhone con servicio ANCS, que se conectaba a mi Nexus 5 e incluso al viejo Samsung Galaxy con Android 4.4.Ir a la nube
Como a nadie le gusta escuchar un chiste varias veces (hecho), y también hay preferencias y restricciones culturales, se decidió que cada usuario creara una lista de reproducción única. Para hacer esto, el asunto se enfrentó con el servidor en la nube.Pero, ¿cómo decidir a quién le va a gustar? Así es, ¡deja que el usuario decida! Para hacer esto, realicé una detección básica de gestos en el acelerómetro LIS3DH de STMicroelectronics. Me gustó la broma: incliné al gato, como si "sí", no me gustó la broma, me incliné hacia un lado, como si "no". Y agregó un "no me olvides" para el teléfono: si la conexión BLE desaparece y el acelerómetro detecta movimiento, entonces el gato está siendo llevado a algún lado y el teléfono ha sido olvidado.Después de que el usuario "polikal" y, por lo tanto, designó sus preferencias, la información va a un servidor donde se comparan los "genomas" de las listas de reproducción y se generan nuevos juegos de bromas para el usuario. Pero este es un tema para un artículo separado.Resumen
Como resultado, el entretenimiento resultó ser una excelente plataforma que puede:- comunicarse con el teléfono a través de BLE y recibir notificaciones de eventos;
- comunicarse a través de WiFi y descargar contenido y actualizaciones de firmware;
- guardar y leer archivos en FAT32 en microSD;
- jugar bromas llenas de códec speex;
- Determine las preferencias del usuario utilizando un acelerómetro (detección de gestos)
- formar listas de reproducción para cada usuario en función de sus preferencias de humor;
Lo que es digno de mención, "manijas muy inteligentes" bien pueden estar conectadas a los pines correspondientes (se dejan incluso los agujeros para los conectores en el tablero) y "sabio hasta el gato" como lo deseen. Esto hace que la plataforma todo en uno sea atractiva para los geeks.Con esta plataforma, comenzamos el kickstarter, llamando al juguete terminado KiQ. El primer día, se recolectó el 40%, y ahora el 57%. Pero esta es una historia completamente diferente.Gracias a todos los que leyeron esta línea. Esperando preguntas interesantes de usted.Source: https://habr.com/ru/post/es398389/
All Articles