Tabla de contenido:

Slimbox: ¡un altavoz Bluetooth inteligente !: 10 pasos (con imágenes)
Slimbox: ¡un altavoz Bluetooth inteligente !: 10 pasos (con imágenes)

Video: Slimbox: ¡un altavoz Bluetooth inteligente !: 10 pasos (con imágenes)

Video: Slimbox: ¡un altavoz Bluetooth inteligente !: 10 pasos (con imágenes)
Video: Solucionar error de audio de HBO en TV Box. 2024, Noviembre
Anonim
Slimbox: ¡un altavoz Bluetooth inteligente!
Slimbox: ¡un altavoz Bluetooth inteligente!

¡Hola!

Para mi proyecto escolar en MCT Howest Kortrijk, hice un dispositivo de altavoz Bluetooth inteligente con diferentes sensores, un anillo LCD y RGB NeoPixel incluido. Todo se ejecuta en Raspberry Pi (base de datos, servidor web, backend).

Entonces, en este instructivo, les mostraré cómo hice este proyecto en 3 semanas, paso a paso, así que si alguno de ustedes quiere recrear mi proyecto, ¡puede hacerlo fácilmente!

Este es también mi primer instructivo, si tiene alguna pregunta, ¡intentaré responderla lo más rápido posible!

Mi GitHub:

Paso 1: Suministros

Suministros
Suministros
Suministros
Suministros
Suministros
Suministros

Sensor de temperatura DS18B20

El DS18B20 es un sensor de un cable que mide la temperatura, fabricado por Maxim Integrated. Hay 2 tipos de sensores DS18B20, el componente solo (que usé) y la versión impermeable, que es mucho más grande, pero eso no es lo que necesitaba para mi proyecto, así que usé solo el componente. El sensor puede medir la temperatura en un rango de -55 ° C a + 125 ° C (-67 ° F a + 257 ° F) y tiene una precisión de 0.5 ° C desde -10 ° C a + 85 ° C. También tiene una resolución programable de 9 bits a 12 bits.

Hoja de datos:

Sensor de potenciómetro

Un potenciómetro es una resistencia con tres terminales que se puede ajustar manualmente simplemente girando la parte superior del sensor. La posición de la parte superior determina la tensión de salida del potenciómetro.

Acelerómetro LSM303 + ruptura de brújula

La placa de conexión LSM303 es una combinación de un acelerómetro de triple eje y un magnetómetro / brújula, fabricado por Adafruit. Se utiliza con la interfaz I2C de Raspberry Pi.

Descripción general:

Hoja de datos:

MCP3008

Para leer los datos de mi potenciómetro utilicé un MCP3008, que es un convertidor analógico a digital de 8 canales y 10 bits con la interfaz SPI y es bastante fácil de programar.

Hoja de datos:

Altavoz - 3 "de diámetro - 8 ohmios 1 vatio

Este es el cono de altavoz que elegí después de calcular el voltaje y los amperios que necesitaría y fue un ajuste perfecto para mi proyecto Raspberry Pi, fabricado por Adafruit.

Resumen:

Amplificador mono clase D MAX98357 I2S

Este es el amplificador que viene con el altavoz, no solo es un amplificador, también es un convertidor I2S de digital a analógico, por lo que también se adapta perfectamente a mi altavoz y sistema de audio.

Descripción general:

Hoja de datos:

Arduino Uno

El Arduino Uno es una placa de microcontrolador de código abierto basada en el microcontrolador Microchip ATmega328P, fabricado por Arduino.cc. La placa Uno tiene 14 pines digitales, 6 pines analógicos y es totalmente programable con el software Arduino IDE

Descripción general:

Cambiador de nivel

Esta es una placa pequeña que se encarga de la comunicación entre Arduino Uno y Raspberry Pi y los diferentes voltajes, Arduino: 5V y Raspberry Pi: 3.3V. Esto es necesario porque el anillo NeoPixel está conectado al Arduino y se ejecuta allí, mientras que todas las demás cosas se ejecutan en la Raspberry Pi.

Anillo RGB NeoPixel

Este es un anillo pequeño lleno de 12 leds RGB (puede comprar anillos más grandes con más leds RGB, si lo desea). Que en mi caso está conectado al Arduino Uno, pero también se puede conectar a muchos otros dispositivos y es realmente sencillo de usar.

Resumen:

Pantalla LCD 16x2

Usé una pantalla LCD básica para imprimir mi temperatura, volumen y dirección IP.

Hoja de datos:

Raspberry Pi 3B + y tarjeta SD de 16GB

Todo mi proyecto se ejecuta en mi Raspberry Pi 3B + con una imagen configurada, que te ayudaré a configurar más adelante en mi instructable.

GPIO T-Part, 2 placas de prueba y muchos cables de puente

Para conectar todo lo que necesitaba placas de prueba y cables de puente, utilicé la parte GPIO T para tener más espacio y está claro qué pin es cuál.

Paso 2: Esquema y cableado

Esquema y cableado
Esquema y cableado
Esquema y cableado
Esquema y cableado
Esquema y cableado
Esquema y cableado

Para mi esquema utilicé Fritzing, es un programa que puedes instalar y que te permite crear un esquema realmente fácil en diferentes tipos de vistas.

Descarga Fritzing:

¡Así que asegúrese de conectar todo de la manera correcta! En mi caso, los colores de los cables no son los mismos que en el esquema.

Paso 3: Diseño de la base de datos

Diseño de base de datos
Diseño de base de datos

Estamos recopilando una gran cantidad de datos de los 3 sensores conectados, por lo que necesitamos una base de datos para almacenar los datos y los sensores. Más adelante veremos cómo configurar la base de datos en la Raspberry Pi y cómo agregarle datos. Pero primero hay que hacer el diseño de la base de datos o ERD (Entity Relationship Diagram) y el mío también se normalizó con 3NF. Por eso dividimos los sensores en otra tabla y trabajamos con ID.

En general, este es un diseño de base de datos realmente básico y fácil de seguir trabajando.

Paso 4: ¡Preparando la Raspberry Pi

Así que ahora que tenemos algunos conceptos básicos del proyecto hechos. ¡Empecemos con la Raspberry Pi!

Configuración de la tarjeta SD

Primero, necesita una tarjeta SD de 16GB donde pueda colocar su imagen y un programa para cargar una imagen de inicio en la tarjeta SD.

Software:

Imagen de inicio:

Entonces, una vez que estos se descargan:

  1. Pon tu tarjeta SD en tu computadora.
  2. Abra Win32 que acaba de descargar.
  3. Seleccione el archivo de imagen de Raspbian que también acaba de descargar.
  4. Haga clic en "escribir" en la ubicación de su tarjeta SD.

Esto puede llevar algún tiempo, dependiendo de su hardware. Una vez hecho esto, estamos listos para hacer algunos ajustes finales antes de poner la imagen en nuestro RPi.

  1. Vaya al directorio de su tarjeta SD, busque el archivo llamado 'cmdline.txt' y ábralo.
  2. Ahora agregue 'ip = 169.254.10.1' en la misma línea.
  3. Guarda el archivo.
  4. Cree un archivo llamado 'ssh' sin extensión ni contenido.

Ahora puede expulsar de forma SEGURA la tarjeta SD de su computadora y colocarla en la Raspberry Pi SIN energía. Una vez que la tarjeta SD esté en el RPI, conecte un cable LAN desde su computadora al puerto LAN del RPi, una vez que esté conectado puede conectar la alimentación al RPi.

Ahora queremos controlar nuestra Raspberry Pi, esto se hace a través de Putty.

Software de masilla:

Una vez descargado, abre Putty e inserta la IP '169.254.10.1' y el Puerto '22' y el tipo de conexión: SSH. Ahora finalmente podemos abrir nuestra interfaz de línea de comando e iniciar sesión con la información de inicio de sesión -> Usuario: pi y contraseña: raspberry.

Raspi-config

sudo raspi-config

Lo realmente importante para este proyecto es la sección de interfaz, tenemos que habilitar muchas interfaces diferentes, habilitar todas las siguientes interfaces:

  • Un hilo
  • SPI
  • I2C
  • De serie

Ahora que hemos terminado con raspi-config, intentemos establecer una conexión con Internet.

Conexión wifi

Primero, debes ser root para los siguientes comandos

sudo -i

Una vez que sea root, use el siguiente comando. SSID es su nombre de red y la contraseña es obviamente su contraseña.

wpa_passphrase "ssid" "contraseña" >> /etc/wpa_supplicant/wpa_supplicant.conf

En caso de que haya cometido un error, puede verificar, actualizar o eliminar esta red con solo ingresar ese archivo:

nano /etc/wpa_supplicant/wpa_supplicant.conf

Entonces, después de ingresar a nuestra red, ingresemos a la interfaz del cliente WPA

wpa_cli

Seleccione su interfaz

interfaz wlan0

Recargar el archivo

reconfigurar

Y finalmente puedes ver si estás bien conectado:

ip a

Actualización actualización

Ahora que estamos conectados a Internet, actualizar los paquetes ya instalados sería una decisión inteligente, así que hagámoslo antes de instalar otros paquetes.

sudo apt-get update

sudo apt-get upgrade

Base de datos MariaDB

Instale el servidor de base de datos MariaDB:

sudo apt-get install mariadb-server

Servidor web Apache2

Instale el servidor web Apache2:

sudo apt instalar apache2

Pitón

Instale Python:

alternativas de actualización --install / usr / bin / python python /usr/bin/python2.7 1

actualizar-alternativas --install / usr / bin / python python / usr / bin / python3 2

Paquete de Python

Tendrás que instalar todos estos paquetes para que el backend funcione a la perfección:

  • Matraz
  • Matraz-Cors
  • Matraz-MySql
  • Matraz-SocketIO
  • PyMySQL
  • Peticiones
  • Python-socketio
  • RPi. GPIO
  • Gevent
  • Gevent-websocket
  • Ujson
  • Wsaccel

Biblioteca de altavoces

Instale la biblioteca de altavoces de Adafruit:

curl -sS https://raw.githubusercontent.com/adafruit/Raspbe… | intento

¡Es hora de reiniciar

sudo reiniciar

Paso 5: ¡Reenvíe la ingeniería de nuestra base de datos al RPi

Ahora que hemos instalado todo lo que necesitábamos, ¡coloquemos nuestra base de datos que diseñamos en nuestra Raspberry Pi!

Entonces, primero tenemos que reenviar la ingeniería de nuestra base de datos en el banco de trabajo MySql, mientras lo hacemos, copie el código completo de su base de datos y elimine todas las palabras 'visibles' que contiene. Entonces, una vez que se haya copiado, abramos la masilla nuevamente, inicie sesión y escriba:

sudo mysql

y ahora está en la interfaz mysql, copie el código de su base de datos y presione enter.

Ahora solo necesitamos crear un usuario

CREAR USUARIO 'usuario' IDENTIFICADO POR 'usuario';

OTORGAR TODOS LOS PRIVILEGIOS EN *. * A 'usuario';

Ahora reinicie.

Entonces, todo debería estar configurado ahora, también puede hacer una conexión con su Pi y MySql Workbench, por lo que es más fácil verificar todos los datos en sus tablas.

Paso 6: configurar Bluetooth en nuestro RPi

Estamos creando un altavoz Bluetooth, por lo que esto significa que los medios se están enviando desde nuestra fuente a la Raspberry Pi y esto se puede hacer con bastante facilidad, ¡empecemos!

Mi fuente para la conexión bluetooth:

Eliminando el bluealsa que ya se está ejecutando

sudo rm / var / run / bluealsa / *

Agregue el rol de receptor de perfil A2DP

sudo bluealsa -p a2dp-sink &

Abra la interfaz bluetooth y encienda su bluetooth

bluetoothctl

encendido

Configure un agente de emparejamiento

agente en

agente-predeterminado

Haz que tu RPi sea reconocible

visible en

  • Ahora, desde su dispositivo bluetooth, busque el RPi y conéctese con él.
  • Confirme el emparejamiento en ambos dispositivos, escriba 'sí' en su masilla.
  • Autorice el servicio A2DP, escriba 'sí' nuevamente.
  • Una vez hecho esto, podemos confiar en nuestro dispositivo, por lo que no tenemos que pasar por todo esto cada vez que queremos conectarnos.

confíe en XX: XX: XX: XX: XX: XX (su dirección mac bluetooth de nuestro dispositivo de origen)

Si desea que su RPi siga siendo visible, es su propia elección, pero prefiero apagarlo nuevamente, para que la gente no pueda intentar conectarse con su caja

visible fuera

Entonces podemos salir de nuestra interfaz bluetooth

Salida

Y finalmente nuestro enrutamiento de audio: nuestro dispositivo de origen que reenvía a nuestro RPi

bluealsa-aplay 00: 00: 00: 00: 00: 00

Ahora nuestro dispositivo está completamente conectado a nuestra Raspberry y debería poder reproducir medios desde su dispositivo fuente en el altavoz Pi.

Paso 7: escribir el backend completo

Entonces, ahora que la configuración está lista, ¡finalmente podemos comenzar a escribir nuestro programa de backend!

Usé PyCharm para todo mi backend, solo necesita asegurarse de que su proyecto PyCharm esté conectado a su Raspberry Pi, esto significa que su ruta de implementación está configurada en su configuración y que instaló todos los paquetes que necesitamos, ya debería estar hecho en el paso 4.

Usé mis propias clases y estas también están incluidas en mi GitHub. El enlace está en la introducción en caso de que te lo hayas perdido;)

En mi archivo de backend usé clases de subprocesos, por lo que todo puede ejecutarse al mismo tiempo y no se interrumpen entre sí. Y en la parte inferior tiene todas las rutas para que podamos obtener datos fácilmente en nuestra interfaz.

Paso 8: escribir el frontend (HTML, CSS y JavaScript)

Ahora que el backend está listo, podemos comenzar a escribir el front-end completo.

HTML y CSS se hizo bastante fácil, primero intenté trabajar en dispositivos móviles tanto como fue posible, ya que la mayoría de las veces nos conectamos con Bluetooth desde un dispositivo móvil, sería más fácil de controlar desde un panel de control móvil.

Puede diseñar su tablero de la forma que desee, solo dejaré mi código y diseño aquí, ¡puede hacer lo que quiera!

Y Javascript no fue tan difícil, funcionó con algunos GET de mis rutas de backend, toneladas de oyentes de eventos y algunas estructuras de socketio.

Paso 9: Construir mi caso y ponerlo todo junto

Construyendo mi caso y poniéndolo todo junto
Construyendo mi caso y poniéndolo todo junto
Construyendo mi caso y poniéndolo todo junto
Construyendo mi caso y poniéndolo todo junto
Construyendo mi caso y poniéndolo todo junto
Construyendo mi caso y poniéndolo todo junto

Primero comencé con algunos bocetos de cómo quería que se viera la carcasa, algo importante era que tenía que ser lo suficientemente grande para que todo encajara, ya que teníamos un gran circuito para colocar en la maleta.

Hice el estuche de madera, creo que es más fácil trabajar con él cuando no tienes tanta experiencia en la construcción de estuches y también tienes muchas cosas que puedes hacer con él.

Empecé con un estuche para botellas de vino y comencé a aserrar la madera. Una vez que tuve mi estuche básico, solo tuve que perforarle agujeros (muchos en la parte frontal del estuche, como se puede ver en las fotos: P) y ponerle algunos clavos, es un estuche realmente básico, pero se ve muy bien y queda perfecto.

Y una vez que el caso estuvo terminado, llegó el momento de ponerlo todo junto, como puede ver en la última imagen. Es un poco desordenado dentro de la caja, pero todo funciona y no tenía mucho más espacio, así que te aconsejo que tal vez crees un caso más grande si estás recreando mi proyecto.

Paso 10: Algunos problemas que tuve en mi camino para crear el altavoz Slimbox …

Errores de bluetooth y bluealsa

Cada vez que quería reproducir música o conectarme con bluetooth, recibía errores de bluetooth y bluealsa. Investigué un poco y esta fue la solución a mi problema. Entonces, por alguna razón, mi bluetooth fue bloqueado por software, no estoy seguro de si esto es estándar por bloqueo suave. Puedes ver si es así escribiendo el siguiente comando en tu Putty.

lista de rfkill

Entonces, si está bloqueado por software, solo use esto:

rfkill desbloquear bluetooth

Y es posible que desee reiniciar después de esto, mi fuente:

Problemas de conexión en serie

Entonces, otro gran problema que tuve fue que no pude hacer ninguna conexión con mi Arduino a través del cambiador de nivel, después de algunas búsquedas descubrí que mi '/ dev / ttyS0' se había ido y esto podría deberse a una actualización de su RPi. También encontré una solución a esto

Tendrá que volver a habilitar la consola serie con raspi-config, reiniciar y luego eliminar manualmente el bit "console = serial0, 115200" de '/boot/cmdline.txt'. Confirme que "enable_uart = 1" está en' /boot/config.txt ', y reinicie nuevamente. Eso debería recuperar su puerto ttyS0, así como el enlace suave' / dev / serial0 '.

Fuente:

Recomendado: