Indholdsfortegnelse:

Slimbox - en smart Bluetooth -højttaler !: 10 trin (med billeder)
Slimbox - en smart Bluetooth -højttaler !: 10 trin (med billeder)

Video: Slimbox - en smart Bluetooth -højttaler !: 10 trin (med billeder)

Video: Slimbox - en smart Bluetooth -højttaler !: 10 trin (med billeder)
Video: 🔥🔥Selv de rige gør det! Reparer fjernbetjeningen med en blyant! 2024, November
Anonim
Slimbox - en smart Bluetooth -højttaler!
Slimbox - en smart Bluetooth -højttaler!

Hej med dig!

Til mit skoleprojekt på MCT Howest Kortrijk lavede jeg en smart Bluetooth -højttalerenhed med forskellige sensorer, en LCD og RGB NeoPixel ring inkluderet. Alt kører på Raspberry Pi (Database, Webserver, Backend).

Så i denne instruktive vil jeg vise dig, hvordan jeg lavede dette projekt på 3 uger, trin for trin, så hvis nogen af jer vil genskabe mit projekt, kan I sagtens gøre det!

Dette er også min første vejledning, hvis du har spørgsmål, vil jeg prøve at besvare dem så hurtigt som muligt!

Min GitHub:

Trin 1: Forbrugsvarer

Forbrugsvarer
Forbrugsvarer
Forbrugsvarer
Forbrugsvarer
Forbrugsvarer
Forbrugsvarer

DS18B20 Temperatursensor

DS18B20 er en en-tråds sensor, der måler temperaturen, fremstillet af Maxim Integrated. Der er 2 slags DS18B20 -sensorer, kun komponenten (som jeg brugte) og den vandtætte version, som er meget større, men det var ikke det, jeg havde brug for til mit projekt, så jeg brugte kun komponenten. Sensoren kan måle temperaturen i et område fra -55 ° C til +125 ° C (-67 ° F til +257 ° F), og den har en nøjagtighed på 0,5 ° C fra -10 ° C til +85 ° C. Det har også en programmerbar opløsning fra 9 bit til 12 bit.

Datablad:

Potentiometer sensor

Et potentiometer er en modstand med tre terminaler, som kan justeres manuelt ved blot at dreje sensorens øvre del. Placeringen af den øvre del bestemmer udgangsspændingen af potentiometeret.

LSM303 Accelerometer + Compass Breakout

LSM303 breakout board er en kombination af et triple-axis accelerometer og et magnetometer / kompas, fremstillet af Adafruit. Det bruges med I2C -grænsefladen på Raspberry Pi.

Oversigt:

Datablad:

MCP3008

For at læse dataene fra mit potentiometer brugte jeg en MCP3008, som er en 8 -kanals 10 bit analog til digital konverter med SPI -interface og er ret let at programmere.

Datablad:

Højttaler - 3”Diameter - 8 Ohm 1 Watt

Dette er den højttalerkegle, jeg valgte efter at have beregnet den spænding og ampere, den ville have brug for, og dette passede perfekt til mit Raspberry Pi -projekt, fremstillet af Adafruit.

Oversigt:

MAX98357 I2S klasse-D mono forstærker

Dette er forstærkeren, der følger med højttaleren, det er ikke kun en forstærker, det er også en I2S digital til analog konverter, så den er også perfekt til min højttaler og lydsystem.

Oversigt:

Datablad:

Arduino Uno

Arduino Uno er et open-source mikrokontrollerkort baseret på Microchip ATmega328P mikrokontroller, fremstillet af Arduino.cc. Uno -kortet har 14 digitale ben, 6 analoge ben og er fuldt programmerbart med Arduino IDE -softwaren

Oversigt:

Niveauskift

Dette er et lille bord, der tager sig af kommunikationen mellem Arduino Uno og Raspberry Pi og de forskellige spændinger, Arduino: 5V & Raspberry Pi: 3.3V. Dette er nødvendigt, fordi NeoPixel -ringen er forbundet til Arduino og kører der, mens alle de andre ting kører på Raspberry Pi.

RGB NeoPixel ring

Dette er en lille ring fyldt med 12 RGB leds (du kan købe større ringe med flere RGB leds, hvis du vil). Hvilket i mit tilfælde er forbundet til Arduino Uno, men også kan tilsluttes mange andre enheder og er virkelig enkel at bruge.

Oversigt:

LCD -skærm 16x2

Jeg brugte en grundlæggende LCD -skærm til at udskrive min temperatur, volumen og IP -adresse.

Datablad:

Raspberry Pi 3B+ og 16 GB SD -kort

Hele mit projekt kører på min Raspberry Pi 3B+ med et konfigureret billede, som jeg vil hjælpe dig med at konfigurere senere i min instruerbare.

GPIO T-Part, 2 brødbrætter og masser af jumperwires

For at forbinde alt, hvad jeg havde brug for brødbrætter og jumperwires, brugte jeg GPIO T-delen, så jeg har mere plads, og det er klart, hvilken pin er hvilken.

Trin 2: Skematisk og ledningsføring

Skematisk og ledningsføring
Skematisk og ledningsføring
Skematisk og ledningsføring
Skematisk og ledningsføring
Skematisk og ledningsføring
Skematisk og ledningsføring

For min skematiske brugte jeg Fritzing, det er et program, du kan installere, som giver dig mulighed for at oprette en skematisk virkelig let i forskellige slags visninger.

Download Fritzing:

Så sørg for at forbinde alt på den rigtige måde! I mit tilfælde er farven på ledningerne ikke den samme som på skematisk.

Trin 3: Databasedesign

Databasedesign
Databasedesign

Vi indsamler en masse data fra de 3 tilsluttede sensorer, så vi har brug for en database til at gemme data og sensorer i. Senere ser vi, hvordan du konfigurerer databasen på Raspberry Pi, og hvordan vi tilføjer data til den. Men først skal databasedesignet eller ERD (Entity Relationship Diagram) laves, og mit blev også normaliseret med 3NF. Derfor deler vi sensorerne op i et andet bord og arbejder med ID'er.

Samlet set er dette et virkelig grundlæggende og let databasedesign at arbejde videre med.

Trin 4: Forberedelse af Raspberry Pi

Så nu hvor vi har gjort nogle grundlæggende elementer i projektet. Lad os komme i gang med Raspberry Pi!

Konfiguration af SD -kort

Først skal du bruge et 16 GB SD -kort, hvor du kan sætte dit billede på og et program til at uploade et startbillede til SD -kortet.

Software:

Start billede:

Så når disse er downloadet:

  1. Sæt dit SD -kort i din computer.
  2. Åbn Win32, som du lige har downloadet.
  3. Vælg den Raspbian -billedfil, som du også lige har downloadet.
  4. Klik på 'skriv' til placeringen af dit SD -kort.

Dette kan tage noget tid, afhængigt af din hardware. Når dette er gjort, er vi klar til at foretage nogle sidste justeringer, før vi sætter billedet i vores RPi.

  1. Gå til dit SD -korts bibliotek, søg efter filen med navnet 'cmdline.txt', og åbn den.
  2. Tilføj nu 'ip = 169.254.10.1' på den samme linje.
  3. Gem filen.
  4. Opret en fil med navnet 'ssh' uden udvidelse eller indhold.

Nu kan du SIKKERT skubbe SD -kortet ud af din computer og sætte det i Raspberry Pi UDEN strøm. Når SD -kortet er sat i RPI'en, skal du slutte et LAN -kabel fra din computer til RPi LAN -porten, når dette er tilsluttet, kan du slutte strøm til RPi.

Nu vil vi kontrollere vores Raspberry Pi, dette gøres gennem Putty.

Kittesoftware:

Når du har downloadet, skal du åbne Putty og indsætte IP '169.254.10.1' og Port '22' og forbindelsestype: SSH. Nu kan vi endelig åbne vores kommandolinjegrænseflade og logge ind med starter -loginoplysningerne -> Bruger: pi & Adgangskode: hindbær.

Raspi-konfiguration

sudo raspi-config

Det, der virkelig er vigtigt for dette projekt, er grænsefladesektionen, vi skal aktivere mange forskellige grænseflader, aktivere alle følgende grænseflader:

  • En-ledning
  • SPI
  • I2C
  • Seriel

Nu hvor vi er færdige med raspi-config, lad os prøve at oprette forbindelse til internettet.

Wi-Fi-forbindelse

Først skal du være root for følgende kommandoer

sudo -i

Når du er root, skal du bruge følgende kommando. SSID er dit netværksnavn, og adgangskoden er naturligvis adgangskoden.

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

Hvis du begik en fejl, kan du kontrollere, opdatere eller slette dette netværk ved blot at indtaste filen:

nano /etc/wpa_supplicant/wpa_supplicant.conf

Så efter at vi kom ind i vores netværk, lad os gå ind i WPA -klientgrænsefladen

wpa_cli

Vælg din grænseflade

grænseflade wlan0

Genindlæs filen

omkonfigurere

Og endelig kan du se, om du har god forbindelse:

ip a

Opdater og opgrader

Nu hvor vi har forbindelse til internettet, ville opdatering af de allerede installerede pakker være et smart træk, så lad os gøre det først, før vi installerer andre pakker.

sudo apt-get opdatering

sudo apt-get opgradering

MariaDB Database

Installer MariaDB -databaseserveren:

sudo apt-get install mariadb-server

Apache2 webserver

Installer Apache2 webserveren:

sudo apt installere apache2

Python

Installer Python:

opdateringsalternativer-install/usr/bin/python python /usr/bin/python2.7 1

opdateringsalternativer-install/usr/bin/python python/usr/bin/python3 2

Python -pakke

Du bliver nødt til at installere alle disse pakker for at få backend til at fungere perfekt:

  • Kolbe
  • Kolbe-Cors
  • Kolbe-MySql
  • Kolbe-SocketIO
  • PyMySQL
  • Anmodninger
  • Python-socketio
  • RPi. GPIO
  • Gevent
  • Gevent-websocket
  • Ujson
  • Wsaccel

Højttalerbibliotek

Installer højttalerbiblioteket fra Adafruit:

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

Tid til at genstarte

sudo genstart

Trin 5: Videresend vores database til RPi

Nu hvor vi har installeret alt, hvad vi havde brug for, lad os lægge vores database, vi designede på vores Raspberry Pi!

Så først skal vi videresende vores database i MySql -arbejdsbordet, mens du gør det, kopierer du din fulde databasekode og sletter alle de 'synlige' ord i den. Så når det er kopieret, kan vi åbne spartel igen, logge ind og skrive:

sudo mysql

og nu er du i mysql -grænsefladen, kopier din databasekode i den, og tryk på enter.

Nu mangler vi bare at oprette en bruger

Opret BRUGER 'bruger' IDENTIFICERET AF 'bruger';

TILDELE ALLE PRIVILEGER TIL *. * TIL 'bruger';

Genstart nu.

Så alt burde være konfigureret nu, du kan også oprette forbindelse til din Pi og MySql Workbench, så det er lettere at kontrollere alle data i dine tabeller.

Trin 6: Konfiguration af Bluetooth på vores RPi

Vi opretter en Bluetooth -højttaler, så det betyder, at medierne sendes fra vores kilde til Raspberry Pi, og det kan gøres ret let, lad os komme ind i det!

Min kilde til bluetooth-forbindelsen:

Fjernelse af den allerede kørende bluealsa

sudo rm/var/run/bluealsa/*

Tilføj A2DP -profil Sink -rolle

sudo bluealsa -p a2dp -vask &

Åbn bluetooth -grænsefladen, og tænd din bluetooth

bluetoothctl

tænd

Opret en parringsagent

agent på

standardagent

Gør din RPi synlig

findes på

  • Nu skal du søge efter RPi'en fra din bluetooth -enhed og oprette forbindelse til den.
  • Bekræft parringen på begge enheder, skriv 'ja' i din kit.
  • Godkend A2DP -service, skriv 'ja' igen.
  • Når dette er gjort, kan vi stole på vores enhed, så vi ikke behøver at gå igennem alt dette, hver gang vi vil oprette forbindelse

tillid XX: XX: XX: XX: XX: XX (Din bluetooth mac -adresse fra vores kildeenhed)

Hvis du vil have, at din RPi bliver ved med at være synlig, er det dit eget valg, men jeg foretrækker at slukke den igen, så folk ikke kan prøve at oprette forbindelse til din boks

opdagelig off

Derefter kan vi forlade vores bluetooth -interface

Afslut

Og endelig vores audio routing: vores kildeenhed videresender til vores RPi

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

Nu er vores enhed fuldt tilsluttet vores Raspberry, og du skal kunne afspille medier fra din kildeenhed på Pi -højttaleren.

Trin 7: Skrivning af den komplette backend

Så nu er opsætningen færdig, vi kan endelig begynde at skrive vores backend -program!

Jeg brugte PyCharm til hele min backend, du skal bare sørge for, at dit PyCharm -projekt er forbundet til din Raspberry Pi, det betyder, at din implementeringssti er konfigureret i dine indstillinger, og du har installeret alle de pakker, vi har brug for, burde allerede være udført i trin 4.

Jeg brugte mine egne klasser, og disse er også alle inkluderet i min GitHub. Linket er i introduktionen, hvis du gik glip af det;)

I min backend -fil brugte jeg trådklasser, så alt kan køre på samme tid, og det vil ikke afbryde hinanden. Og i bunden har du alle ruterne, så vi nemt kan få data i vores frontend.

Trin 8: Skrivning af frontend (HTML, CSS og JavaScript)

Nu hvor backend er færdig, kan vi begynde at skrive hele front-end.

HTML & CSS blev gjort ret let, prøvede at arbejde med mobilen først så meget som muligt, da vi for det meste forbinder med Bluetooth fra en mobilenhed, ville det være lettere at styre fra et mobilt instrumentbræt.

Du kan designe dit dashboard på enhver måde, du vil, jeg vil bare efterlade min kode og designe her, du kan gøre, hvad du vil!

Og Javascript var ikke så svært, arbejdede med et par GET'er fra mine backend -ruter, masser af eventlyttere og nogle socketio -strukturer.

Trin 9: Byg min sag og sammensæt det hele

Bygger min sag og sætter det hele sammen
Bygger min sag og sætter det hele sammen
Bygger min sag og sætter det hele sammen
Bygger min sag og sætter det hele sammen
Bygger min sag og sætter det hele sammen
Bygger min sag og sætter det hele sammen

Jeg startede først med nogle skitser af, hvordan jeg ville have, at sagen skulle se ud, noget vigtigt var, at den skulle være stor nok til, at alt kunne passe ind, da vi fik et stort kredsløb at sætte i sagen.

Jeg har lavet sagen ud af træ, jeg synes, det er det letteste at arbejde med, når man ikke har så meget erfaring med at bygge sager, og man også har mange ting, man kan gøre med det.

Jeg startede med en æske til vinflasker og begyndte lige at save træet. Når jeg havde min grundkasse, skulle jeg bare bore huller i den (meget på forsiden af sagen, som du kan se på billederne: P) og sætte nogle søm i den, det er en virkelig grundlæggende sag, men det ser ret cool ud og passer perfekt.

Og når sagen var færdig, var det tid til at sætte det hele sammen, som du kan se på det sidste billede! Det er lidt rod i kassen, men alt fungerer, og jeg havde ikke så meget mere plads, så jeg råder dig til måske at oprette en større sag, hvis du genskaber mit projekt.

Trin 10: Nogle problemer, jeg havde på min vej med at oprette Slimbox -højttaleren …

Bluetooth- og bluealsa -fejl

Hver gang jeg ville spille musik eller oprette forbindelse til bluetooth, modtog jeg fejl fra bluetooth og bluealsa. Jeg undersøgte det, og det var løsningen på mit problem. Så af en eller anden grund var min bluetooth blokeret, ikke sikker på om dette er standard blødt blokeret. Du kan se, om det er ved at skrive følgende kommando i din kit.

rfkill liste

Så hvis det er softblocket, skal du bare bruge dette:

rfkill fjern blokering af bluetooth

Og du vil måske genstarte efter dette, min kilde:

Problemer med seriel forbindelse

Så et andet stort problem, jeg havde, var, at jeg ikke kunne oprette forbindelse med min Arduino gennem levelhifter, efter lidt søgning fandt jeg ud af, at min '/dev/ttyS0' var væk, og dette kunne skyldes en opdatering af din RPi. Fandt også en løsning på dette

Du bliver nødt til at genaktivere den serielle konsol med raspi-config, genstarte og derefter manuelt fjerne "console = serial0, 115200" bit fra '/boot/cmdline.txt'. Bekræft, at "enable_uart = 1" er i' /boot/config.txt ', og genstart igen. Det skulle få din ttyS0 -port tilbage, samt'/dev/serial0 'soft linket til den.

Kilde:

Anbefalede: