Innehållsförteckning:

Slimbox - en smart Bluetooth -högtalare !: 10 steg (med bilder)
Slimbox - en smart Bluetooth -högtalare !: 10 steg (med bilder)

Video: Slimbox - en smart Bluetooth -högtalare !: 10 steg (med bilder)

Video: Slimbox - en smart Bluetooth -högtalare !: 10 steg (med bilder)
Video: Универсальная прошивка для ТВ Боксов на AMLOGIC процессорах SLIMBOX. На примере TANIX TX9S 2024, Juli
Anonim
Slimbox - en smart Bluetooth -högtalare!
Slimbox - en smart Bluetooth -högtalare!

Hallå där!

För mitt skolprojekt på MCT Howest Kortrijk gjorde jag en smart Bluetooth -högtalare med olika sensorer, en LCD och RGB NeoPixel -ring ingår. Allt körs på Raspberry Pi (databas, webbserver, backend).

Så i denna instruerbara kommer jag att visa dig hur jag gjorde det här projektet på 3 veckor, steg för steg, så om någon av er vill återskapa mitt projekt kan ni enkelt göra det!

Detta är också min första instruktion, om du har några frågor ska jag försöka svara på dem så snabbt som möjligt!

Min GitHub:

Steg 1: Tillbehör

Tillbehör
Tillbehör
Tillbehör
Tillbehör
Tillbehör
Tillbehör

DS18B20 Temperaturgivare

DS18B20 är en entrådssensor som mäter temperaturen, tillverkad av Maxim Integrated. Det finns 2 sorters DS18B20 -sensorer, endast komponenten (som jag använde) och den vattentäta versionen, som är mycket större, men det var inte vad jag behövde för mitt projekt, så jag använde bara komponenten. Sensorn kan mäta temperaturen i intervallet -55 ° C till +125 ° C (-67 ° F till +257 ° F) och den har en noggrannhet på 0,5 ° C från -10 ° C till +85 ° C. Den har också en programmerbar upplösning från 9 bitar till 12 bitar.

Datablad:

Potentiometersensor

En potentiometer är ett motstånd med tre plintar som kan justeras manuellt genom att bara rotera sensorns övre del. Placeringen av den övre delen bestämmer utspänningen för potentiometern.

LSM303 Accelerometer + kompassutbrott

LSM303 breakout board är en kombination av en trippelaxlad accelerometer och en magnetometer / kompass, tillverkad av Adafruit. Den används med I2C -gränssnittet för Raspberry Pi.

Översikt:

Datablad:

MCP3008

För att läsa data från min potentiometer använde jag en MCP3008, som är en 8 -kanals 10 bitars analog till digital omvandlare med SPI -gränssnittet och är ganska lätt att programmera.

Datablad:

Högtalare - 3”Diameter - 8 Ohm 1 Watt

Detta är den högtalarkon jag valde efter att ha beräknat den spänning och ampere den skulle behöva och det passade perfekt för mitt Raspberry Pi -projekt, tillverkat av Adafruit.

Översikt:

MAX98357 I2S klass-D monoförstärkare

Detta är förstärkaren som följer med högtalaren, det är inte bara en förstärkare, det är också en I2S digital till analog omvandlare, så den passar också perfekt för min högtalare och ljudsystem.

Översikt:

Datablad:

Arduino Uno

Arduino Uno är ett microcontroller-kort med öppen källkod baserat på Microchip ATmega328P microcontroller, tillverkat av Arduino.cc. Uno -kortet har 14 digitala stift, 6 analoga stift och är fullt programmerbart med Arduino IDE -programvaran

Översikt:

Nivåförskjutare

Detta är en liten tavla som tar hand om kommunikationen mellan Arduino Uno och Raspberry Pi och de olika spänningarna, Arduino: 5V & Raspberry Pi: 3.3V. Detta behövs eftersom NeoPixel -ringen är ansluten till Arduino och körs där, medan alla andra saker körs på Raspberry Pi.

RGB NeoPixel -ring

Detta är en liten ring fylld med 12 RGB -lysdioder (du kan köpa större ringar med fler RGB -lysdioder om du vill). Som i mitt fall är ansluten till Arduino Uno, men kan också anslutas till många andra enheter och är riktigt enkel att använda.

Översikt:

LCD -skärm 16x2

Jag använde en vanlig LCD -skärm för att skriva ut min temperatur, volym och IP -adress.

Datablad:

Raspberry Pi 3B+ och 16 GB SD -kort

Hela mitt projekt körs på min Raspberry Pi 3B+ med en konfigurerad bild, som jag hjälper dig att konfigurera senare i min instruerbara.

GPIO T-Part, 2 brödbrädor och massor av jumperwires

För att ansluta allt jag behövde brödbrädor och jumperwires använde jag GPIO T-delen så jag har mer utrymme och det är klart vilken stift som är vilken.

Steg 2: Schematisk och kabeldragning

Schematisk och kabeldragning
Schematisk och kabeldragning
Schematisk och kabeldragning
Schematisk och kabeldragning
Schematisk och kabeldragning
Schematisk och kabeldragning

För min schematik använde jag Fritzing, det är ett program du kan installera som gör att du kan skapa en schematik väldigt enkelt i olika typer av vyer.

Ladda ner Fritzing:

Så se till att du ansluter allt på rätt sätt! I mitt fall är trådarnas färger inte desamma som på schemat.

Steg 3: Databasdesign

Databasdesign
Databasdesign

Vi samlar in mycket data från de 3 anslutna sensorerna, så vi behöver en databas för att lagra data och sensorer i. Senare får vi se hur vi konfigurerar databasen på Raspberry Pi och hur vi lägger till data till den. Men först måste databasdesignen eller ERD (Entity Relationship Diagram) göras och min normaliserades också med 3NF. Det är därför vi delar upp sensorerna i ett annat bord och arbetar med ID: er.

Sammantaget är detta en riktigt enkel och enkel databasdesign att arbeta vidare med.

Steg 4: Förbered Raspberry Pi

Så nu när vi har gjort några grunder i projektet. Låt oss komma igång med Raspberry Pi!

Konfiguration av SD -kort

Först behöver du ett 16 GB SD -kort där du kan sätta på din bild och ett program för att ladda upp en startbild till SD -kortet.

Programvara:

Startbild:

Så när dessa är nedladdade:

  1. Sätt ditt SD -kort i din dator.
  2. Öppna Win32 som du just laddade ner.
  3. Välj Raspbian -bildfilen som du också har laddat ner.
  4. Klicka på "skriv" till platsen för ditt SD -kort.

Detta kan ta lite tid, beroende på din hårdvara. När detta är gjort är vi redo att göra några sista justeringar innan vi sätter in bilden i vår RPi.

  1. Gå till SD -kortets katalog, sök efter filen med namnet 'cmdline.txt' och öppna den.
  2. Lägg nu till 'ip = 169.254.10.1' på samma rad.
  3. Spara filen.
  4. Skapa en fil med namnet 'ssh' utan tillägg eller innehåll.

Nu kan du på ett säkert sätt mata ut SD -kortet från din dator och sätta in det i Raspberry Pi UTAN ström. När SD -kortet är i RPI: n ansluter du en LAN -kabel från din dator till RPi LAN -porten, när detta är anslutet kan du ansluta ström till RPi.

Nu vill vi styra vår Raspberry Pi, detta görs genom Putty.

Kittprogramvara:

När du har laddat ner öppnar du Putty och sätter in IP '169.254.10.1' och Port '22' och anslutningstyp: SSH. Nu kan vi äntligen öppna vårt kommandoradsgränssnitt och logga in med startinloggningsinformationen -> Användare: pi & Lösenord: hallon.

Raspi-config

sudo raspi-config

Det som verkligen är viktigt för detta projekt är gränssnittssektionen, vi måste aktivera många olika gränssnitt, aktivera alla följande gränssnitt:

  • En-tråd
  • SPI
  • I2C
  • Serie

Nu när vi är klara med raspi-config, låt oss försöka upprätta en anslutning till internet.

Wi-Fi-anslutning

Först måste du vara root för följande kommandon

sudo -i

När du har rotat, använd följande kommando. SSID är ditt nätverksnamn och lösenordet är uppenbarligen lösenordet.

wpa_passphrase "ssid" "lösenord" >> /etc/wpa_supplicant/wpa_supplicant.conf

Om du har gjort ett misstag kan du kontrollera, uppdatera eller ta bort det här nätverket genom att bara ange den filen:

nano /etc/wpa_supplicant/wpa_supplicant.conf

Så efter att vi kom in i vårt nätverk, låt oss gå in i WPA -klientgränssnittet

wpa_cli

Välj ditt gränssnitt

gränssnitt wlan0

Ladda om filen

omkonfigurera

Och slutligen kan du se om du är bra ansluten:

ip a

Uppdatera uppgradera

Nu när vi är anslutna till internet skulle uppdatering av redan installerade paket vara ett smart drag, så låt oss göra det först innan du installerar andra paket.

sudo apt-get uppdatering

sudo apt-get uppgradering

MariaDB -databas

Installera MariaDB -databaseservern:

sudo apt-get install mariadb-server

Apache2 webbserver

Installera Apache2 -webbservern:

sudo apt installera apache2

Pytonorm

Installera Python:

uppdateringsalternativ-installera/usr/bin/python python /usr/bin/python2.7 1

uppdateringsalternativ-installera/usr/bin/python python/usr/bin/python3 2

Python -paket

Du måste installera alla dessa paket för att få backend att fungera perfekt:

  • Flaska
  • Kolv-Cors
  • Kolv-MySql
  • Flask-SocketIO
  • PyMySQL
  • Förfrågningar
  • Python-socketio
  • RPi. GPIO
  • Gevent
  • Gevent-websocket
  • Ujson
  • Wsaccel

Högtalarbibliotek

Installera högtalarbiblioteket från Adafruit:

curl -sS https://raw.githubusercontent.com/adafruit/Raspbe… | våldsamt slag

Dags att starta om

sudo starta om

Steg 5: Vidarebefordra Engineering vår databas till RPi

Nu när vi har installerat allt vi behövde, låt oss lägga vår databas som vi designade på vår Raspberry Pi!

Så först måste vi vidarebefordra vår databas i MySql -arbetsbänken, medan du gör det, kopiera hela databankoden och ta bort alla "synliga" ord i den. Så när det har kopierats kan vi öppna kitt igen, logga in och skriv:

sudo mysql

och nu är du i mysql -gränssnittet, kopiera din databaskod i den och tryck på enter.

Nu behöver vi bara skapa en användare

SKAPA ANVÄNDAREN "användare" IDENTIFIERAD AV "användare";

GE ALLA PRIVILEGER PÅ *. * TILL 'användare';

Starta om nu.

Så allt borde vara inställt nu, du kan också ansluta med din Pi och MySql Workbench, så det är lättare att kontrollera all data i dina tabeller.

Steg 6: Konfigurera Bluetooth på vår RPi

Vi skapar en Bluetooth -högtalare, så det betyder att media skickas från vår källa till Raspberry Pi och det kan göras ganska enkelt, låt oss komma in i det!

Min källa för Bluetooth-anslutningen:

Tar bort den redan körande bluealsa

sudo rm/var/run/bluealsa/*

Lägg till A2DP -profil Sink -roll

sudo bluealsa -p a2dp -sink &

Öppna Bluetooth -gränssnittet och slå på din Bluetooth

bluetoothctl

ström på

Skapa en parningsagent

agent på

default-agent

Gör din RPi upptäckbar

upptäcks på

  • Nu från din bluetooth -enhet, sök efter RPi och anslut till den.
  • Bekräfta parningen på båda enheterna, skriv "ja" i ditt kitt.
  • Godkänn A2DP -tjänsten, skriv "ja" igen.
  • När detta är gjort kan vi lita på vår enhet, så vi behöver inte gå igenom allt detta varje gång vi vill ansluta

lita på XX: XX: XX: XX: XX: XX (din bluetooth mac -adress från vår källenhet)

Om du vill att din RPi ska fortsätta att vara upptäckt, är det ditt eget val, men jag föredrar att stänga av den igen, så att människor inte kan försöka ansluta till din box

upptäckt av

Då kan vi lämna vårt bluetooth -gränssnitt

utgång

Och slutligen vår audio routing: vår källenhet vidarebefordrar till vår RPi

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

Nu är vår enhet helt ansluten till vårt hallon och du borde kunna spela media från din källenhet på Pi -högtalaren.

Steg 7: Skriva hela backend

Så nu är installationen klar, vi kan äntligen börja skriva vårt backend -program!

Jag använde PyCharm för hela mitt backend, du behöver bara se till att ditt PyCharm -projekt är anslutet till din Raspberry Pi, det betyder att din distributionsväg är konfigurerad i dina inställningar och att du har installerat alla paket vi behöver, bör redan göras i steg 4.

Jag använde mina egna klasser och dessa ingår också alla i min GitHub. Länken finns i introt ifall du missade det;)

I min backend -fil använde jag trådklasser, så att allt kan köras samtidigt och det avbryter inte varandra. Och längst ner har du alla rutter så att vi enkelt kan få data i vår frontend.

Steg 8: Skriva frontend (HTML, CSS och JavaScript)

Nu när backend är klar kan vi börja skriva hela front-end.

HTML & CSS gjordes ganska enkelt, försökte arbeta mobil först så mycket som möjligt, eftersom vi oftast ansluter till Bluetooth från en mobil enhet, skulle det vara lättare att styra från en mobil instrumentpanel.

Du kan designa din instrumentpanel på vilket sätt du vill, jag lämnar bara min kod och design här, du kan göra vad du vill!

Och Javascript var inte så svårt, arbetade med några få från mina backend -rutter, massor av eventlyssnare och några socketio -strukturer.

Steg 9: Bygga mitt fall och sätta ihop det hela

Bygga mitt fall och sätta ihop det hela
Bygga mitt fall och sätta ihop det hela
Bygga mitt fall och sätta ihop det hela
Bygga mitt fall och sätta ihop det hela
Bygga mitt fall och sätta ihop det hela
Bygga mitt fall och sätta ihop det hela

Jag började först med några skisser på hur jag ville att fallet skulle se ut, något viktigt var att det måste vara tillräckligt stort för att allt skulle passa in, eftersom vi fick en stor krets att sätta i fodralet.

Jag gjorde fodralet av trä, jag tror att det är det enklaste att arbeta med när man inte har så mycket erfarenhet av att bygga fodral och man också har många saker man kan göra med det.

Jag började med ett fodral för vinflaskor och började precis såga virket. När jag väl hade mitt grundfodral var jag bara tvungen att borra hål i det (mycket på framsidan av fodralet, som du kan se på bilderna: P) och sätta några spikar i det, det är ett riktigt grundläggande fodral, men det ser ganska cool ut och passar perfekt.

Och när ärendet var klart var det dags att sätta ihop allt, som du kan se på den sista bilden! Det är lite rörigt inuti lådan, men allt fungerar och jag hade inte så mycket mer utrymme, så jag råder dig att kanske skapa ett större fall om du återskapar mitt projekt.

Steg 10: Några problem jag hade på min väg att skapa Slimbox -högtalaren …

Bluetooth- och bluealsa -fel

Varje gång jag ville spela musik eller ansluta till bluetooth fick jag fel från bluetooth och bluealsa. Jag undersökte det och det här var lösningen på mitt problem. Så av någon anledning var min bluetooth mjukblockerad, inte säker på om det här är standardmjukt blockerat. Du kan se om det är genom att skriva följande kommando i din kitt.

rfkill lista

Så om det är mjukblockerat, använd bara detta:

rfkill avblockera bluetooth

Och du kanske vill starta om efter detta, min källa:

Problem med seriell anslutning

Så ett annat stort problem jag hade var att jag inte kunde skapa någon koppling med min Arduino genom nivåhöjaren, efter lite sökning fick jag reda på att min '/dev/ttyS0' var borta och detta kan bero på en uppdatering av din RPi. Hittade också en lösning på detta

Du måste återaktivera seriekonsolen med raspi-config, starta om och sedan manuellt ta bort "console = serial0, 115200" -biten från '/boot/cmdline.txt'. Bekräfta att "enable_uart = 1" är i' /boot/config.txt ', och starta om igen. Det borde få tillbaka din ttyS0 -port, liksom'/dev/serial0 'mjuk länk till den.

Källa:

Rekommenderad: