Innholdsfortegnelse:

Slimbox - en smart Bluetooth -høyttaler !: 10 trinn (med bilder)
Slimbox - en smart Bluetooth -høyttaler !: 10 trinn (med bilder)

Video: Slimbox - en smart Bluetooth -høyttaler !: 10 trinn (med bilder)

Video: Slimbox - en smart Bluetooth -høyttaler !: 10 trinn (med bilder)
Video: XIAOMI MI BOX S 2ND GEN ТВ БОКС. DOLBY И DOLBY ATMOS НА GOOGLE TV. AMLOGIC S905X4-K ОБЗОР. АФР БУДЕТ 2024, Juli
Anonim
Slimbox - en smart Bluetooth -høyttaler!
Slimbox - en smart Bluetooth -høyttaler!

Hei der!

For mitt skoleprosjekt på MCT Howest Kortrijk, laget jeg en smart Bluetooth -høyttalerenhet med forskjellige sensorer, en LCD og RGB NeoPixel -ring inkludert. Alt kjører på Raspberry Pi (Database, Webserver, Backend).

Så i denne instruksen vil jeg vise deg hvordan jeg laget dette prosjektet på 3 uker, trinn for trinn, så hvis noen av dere vil gjenskape prosjektet mitt, kan du enkelt gjøre det!

Dette er også min første instruks. Hvis du har spørsmål, skal jeg prøve å svare på dem så raskt som mulig!

Min GitHub:

Trinn 1: Rekvisita

Rekvisita
Rekvisita
Rekvisita
Rekvisita
Rekvisita
Rekvisita

DS18B20 Temperatursensor

DS18B20 er en en-ledersensor som måler temperaturen, produsert av Maxim Integrated. Det er to typer DS18B20 -sensorer, bare komponenten (som jeg brukte) og den vanntette versjonen, som er mye større, men det var ikke det jeg trengte for prosjektet mitt, så jeg brukte bare komponenten. Sensoren kan måle temperaturen i området fra -55 ° C til +125 ° C (-67 ° F til +257 ° F), og den har en nøyaktighet på 0,5 ° C fra -10 ° C til +85 ° C. Den har også en programmerbar oppløsning fra 9 bits til 12 bits.

Dataark:

Potensiometersensor

Et potensiometer er motstand med tre terminaler som kan justeres manuelt ved bare å rotere den øvre delen av sensoren. Plasseringen av den øvre delen bestemmer utgangsspenningen til potensiometeret.

LSM303 akselerometer + kompassutbrudd

LSM303 breakout board er en kombinasjon av et tre-akset akselerometer og et magnetometer / kompass, produsert av Adafruit. Den brukes med I2C -grensesnittet til Raspberry Pi.

Oversikt:

Dataark:

MCP3008

For å lese dataene fra potensiometeret mitt brukte jeg et MCP3008, som er en 8 -kanals 10 -biters analog til digital omformer med SPI -grensesnittet og som er ganske enkel å programmere.

Dataark:

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

Dette er høyttalerkeglen jeg valgte etter å ha beregnet spenningen og ampere den ville trenge, og dette passet perfekt for mitt Raspberry Pi -prosjekt, produsert av Adafruit.

Oversikt:

MAX98357 I2S klasse-D monoforsterker

Dette er forsterkeren som følger med høyttaleren, ikke bare er det en forsterker, det er også en I2S digital til analog omformer, så den passer også perfekt til høyttaleren og lydsystemet mitt.

Oversikt:

Dataark:

Arduino Uno

Arduino Uno er et mikrokort med åpen kildekode basert på Microchip ATmega328P mikrokontroller, produsert av Arduino.cc. Uno -kortet har 14 digitale pinner, 6 analoge pinner og er fullt programmerbart med Arduino IDE -programvaren

Oversikt:

Nivåskifter

Dette er et lite brett som tar seg av kommunikasjonen mellom Arduino Uno og Raspberry Pi og de forskjellige spenningene, Arduino: 5V & Raspberry Pi: 3.3V. Dette er nødvendig fordi NeoPixel -ringen er koblet til Arduino og kjører der, mens alle de andre tingene kjører på Raspberry Pi.

RGB NeoPixel -ring

Dette er en liten ring fylt med 12 RGB lysdioder (du kan kjøpe større ringer med flere RGB lysdioder, hvis du vil). Som i mitt tilfelle er koblet til Arduino Uno, men kan også kobles til mange andre enheter og er veldig enkel å bruke.

Oversikt:

LCD -skjerm 16x2

Jeg brukte en grunnleggende LCD -skjerm for å skrive ut temperaturen, volumet og IP -adressen min.

Datablad:

Raspberry Pi 3B+ og 16 GB SD -kort

Hele prosjektet mitt kjører på min Raspberry Pi 3B+ med et konfigurert bilde, som jeg vil hjelpe deg med å konfigurere senere i min instruerbare.

GPIO T-Part, 2 brødbrett og mange jumperwires

For å koble til alt jeg trengte brødbrett og jumperwires, brukte jeg GPIO T-delen så jeg har mer plass, og det er klart hvilken pinne som er hvilken.

Trinn 2: Skjematisk og ledninger

Skjematisk og ledninger
Skjematisk og ledninger
Skjematisk og ledninger
Skjematisk og ledninger
Skjematisk og ledninger
Skjematisk og ledninger

For skjematikken min brukte jeg Fritzing, det er et program du kan installere som lar deg lage en skjema veldig enkelt i forskjellige typer visninger.

Last ned Fritzing:

Så sørg for at du kobler alt på riktig måte! I mitt tilfelle er fargene på ledningene ikke de samme som på skjematikken.

Trinn 3: Databasedesign

Databasedesign
Databasedesign

Vi samler inn mye data fra de 3 tilkoblede sensorene, så vi trenger en database for å lagre dataene og sensorene i. Senere får vi se hvordan du konfigurerer databasen på Raspberry Pi og hvordan du legger til data i den. Men først må databasedesignet eller ERD (Entity Relationship Diagram) lages, og mitt ble også normalisert med 3NF. Derfor deler vi opp sensorene i et annet bord og jobber med ID -er.

Totalt sett er dette en veldig enkel og enkel databasedesign å jobbe videre med.

Trinn 4: Forberedelse av Raspberry Pi

Så nå som vi har gjort noen grunnleggende om prosjektet. La oss komme i gang med Raspberry Pi!

SD -kortkonfigurasjon

Først trenger du et 16 GB SD -kort hvor du kan sette bildet på og et program for å laste opp et startbilde til SD -kortet.

Programvare:

Startbilde:

Så når disse er lastet ned:

  1. Sett SD -kortet i datamaskinen.
  2. Åpne Win32 som du nettopp lastet ned.
  3. Velg Raspbian -bildefilen du også lastet ned.
  4. Klikk på "skriv" til plasseringen av SD -kortet.

Dette kan ta litt tid, avhengig av maskinvaren. Når dette er gjort, er vi klare til å gjøre noen endelige justeringer før vi setter bildet inn i vår RPi.

  1. Gå til SD -kortets katalog, søk etter filen som heter 'cmdline.txt' og åpne den.
  2. Legg nå til 'ip = 169.254.10.1' på den samme linjen.
  3. Lagre filen.
  4. Lag en fil som heter 'ssh' uten utvidelse eller innhold.

Nå kan du trygt kaste ut SD -kortet fra datamaskinen og sette det i Raspberry Pi UTEN strøm. Når SD -kortet er satt inn i RPI -en, kobler du en LAN -kabel fra datamaskinen til RPi LAN -porten. Når dette er koblet til, kan du koble strømmen til RPi.

Nå vil vi kontrollere Raspberry Pi, dette gjøres gjennom Putty.

Kittprogramvare:

Når du har lastet den ned, åpner du Putty og setter inn IP '169.254.10.1' og Port '22' og tilkoblingstype: SSH. Nå kan vi endelig åpne kommandolinjegrensesnittet og logge inn med startpåloggingsinformasjonen -> Bruker: pi og passord: bringebær.

Raspi-konfigurasjon

sudo raspi-config

Det som virkelig er viktig for dette prosjektet er grensesnittdelen, vi må aktivere mange forskjellige grensesnitt, aktivere alle følgende grensesnitt:

  • En-ledning
  • SPI
  • I2C
  • Seriell

Nå som vi er ferdige med raspi-config, la oss prøve å koble til internett.

Wi-Fi-tilkobling

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

sudo -i

Når du er rot, bruker du følgende kommando. SSID er nettverksnavnet ditt og passordet er åpenbart passordet.

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

Hvis du gjorde en feil, kan du sjekke, oppdatere eller slette dette nettverket ved å bare skrive inn den filen:

nano /etc/wpa_supplicant/wpa_supplicant.conf

Så etter at vi kom inn i nettverket vårt, la oss gå inn i WPA -klientgrensesnittet

wpa_cli

Velg grensesnittet

grensesnitt wlan0

Last inn filen på nytt

omkonfigurere

Og til slutt kan du se om du er godt forbundet:

ip a

Oppdater og oppgrader

Nå som vi er koblet til internett, ville oppdatering av de allerede installerte pakkene være et smart trekk, så la oss gjøre det først før du installerer andre pakker.

sudo apt-get oppdatering

sudo apt-get oppgradering

MariaDB Database

Installer MariaDB -databaseserveren:

sudo apt-get install mariadb-server

Apache2 webserver

Installer Apache2 -webserveren:

sudo apt installere apache2

Python

Installer Python:

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

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

Python -pakke

Du må installere alle disse pakkene for å få backend til å fungere perfekt:

  • Kolbe
  • Flask-Cors
  • Kolbe-MySql
  • Flask-SocketIO
  • PyMySQL
  • Forespørsler
  • Python-socketio
  • RPi. GPIO
  • Gevent
  • Gevent-websocket
  • Ujson
  • Wsaccel

Høyttalerbibliotek

Installer høyttalerbiblioteket fra Adafruit:

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

På tide å starte på nytt

sudo omstart

Trinn 5: Videresend konstruksjonen vår til RPi

Nå som vi har installert alt vi trengte, la oss sette vår database vi designet på vår Raspberry Pi!

Så først må vi videresende vår database i MySql -arbeidsbenken, mens du gjør det, kopierer du hele databasekoden og sletter alle de 'synlige' ordene i den. Så når det er kopiert, kan vi åpne kittet igjen, logge inn og skrive:

sudo mysql

og nå er du i mysql -grensesnittet, kopier databasekoden i den og trykk enter.

Nå trenger vi bare å opprette en bruker

OPPRETT BRUKER 'bruker' IDENTIFISERT AV 'bruker';

TILDELE ALLE PRIVILEGER PÅ *. * TIL 'bruker';

Start på nytt.

Så alt burde være konfigurert nå, du kan også koble til Pi og MySql Workbench, så det er lettere å sjekke alle dataene i tabellene.

Trinn 6: Konfigurere Bluetooth på vår RPi

Vi lager en Bluetooth -høyttaler, så dette betyr at media blir sendt fra vår kilde til Raspberry Pi, og dette kan gjøres ganske enkelt, la oss komme inn på det!

Min kilde for Bluetooth-tilkoblingen:

Fjerner den allerede kjørende bluealsa

sudo rm/var/run/bluealsa/*

Legg til A2DP -profil Sink -rolle

sudo bluealsa -p a2dp -vask &

Åpne bluetooth -grensesnittet og slå på bluetooth

bluetoothctl

strøm på

Sett opp en sammenkoblingsagent

agent på

standardagent

Gjør RPi -en din synlig

oppdagelig på

  • Nå fra Bluetooth -enheten din, søk etter RPi og koble til den.
  • Bekreft sammenkoblingen på begge enhetene, skriv "ja" i kittet ditt.
  • Godkjenn A2DP -tjenesten, skriv "ja" igjen.
  • Når dette er gjort, kan vi stole på enheten vår, så vi trenger ikke å gå gjennom dette hver gang vi vil koble til

tillit XX: XX: XX: XX: XX: XX (din bluetooth mac -adresse fra vår kildeenhet)

Hvis du vil at RPi -en din skal fortsette å være synlig, er det ditt eget valg, men jeg foretrekker å slå den av igjen, slik at folk ikke kan prøve å koble til boksen din

oppdagbar av

Deretter kan vi gå ut av Bluetooth -grensesnittet

exit

Og til slutt vår lydruting: vår kildeenhet videresender til vår RPi

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

Nå er enheten vår fullt tilkoblet bringebæret vårt, og du bør kunne spille av medier fra kildeenheten din på Pi -høyttaleren.

Trinn 7: Skrive den komplette backend

Så nå er oppsettet ferdig, vi kan endelig begynne å skrive backend -programmet vårt!

Jeg brukte PyCharm for hele mitt backend, du trenger bare å kontrollere at PyCharm -prosjektet ditt er koblet til din Raspberry Pi, dette betyr at distribusjonsbanen din er konfigurert i innstillingene dine og at du har installert alle pakkene vi trenger, bør allerede være utført i trinn 4.

Jeg brukte mine egne klasser, og disse er også alle inkludert i GitHub. Link er i introen i tilfelle du savnet det;)

I backend -filen min brukte jeg trådingsklasser, så alt kan kjøre samtidig, og det vil ikke forstyrre hverandre. Og nederst har du alle rutene, slik at vi enkelt kan få data i frontendet.

Trinn 8: Skrive frontend (HTML, CSS og JavaScript)

Nå som backend er ferdig, kan vi begynne å skrive hele front-end.

HTML og CSS ble gjort ganske enkelt, prøvde å jobbe med mobilen først så mye som mulig, siden vi for det meste kobler til Bluetooth fra en mobil enhet, ville det være lettere å kontrollere fra et mobilt dashbord.

Du kan designe dashbordet ditt på hvilken som helst måte du vil. Jeg vil bare la koden og designet stå her, du kan gjøre hva du vil!

Og Javascript var ikke så vanskelig, jobbet med noen få GET -er fra backend -rutene mine, tonnevis med hendelseslyttere og noen socketio -strukturer.

Trinn 9: Bygg saken min og sett alt sammen

Å bygge saken min og sette alt sammen
Å bygge saken min og sette alt sammen
Å bygge saken min og sette alt sammen
Å bygge saken min og sette alt sammen
Å bygge saken min og sette alt sammen
Å bygge saken min og sette alt sammen

Jeg begynte først med noen skisser av hvordan jeg ville at saken skulle se ut, noe viktig var at den måtte være stor nok til at alt skulle passe inn, siden vi fikk en stor krets å sette i saken.

Jeg laget saken av tre, jeg tror den er lettest å jobbe med når du ikke har så mye erfaring med å bygge saker og du også har mange ting du kan gjøre med den.

Jeg begynte med en eske for vinflasker og begynte å sage treverket. Når jeg hadde min grunnkasse, måtte jeg bare bore hull i den (mye på forsiden av saken, som du kan se på bildene: P) og sette noen spiker i den, det er en veldig enkel sak, men det ser ganske kult ut og passer perfekt.

Og når saken var ferdig, var det på tide å sette alt sammen, som du kan se på det siste bildet! Det er litt rot i esken, men alt fungerer, og jeg hadde ikke så mye mer plass, så jeg råder deg til å lage en større sak hvis du gjenskaper prosjektet mitt.

Trinn 10: Noen problemer jeg hadde på min vei med å lage Slimbox -høyttaleren …

Bluetooth- og bluealsa -feil

Hver gang jeg ønsket å spille musikk eller koble til med bluetooth, mottok jeg feil fra bluetooth og bluealsa. Jeg gjorde noen undersøkelser på det, og dette var løsningen på problemet mitt. Så av en eller annen grunn var min bluetooth blokkert, ikke sikker på om dette er standard myk-blokkert. Du kan se om det er ved å skrive følgende kommando i kittet ditt.

rfkill liste

Så hvis det er blokkert, bare bruk dette:

rfkill unblock bluetooth

Og du vil kanskje starte på nytt etter dette, min kilde:

Problemer med seriell tilkobling

Så et annet stort problem jeg hadde var at jeg ikke kunne opprette noen forbindelse med min Arduino gjennom nivåskiftet, etter litt søk fant jeg ut at min '/dev/ttyS0' var borte, og dette kan skyldes en oppdatering av RPi -en din. Fant også en løsning på dette

Du må aktivere seriekonsollen med raspi-config, starte på nytt og deretter fjerne "console = serial0, 115200" -biten manuelt fra '/boot/cmdline.txt'. Bekreft at "enable_uart = 1" er i' /boot/config.txt ', og start på nytt. Det burde få ttyS0 -porten tilbake, så vel som den'/dev/serial0 'myke lenken til den.

Kilde:

Anbefalt: