Sommario:

Slimbox: un altoparlante Bluetooth intelligente!: 10 passaggi (con immagini)
Slimbox: un altoparlante Bluetooth intelligente!: 10 passaggi (con immagini)

Video: Slimbox: un altoparlante Bluetooth intelligente!: 10 passaggi (con immagini)

Video: Slimbox: un altoparlante Bluetooth intelligente!: 10 passaggi (con immagini)
Video: X96 MINI PLUS | BOX TV ANDROID A MOINS DE -30€| ANDROID 9. 2024, Luglio
Anonim
Slimbox: un altoparlante Bluetooth intelligente!
Slimbox: un altoparlante Bluetooth intelligente!

Ehilà!

Per il mio progetto scolastico presso MCT Howest Kortrijk, ho realizzato un dispositivo altoparlante Bluetooth intelligente con diversi sensori, incluso un anello LCD e RGB NeoPixel. Tutto gira sul Raspberry Pi (Database, Webserver, Backend).

Quindi in questo tutorial ti mostrerò come ho realizzato questo progetto in 3 settimane, passo dopo passo, quindi se qualcuno di voi vuole ricreare il mio progetto, può farlo facilmente!

Questo è anche il mio primo istruibile, se hai domande, cercherò di rispondere il più rapidamente possibile!

Il mio GitHub:

Passaggio 1: materiali di consumo

Forniture
Forniture
Forniture
Forniture
Forniture
Forniture

Sensore di temperatura DS18B20

Il DS18B20 è un sensore a un filo che misura la temperatura, prodotto da Maxim Integrated. Ci sono 2 tipi di sensori DS18B20, il solo componente (che ho usato io) e la versione impermeabile, che è molto più grande, ma non è quello che mi serviva per il mio progetto, quindi ho usato solo il componente. Il sensore può misurare la temperatura in un intervallo da -55°C a +125°C (da -67°F a +257°F) e ha una precisione di 0,5°C da -10°C a +85°C. Ha anche una risoluzione programmabile da 9 bit a 12 bit.

Scheda tecnica:

Sensore potenziometro

Un potenziometro è un resistore a tre terminali che è regolabile manualmente ruotando semplicemente la parte superiore del sensore. La posizione della parte superiore determina la tensione di uscita del potenziometro.

LSM303 Accelerometro + Bussola Breakout

La breakout board LSM303 è una combinazione di un accelerometro a tre assi e un magnetometro/bussola, prodotto da Adafruit. Viene utilizzato con l'interfaccia I2C del Raspberry Pi.

Panoramica:

Scheda tecnica:

MCP3008

Per leggere i dati dal mio potenziometro ho usato un MCP3008, che è un convertitore analogico/digitale a 8 canali a 10 bit con interfaccia SPI ed è abbastanza facile da programmare.

Scheda tecnica:

Altoparlante – Diametro 3” – 8 Ohm 1 Watt

Questo è il cono dell'altoparlante che ho scelto dopo aver calcolato la tensione e gli ampere di cui avrebbe avuto bisogno e questo era perfetto per il mio progetto Raspberry Pi, prodotto da Adafruit.

Panoramica:

MAX98357 Amplificatore mono in classe D I2S

Questo è l'amplificatore che viene fornito con l'altoparlante, non solo è un amplificatore, è anche un convertitore da digitale ad analogico I2S, quindi è anche perfetto per il mio sistema di altoparlanti e audio.

Panoramica:

Scheda tecnica:

Arduino Uno

Arduino Uno è una scheda microcontrollore open source basata sul microcontrollore Microchip ATmega328P, prodotta da Arduino.cc. La scheda Uno ha 14 pin digitali, 6 pin analogici ed è completamente programmabile con il software Arduino IDE

Panoramica:

Traslatore di livello

Questa è una piccola scheda che si occupa della comunicazione tra Arduino Uno e Raspberry Pi e le diverse tensioni, Arduino: 5V e Raspberry Pi: 3.3V. Questo è necessario perché l'anello NeoPixel è collegato all'Arduino e gira lì, mentre tutte le altre cose girano sul Raspberry Pi.

Anello NeoPixel RGB

Questo è un piccolo anello riempito con 12 led RGB (puoi acquistare anelli più grandi con più led RGB, se lo desideri). Che nel mio caso è collegato all'Arduino Uno, ma può essere collegato anche a molti altri dispositivi ed è davvero semplice da usare.

Panoramica:

Display LCD 16x2

Ho usato un display LCD di base per stampare la mia temperatura, volume e indirizzo IP.

Scheda tecnica:

Scheda SD Raspberry Pi 3B+ e 16GB

Il mio intero progetto viene eseguito sul mio Raspberry Pi 3B+ con un'immagine configurata, che ti aiuterò a configurare in seguito nel mio istruibile.

GPIO T-Part, 2 breadboard e tanti ponticelli

Per collegare tutto ciò di cui avevo bisogno breadboard e jumperwire, ho usato la parte T GPIO in modo da avere più spazio ed è chiaro quale pin è quale.

Passaggio 2: schema e cablaggio

Schema e cablaggio
Schema e cablaggio
Schema e cablaggio
Schema e cablaggio
Schema e cablaggio
Schema e cablaggio

Per il mio schema ho usato Fritzing, è un programma che puoi installare che ti permette di creare uno schema davvero facile in diversi tipi di viste.

Scarica Fritzing:

Quindi assicurati di collegare tutto nel modo giusto! Nel mio caso i colori dei fili non sono gli stessi dello schema.

Passaggio 3: progettazione del database

Progettazione database
Progettazione database

Stiamo raccogliendo molti dati dai 3 sensori collegati, quindi abbiamo bisogno di un database in cui archiviare dati e sensori. Più avanti vedremo come configurare il database sul Raspberry Pi e come aggiungere dati ad esso. Ma prima deve essere realizzato il progetto del database o ERD (Entity Relationship Diagram) e anche il mio è stato normalizzato con 3NF. Ecco perché dividiamo i sensori in un'altra tabella e lavoriamo con gli ID.

Nel complesso, questo è un progetto di database davvero semplice e semplice con cui lavorare ulteriormente.

Passaggio 4: preparare il Raspberry Pi

Quindi ora che abbiamo fatto alcune basi del progetto. Iniziamo con il Raspberry Pi!

Configurazione della scheda SD

Innanzitutto, è necessaria una scheda SD da 16 GB su cui inserire l'immagine e un programma per caricare un'immagine iniziale sulla scheda SD.

Software:

Immagine iniziale:

Quindi una volta scaricati questi:

  1. Metti la tua scheda SD nel tuo computer.
  2. Apri Win32 che hai appena scaricato.
  3. Seleziona il file immagine Raspbian che hai appena scaricato.
  4. Fare clic su "scrivi" nella posizione della scheda SD.

Questa operazione potrebbe richiedere del tempo, a seconda dell'hardware. Fatto ciò, siamo pronti per apportare alcune modifiche finali prima di inserire l'immagine nel nostro RPi.

  1. Vai alla directory della tua scheda SD, cerca il file chiamato "cmdline.txt" e aprilo.
  2. Ora aggiungi 'ip=169.254.10.1' sulla stessa riga.
  3. Salva il file.
  4. Crea un file chiamato 'ssh' senza estensione o contenuto.

Ora puoi espellere SICURAMENTE la scheda SD dal tuo computer e inserirla nel Raspberry Pi SENZA alimentazione. Una volta che la scheda SD è nell'RPI, collegare un cavo LAN dal computer alla porta LAN dell'RPi, una volta collegata è possibile collegare l'alimentazione all'RPi.

Ora vogliamo controllare il nostro Raspberry Pi, questo viene fatto tramite Putty.

Software Putty:

Una volta scaricato, apri Putty e inserisci l'IP '169.254.10.1' e la porta '22' e il tipo di connessione: SSH. Ora possiamo finalmente aprire la nostra interfaccia a riga di comando e accedere con le informazioni di accesso di avvio -> Utente: pi e Password: raspberry.

Raspi-config

sudo raspi-config

Ciò che è veramente importante per questo progetto è la sezione interfacciamento, dobbiamo abilitare molte interfacce diverse, abilitare tutte le seguenti interfacce:

  • Un filo
  • SPI
  • I2C
  • Seriale

Ora che abbiamo finito con raspi-config, proviamo a stabilire una connessione con Internet.

Connessione wifi

Innanzitutto, devi essere root per i seguenti comandi

sudo -i

Una volta che sei root, usa il seguente comando. SSID è il nome della tua rete e la password è ovviamente la password.

wpa_passphrase "ssid" "password" >> /etc/wpa_supplicant/wpa_supplicant.conf

Nel caso in cui tu abbia commesso un errore, puoi controllare, aggiornare o eliminare questa rete semplicemente inserendo quel file:

nano /etc/wpa_supplicant/wpa_supplicant.conf

Quindi, dopo essere entrati nella nostra rete, entriamo nell'interfaccia client WPA

wpa_cli

Seleziona la tua interfaccia

interfaccia wlan0

Ricarica il file

riconfigurare

E finalmente puoi vedere se sei connesso bene:

ip a

Aggiorna e aggiorna

Ora che siamo connessi a Internet, aggiornare i pacchetti già installati sarebbe una mossa intelligente, quindi facciamolo prima di installare altri pacchetti.

sudo apt-get update

sudo apt-get upgrade

Database MariaDB

Installa il server del database MariaDB:

sudo apt-get install mariadb-server

Server Web Apache2

Installa il server web Apache2:

sudo apt install apache2

Pitone

Installa Python:

update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1

update-alternatives --install /usr/bin/python python /usr/bin/python3 2

Pacchetto Python

Dovrai installare tutti questi pacchetti per far funzionare perfettamente il backend:

  • Borraccia
  • Flask-Cors
  • Flask-MySql
  • Flask-SocketIO
  • PyMySQL
  • Richieste
  • Python-socketio
  • RPi. GPIO
  • Gevent
  • Gevent-websocket
  • Ujson
  • Wsaccel

Libreria dei relatori

Installa la libreria di altoparlanti da Adafruit:

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

È ora di riavviare

sudo reboot

Passaggio 5: progettare in avanti il nostro database per RPi

Ora che abbiamo installato tutto ciò di cui avevamo bisogno, mettiamo il nostro database che abbiamo progettato sul nostro Raspberry Pi!

Quindi, prima dobbiamo inoltrare l'ingegnere al nostro database nel workbench MySql, mentre lo facciamo, copia il codice completo del database ed elimina tutte le parole "visibili" in esso. Quindi, una volta copiato, apriamo nuovamente stucco, accedi e digita:

sudo mysql

e ora sei nell'interfaccia mysql, copia il codice del database e premi invio.

Ora dobbiamo solo creare un utente

CREA UTENTE 'utente' IDENTIFICATO DA 'utente';

CONCEDERE TUTTI I PRIVILEGI SU *.* A 'utente';

Ora riavvia.

Quindi tutto dovrebbe essere configurato ora, puoi anche stabilire una connessione con il tuo Pi e MySql Workbench, quindi è più facile controllare tutti i dati nelle tue tabelle.

Passaggio 6: configurazione del Bluetooth sul nostro RPi

Stiamo creando un altoparlante Bluetooth, quindi questo significa che i media vengono inviati dalla nostra fonte al Raspberry Pi e questo può essere fatto abbastanza facilmente, entriamoci subito!

La mia fonte per la connessione bluetooth:

Rimozione del bluealsa già in esecuzione

sudo rm /var/run/bluealsa/*

Aggiungi profilo A2DP Ruolo sink

sudo bluealsa -p a2dp-sink &

Apri l'interfaccia bluetooth e accendi il bluetooth

bluetoothctl

accensione

Configura un agente di associazione

agente attivo

agente-predefinito

Rendi rilevabile il tuo RPi

rilevabile su

  • Ora dal tuo dispositivo bluetooth, cerca l'RPi e connettiti con esso.
  • Conferma l'associazione su entrambi i dispositivi, digita "sì" nel tuo mastice.
  • Autorizza il servizio A2DP, digita di nuovo "sì".
  • Una volta fatto questo, possiamo fidarci del nostro dispositivo, quindi non dobbiamo fare tutto questo ogni volta che vogliamo connetterci

fidati di XX:XX:XX:XX:XX:XX (il tuo indirizzo mac bluetooth dal nostro dispositivo di origine)

Se vuoi che il tuo RPi continui a essere rilevabile, è una tua scelta, ma preferisco disattivarlo di nuovo, in modo che le persone non possano provare a connettersi con la tua scatola

rilevabile spento

Quindi possiamo uscire dalla nostra interfaccia bluetooth

Uscita

E infine il nostro routing audio: il nostro dispositivo sorgente che inoltra al nostro RPi

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

Ora il nostro dispositivo è completamente connesso al nostro Raspberry e dovresti essere in grado di riprodurre contenuti multimediali dal tuo dispositivo sorgente sull'altoparlante Pi.

Passaggio 7: scrivere il backend completo

Quindi ora che l'installazione è terminata, possiamo finalmente iniziare a scrivere il nostro programma di backend!

Ho usato PyCharm per tutto il mio backend, devi solo assicurarti che il tuo progetto PyCharm sia connesso al tuo Raspberry Pi, questo significa che il tuo percorso di distribuzione è impostato nelle tue impostazioni e hai installato tutti i pacchetti di cui abbiamo bisogno, dovrebbe essere già fatto nel passaggio 4.

Ho usato le mie classi e anche queste sono tutte incluse nel mio GitHub. Il link è nell'introduzione nel caso ve lo foste perso;)

Nel mio file di backend ho usato le classi di threading, quindi tutto può essere eseguito contemporaneamente e non si interromperà a vicenda. E in fondo hai tutti i percorsi in modo che possiamo facilmente ottenere i dati nel nostro frontend.

Passaggio 8: scrittura del frontend (HTML, CSS e JavaScript)

Ora che il backend è terminato, possiamo iniziare a scrivere il front-end completo.

HTML e CSS sono stati fatti abbastanza facilmente, ho provato a lavorare il più possibile mobile prima, dal momento che la maggior parte delle volte ci connettiamo con Bluetooth da un dispositivo mobile, sarebbe più facile controllarlo da una dashboard mobile.

Puoi progettare la tua dashboard in qualsiasi modo tu voglia, lascerò solo il mio codice e il mio design qui, puoi fare quello che vuoi!

E Javascript non è stato così difficile, ha funzionato con alcuni GET dei miei percorsi di backend, tonnellate di ascoltatori di eventi e alcune strutture socketio.

Passaggio 9: costruire il mio caso e mettere tutto insieme

Costruire il mio caso e mettere tutto insieme
Costruire il mio caso e mettere tutto insieme
Costruire il mio caso e mettere tutto insieme
Costruire il mio caso e mettere tutto insieme
Costruire il mio caso e mettere tutto insieme
Costruire il mio caso e mettere tutto insieme

Per prima cosa ho iniziato con alcuni schizzi di come volevo che fosse il case, qualcosa di importante era che doveva essere abbastanza grande da contenere tutto, dato che avevamo un grande circuito da inserire nel case.

Ho realizzato la custodia in legno, penso che sia il modo più semplice con cui lavorare quando non hai molta esperienza con la costruzione di custodie e hai anche molte cose che puoi fare con essa.

Sono partito da una custodia per bottiglie di vino e ho appena iniziato a segare il legno. Una volta che ho avuto la mia custodia di base, ho dovuto solo praticare dei fori (molti sulla parte anteriore della custodia, come puoi vedere nelle foto:P) e metterci dei chiodi, è una custodia davvero semplice, ma sembra piuttosto bello e si adatta perfettamente.

E una volta che il caso è stato fatto, è arrivato il momento di mettere tutto insieme, come puoi vedere nell'ultima foto! È un po' un casino all'interno della scatola, ma funziona tutto e non avevo molto più spazio, quindi ti consiglio di creare una custodia più grande se stai ricreando il mio progetto.

Passaggio 10: alcuni problemi che ho riscontrato durante la creazione dell'altoparlante Slimbox…

Errori Bluetooth e bluealsa

Ogni volta che volevo riprodurre musica o connettermi con il bluetooth, ricevevo errori da bluetooth e bluealsa. Ho fatto qualche ricerca su di esso e questa è stata la soluzione al mio problema. Quindi, per qualche motivo, il mio bluetooth è stato bloccato, non sono sicuro che questo sia un blocco software standard. Puoi vedere se lo è digitando il seguente comando nel tuo Putty.

lista rfkill

Quindi, se è softblock, usa questo:

rfkill sblocca il bluetooth

E potresti voler riavviare dopo questo, la mia fonte:

Problemi di connessione seriale

Quindi un altro grosso problema che ho avuto è stato che non potevo stabilire alcuna connessione con il mio Arduino tramite il levelshifter, dopo alcune ricerche ho scoperto che il mio "/dev/ttyS0" era sparito e questo potrebbe essere dovuto a un aggiornamento del tuo RPi. Ho trovato una soluzione anche su questo

Dovrai riabilitare la console seriale con raspi-config, riavviare e quindi rimuovere manualmente il bit "console=serial0, 115200" da '/boot/cmdline.txt'. Conferma che "enable_uart=1" è in ' /boot/config.txt' e riavviare di nuovo. Ciò dovrebbe riavere la porta ttyS0, così come il collegamento software '/dev/serial0' ad essa.

Fonte:

Consigliato: