Taula de continguts:

Slimbox: un altaveu intel·ligent Bluetooth: 10 passos (amb imatges)
Slimbox: un altaveu intel·ligent Bluetooth: 10 passos (amb imatges)

Vídeo: Slimbox: un altaveu intel·ligent Bluetooth: 10 passos (amb imatges)

Vídeo: Slimbox: un altaveu intel·ligent Bluetooth: 10 passos (amb imatges)
Vídeo: Обзор мини роботов Orbotix. Гаджетариум #123 2024, De novembre
Anonim
Slimbox: un altaveu intel·ligent Bluetooth
Slimbox: un altaveu intel·ligent Bluetooth

Hola!

Per al meu projecte escolar a MCT Howest Kortrijk, vaig fabricar un dispositiu d'altaveus Bluetooth intel·ligent amb diferents sensors, un LCD i un anell NeoPixel RGB inclosos. Tot funciona al Raspberry Pi (base de dades, servidor web, backend).

Així que en aquest instructiu us mostraré com he creat aquest projecte en 3 setmanes, pas a pas, així que si algú de vosaltres vol recrear el meu projecte, ho podeu fer fàcilment.

Aquesta és també la meva primera instrucció, si teniu alguna pregunta, intentaré respondre-les el més aviat possible.

El meu GitHub:

Pas 1: subministraments

Subministraments
Subministraments
Subministraments
Subministraments
Subministraments
Subministraments

Sensor de temperatura DS18B20

El DS18B20 és un sensor d’un fil que mesura la temperatura, fabricat per Maxim Integrated. Hi ha 2 tipus de sensors DS18B20, només el component (que he utilitzat) i la versió impermeable, que és molt més gran, però això no és el que necessitava per al meu projecte, de manera que només he utilitzat el component. El sensor pot mesurar la temperatura en un rang de -55 ° C a + 125 ° C (-67 ° F a + 257 ° F) i té una precisió de 0,5 ° C des de -10 ° C fins a + 85 ° C. També té una resolució programable de 9 bits a 12 bits.

Full de dades:

Sensor de potenciòmetre

Un potenciòmetre és una resistència amb tres terminals que es pot ajustar manualment només girant la part superior del sensor. La posició de la part superior determina la tensió de sortida del potenciòmetre.

LSM303 Accelerometer + Brúixola Breakout

La placa de ruptura LSM303 és una combinació d’un acceleròmetre de triple eix i un magnetòmetre / brúixola, fabricat per Adafruit. S'utilitza amb la interfície I2C del Raspberry Pi.

Visió general:

Full de dades:

MCP3008

Per llegir les dades del meu potenciòmetre vaig fer servir un MCP3008, que és un convertidor analògic a digital de 8 canals de 10 bits amb interfície SPI i que és bastant fàcil de programar.

Full de dades:

Altaveu - Diàmetre de 3”- 8 Ohm 1 watt

Aquest és el con de l’altaveu que vaig triar després de calcular el voltatge i els amperes que necessitaria i aquest va ser un ajust perfecte per al meu projecte Raspberry Pi, fabricat per Adafruit.

Visió general:

MAX98357 Amplificador mono classe I2S I2S

Aquest és l’amplificador que ve amb l’altaveu, no només és un amplificador, sinó que també és un convertidor digital a analògic I2S, de manera que també s’adapta perfectament al meu sistema d’àudio i altaveus.

Visió general:

Full de dades:

Arduino Uno

L'Arduino Uno és una placa de microcontrolador de codi obert basada en el microcontrolador Microchip ATmega328P, fabricat per Arduino.cc. La placa Uno té 14 pins digitals, 6 pins analògics i és totalment programable amb el programari Arduino IDE

Visió general:

Levelshifter

Es tracta d’una petita placa que s’encarrega de la comunicació entre l’Arduino Uno i el Raspberry Pi i les diferents tensions, Arduino: 5V i Raspberry Pi: 3,3V. Això és necessari perquè l'anell NeoPixel està connectat a l'Arduino i funciona allà, mentre que la resta de coses s'executen al Raspberry Pi.

Anell NeoPixel RGB

Es tracta d’un petit anell ple de 12 leds RGB (si voleu, podeu comprar anells més grans amb més leds RGB). Que està connectat al meu cas a l’Arduino Uno, però també es pot connectar a molts altres dispositius i és molt senzill d’utilitzar.

Visió general:

Pantalla LCD 16x2

Vaig utilitzar una pantalla LCD bàsica per imprimir la temperatura, el volum i l'adreça IP.

Full de dades:

Raspberry Pi 3B + i targeta SD de 16 GB

Tot el meu projecte s'executa al meu Raspberry Pi 3B + amb una imatge configurada, que us ajudaré a configurar més endavant en la meva instrucció.

GPIO T-Part, 2 taules de pa i molts cables

Per connectar tot el que necessitava taulers de connexió i cables de connexió, he utilitzat la peça GPIO T, de manera que tinc més espai i queda clar quin pin és quin.

Pas 2: Esquema i cablejat

Esquema i cablejat
Esquema i cablejat
Esquema i cablejat
Esquema i cablejat
Esquema i cablejat
Esquema i cablejat

Per al meu esquema he utilitzat Fritzing, és un programa que podeu instal·lar que us permet crear un esquema molt fàcil en diferents tipus de vistes.

Descarregueu Fritzing:

Així que assegureu-vos de connectar-ho tot de la manera correcta. En el meu cas, els colors dels cables no són els mateixos que en l’esquema.

Pas 3: disseny de bases de dades

Disseny de bases de dades
Disseny de bases de dades

Estem recopilant moltes dades dels 3 sensors connectats, de manera que necessitem una base de dades per emmagatzemar-ne les dades i els sensors. Més endavant veurem com configurar la base de dades al Raspberry Pi i com afegir-hi dades. Però primer s’ha de fer el disseny de la base de dades o ERD (Entity Relationship Diagram) i el meu també es va normalitzar amb 3NF. Per això, dividim els sensors en una altra taula i treballem amb identificadors.

En general, es tracta d’un disseny de base de dades realment bàsic i senzill per poder continuar treballant.

Pas 4: Preparació del Raspberry Pi

Ara, doncs, ja tenim fets alguns aspectes bàsics del projecte. Comencem amb el Raspberry Pi.

Configuració de la targeta SD

Primer, necessiteu una targeta SD de 16 GB on pugueu posar la vostra imatge i un programa per penjar una imatge inicial a la targeta SD.

Programari:

Imatge d'inici:

Per tant, un cop descarregats:

  1. Introduïu la targeta SD a l'ordinador.
  2. Obriu Win32 que acabeu de descarregar.
  3. Seleccioneu el fitxer d'imatge Raspbian que també acabeu de descarregar.
  4. Feu clic a "escriu" a la ubicació de la vostra targeta SD.

Això pot trigar una mica, segons el vostre maquinari. Un cop fet això, estem preparats per fer alguns ajustos finals abans de posar la imatge al nostre RPi.

  1. Aneu al directori de la vostra targeta SD, cerqueu el fitxer anomenat "cmdline.txt" i obriu-lo.
  2. Ara afegiu 'ip = 169.254.10.1' a la mateixa línia.
  3. Deseu el fitxer.
  4. Creeu un fitxer anomenat 'ssh' sense extensió ni contingut.

Ara podeu expulsar de manera segura la targeta SD de l’ordinador i posar-la al Raspberry Pi SENSE alimentació. Un cop la targeta SD estigui al RPI, connecteu un cable LAN des de l'ordinador al port LAN RPi; un cop connectat, podreu connectar l'alimentació al RPi.

Ara volem controlar el nostre Raspberry Pi, això es fa mitjançant Putty.

Programari de massilla:

Un cop descarregat, obriu Putty i inseriu la IP '169.254.10.1' i el port '22' i el tipus de connexió: SSH. Ara, finalment, podem obrir la nostra interfície de línia d’ordres i iniciar la sessió amb la informació d’inici de sessió d’inici -> Usuari: pi i contrasenya: raspberry.

Raspi-config

sudo raspi-config

El que és realment important per a aquest projecte és la secció d’interfície, hem d’habilitar moltes interfícies diferents, habilitar totes les interfícies següents:

  • Un fil
  • SPI
  • I2C
  • En sèrie

Ara que hem acabat amb raspi-config, intentem establir una connexió amb Internet.

Connexió Wi-Fi

Primer, heu de ser root per a les ordres següents

sudo -i

Un cop hàgiu estat root, utilitzeu l'ordre següent. SSID és el nom de la vostra xarxa i la contrasenya és evidentment la seva contrasenya.

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

En cas que us cometeu un error, podeu comprovar, actualitzar o eliminar aquesta xarxa només introduint aquest fitxer:

nano /etc/wpa_supplicant/wpa_supplicant.conf

Per tant, després d’entrar a la nostra xarxa, entrem a la interfície del client WPA

wpa_cli

Seleccioneu la vostra interfície

interfície wlan0

Torneu a carregar el fitxer

reconfigurar

I, finalment, podeu veure si esteu ben connectat:

ip a

Actualització i actualització

Ara que estem connectats a Internet, actualitzar els paquets ja instal·lats seria un moviment intel·ligent, així que fem-ho primer abans d’instal·lar altres paquets.

sudo apt-get update

sudo apt-get upgrade

Base de dades MariaDB

Instal·leu el servidor de bases de dades MariaDB:

sudo apt-get install mariadb-server

Servidor web Apache2

Instal·leu el servidor web Apache2:

sudo apt install apache2

Python

Instal·leu Python:

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

actualització-alternatives --install / usr / bin / python python / usr / bin / python3 2

Paquet Python

Haureu d’instal·lar tots aquests paquets perquè el dorsal funcioni perfectament:

  • Flascó
  • Flask-Cors
  • Flask-MySql
  • Flask-SocketIO
  • PyMySQL
  • Sol·licituds
  • Python-socketio
  • RPi. GPIO
  • Gevent
  • Gevent-websocket
  • Ujson
  • Wsaccel

Biblioteca de ponents

Instal·leu la biblioteca d’altaveus d’Adafruit:

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

És hora de reiniciar

sudo reiniciar

Pas 5: reenvieu la nostra base de dades al RPi

Ara que hem instal·lat tot el que necessitàvem, posem la nostra base de dades que vam dissenyar al nostre Raspberry Pi.

Per tant, primer hem de reenviar la nostra base de dades al banc de treball MySql, mentre ho fem, copieu el codi de la base de dades completa i suprimiu totes les paraules "visibles" que hi apareixen. Per tant, un cop copiat, deixeu de tornar a obrir massilla, inicieu la sessió i escriviu:

sudo mysql

i ara esteu a la interfície mysql, copieu-hi el codi de la base de dades i premeu Retorn.

Ara només hem de crear un usuari

CREA "usuari" d'USUARI IDENTIFICAT PER "usuari";

CONCEDIU TOTS ELS PRIVILEGIUS EN *. * A "usuari";

Ara reinicieu.

Per tant, tot s’hauria de configurar ara, també podeu establir una connexió amb el vostre Pi i MySql Workbench, de manera que és més fàcil comprovar totes les dades de les vostres taules.

Pas 6: Configuració del Bluetooth al nostre RPi

Estem creant un altaveu Bluetooth, de manera que això significa que s’envia el contingut multimèdia des de la nostra font al Raspberry Pi i això es pot fer molt fàcilment, anem-hi directament.

La meva font per a la connexió bluetooth:

S'està suprimint el bluealsa que ja s'està executant

sudo rm / var / run / bluealsa / *

Afegeix un perfil de dissipador A2DP

sudo bluealsa -p a2dp-sink &

Obriu la interfície bluetooth i engegueu el bluetooth

bluetoothctl

encès

Configureu un agent de sincronització

agent activat

agent per defecte

Feu que el vostre RPi sigui descoberta

descoberta el

  • Ara, des del dispositiu bluetooth, cerqueu el RPi i connecteu-vos-hi.
  • Confirmeu l’aparellament en ambdós dispositius i escriviu “sí” a la massilla.
  • Autoritzeu el servei A2DP, torneu a escriure "sí".
  • Un cop fet això, podem confiar en el nostre dispositiu, de manera que no hem de passar per això cada vegada que ens vulguem connectar

confiar en XX: XX: XX: XX: XX: XX (la vostra adreça de Bluetooth del nostre dispositiu d'origen)

Si voleu que el vostre RPi pugui continuar sent descobert, aquesta és la vostra pròpia elecció, però prefereixo tornar-lo a apagar, de manera que la gent no pugui intentar connectar-se amb la vostra caixa

es pot descobrir

Després podem sortir de la nostra interfície bluetooth

sortir

I, finalment, el nostre encaminament d’àudio: el reenviament del nostre dispositiu font al nostre RPi

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

Ara el nostre dispositiu està completament connectat al nostre gerd i hauríeu de poder reproduir contingut multimèdia des del dispositiu font a l’altaveu Pi.

Pas 7: escriure el backend complet

Ara, doncs, la configuració està acabada, per fi podem començar a escriure el nostre programa de backend.

He utilitzat PyCharm per a tot el meu backend, només heu d'assegurar-vos que el vostre projecte PyCharm estigui connectat al vostre Raspberry Pi, això vol dir que el vostre camí de desplegament està configurat a la vostra configuració i que heu instal·lat tots els paquets que necessitem, ja s'hauria de fer al pas 4.

He utilitzat les meves pròpies classes i aquestes també estan incloses al meu GitHub. L'enllaç apareix a la introducció per si l'heu perdut;)

Al meu fitxer de fons he utilitzat classes de threading, de manera que tot pot funcionar al mateix temps i no s’interromprà. I a la part inferior teniu totes les rutes perquè puguem obtenir dades fàcilment a la nostra interfície.

Pas 8: escriure el Frontend (HTML, CSS i JavaScript)

Ara que el backend està acabat, podem començar a escriure el frontal complet.

HTML i CSS es van fer bastant fàcilment, es va intentar treballar el mòbil primer el màxim possible, ja que la majoria de les vegades ens connectem amb Bluetooth des d’un dispositiu mòbil, seria més fàcil controlar-ho des d’un tauler de control mòbil.

Podeu dissenyar el tauler de la manera que vulgueu, només deixaré el meu codi i dissenyaré aquí, podreu fer el que vulgueu.

I Javascript no va ser tan dur, va treballar amb alguns GET de les meves rutes de backend, un munt d’oients d’esdeveniments i algunes estructures de socketio.

Pas 9: Construir el meu cas i unir-ho tot

Construint el meu cas i unint-ho tot
Construint el meu cas i unint-ho tot
Construint el meu cas i unint-ho tot
Construint el meu cas i unint-ho tot
Construint el meu cas i unint-ho tot
Construint el meu cas i unint-ho tot

Primer vaig començar amb alguns esbossos de com volia que quedés el cas, una cosa important era que havia de ser prou gran perquè hi cabés tot, ja que teníem un gran circuit per col·locar a la caixa.

Vaig fer el cas amb fusta, crec que és el més fàcil de treballar quan no es té tanta experiència amb la construcció de caixes i també s’hi poden fer moltes coses.

Vaig partir d’un estoig per a ampolles de vi i vaig començar a serrar la fusta. Un cop tenia el meu cas bàsic, només havia de fer-hi forats (molt a la part frontal de la caixa, com podeu veure a les imatges: P) i posar-hi uns claus, és un cas molt bàsic, però es veu bastant genial i s’adapta perfectament.

I un cop acabat el cas, era el moment de reunir-ho tot, com podeu veure a la darrera imatge. És una mica un embolic dins de la caixa, però tot funciona i no tenia molt més espai, així que us aconsello que creeu un cas més gran si esteu recreant el meu projecte.

Pas 10: Alguns problemes que vaig tenir en el meu camí per crear l’altaveu Slimbox …

Errors de Bluetooth i bluealsa

Sempre que volia reproduir música o connectar-me amb bluetooth, rebia errors de bluetooth i bluealsa. Vaig investigar-hi i aquesta va ser la solució al meu problema. Per tant, per alguna raó, el meu bluetooth estava bloquejat de manera suau, no estic segur de si aquest està bloquejat de manera estàndard. Podeu veure si ho és escrivint l'ordre següent al vostre massís.

llista rfkill

Per tant, si està bloquejat sense problemes, només cal que utilitzeu això:

rfkill desbloqueja bluetooth

I és possible que vulgueu reiniciar després d'això, la meva font:

Problemes de connexió en sèrie

Així que un altre gran problema que vaig tenir era que no podia establir cap connexió amb el meu Arduino a través del levelhifter, després d’haver realitzat algunes cerques, vaig saber que el meu '/ dev / ttyS0' havia desaparegut i això podria ser degut a una actualització del vostre RPi. També he trobat una solució sobre això

Haureu de tornar a habilitar la consola sèrie amb raspi-config, reinicieu i després traieu manualment el bit "console = serial0, 115200" de '/boot/cmdline.txt'. Confirmeu que "enable_uart = 1" està a ' /boot/config.txt 'i reinicieu-lo de nou. Això hauria de recuperar el port ttyS0, així com l'enllaç suau' / dev / serial0 '.

Font:

Recomanat: