Inhoudsopgave:
- Stap 1: Benodigdheden
- Stap 2: Schema en bedrading
- Stap 3: Database-ontwerp
- Stap 4: De Raspberry Pi voorbereiden
- Stap 5: Stuur onze database door naar de RPi
- Stap 6: Bluetooth configureren op onze RPi
- Stap 7: De volledige backend schrijven
- Stap 8: Frontend schrijven (HTML, CSS & JavaScript)
- Stap 9: Mijn zaak opbouwen en alles samenvoegen
- Stap 10: Enkele problemen die ik had op mijn weg naar het maken van de Slimbox-luidspreker …
Video: Slimbox - een slimme Bluetooth-luidspreker! - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
Hoi!
Voor mijn schoolproject bij MCT Howest Kortrijk heb ik een slim Bluetooth-speakerapparaat gemaakt met verschillende sensoren, een LCD en RGB NeoPixel-ring inbegrepen. Alles draait op de Raspberry Pi (Database, Webserver, Backend).
Dus in deze instructable laat ik je stap voor stap zien hoe ik dit project in 3 weken heb gemaakt, dus als iemand van jullie mijn project opnieuw wil maken, kan dat gemakkelijk!
Dit is ook mijn eerste instructable, als je vragen hebt, zal ik proberen ze zo snel mogelijk te beantwoorden!
Mijn GitHub:
Stap 1: Benodigdheden
DS18B20 Temperatuursensor
De DS18B20 is een eendraadssensor die de temperatuur meet, vervaardigd door Maxim Integrated. Er zijn 2 soorten DS18B20-sensoren, alleen de component (die ik heb gebruikt) en de waterdichte versie, die veel groter is, maar dat was niet wat ik nodig had voor mijn project, dus ik gebruikte alleen de component. De sensor kan de temperatuur meten in een bereik van -55 °C tot +125 °C (-67 °F tot +257 °F) en heeft een nauwkeurigheid van 0,5 °C van -10 °C tot +85 °C. Het heeft ook een programmeerbare resolutie van 9 bits tot 12 bits.
Gegevensblad:
Potentiometersensor
Een potentiometer is een weerstand met drie klemmen die handmatig kan worden aangepast door gewoon aan het bovenste deel van de sensor te draaien. De positie van het bovenste deel bepaalt de uitgangsspanning van de potentiometer.
LSM303 versnellingsmeter + kompas breakout
Het LSM303 breakout board is een combinatie van een drie-assige accelerometer en een magnetometer/kompas, vervaardigd door Adafruit. Het wordt gebruikt met de I2C-interface van de Raspberry Pi.
Overzicht:
Gegevensblad:
MCP3008
Om de gegevens van mijn potentiometer uit te lezen, heb ik een MCP3008 gebruikt, een 8-kanaals 10-bits analoog naar digitaal converter met de SPI-interface en vrij eenvoudig te programmeren.
Gegevensblad:
Luidspreker – 3” Diameter – 8 Ohm 1 Watt
Dit is de luidsprekerconus die ik heb gekozen na het berekenen van de spanning en ampère die hij nodig heeft en deze paste perfect bij mijn Raspberry Pi-project, vervaardigd door Adafruit.
Overzicht:
MAX98357 I2S klasse-D monoversterker
Dit is de versterker die bij de luidspreker wordt geleverd, het is niet alleen een versterker, het is ook een I2S digitaal naar analoog converter, dus het past ook perfect bij mijn luidspreker- en audiosysteem.
Overzicht:
Gegevensblad:
Arduino Uno
De Arduino Uno is een open-source microcontrollerkaart op basis van de Microchip ATmega328P-microcontroller, vervaardigd door Arduino.cc. Het Uno-bord heeft 14 digitale pinnen, 6 analoge pinnen en is volledig programmeerbaar met de Arduino IDE-software
Overzicht:
Niveauverschuiver
Dit is een klein bordje dat zorgt voor de communicatie tussen de Arduino Uno en de Raspberry Pi en de verschillende spanningen, Arduino: 5V & Raspberry Pi: 3.3V. Dit is nodig omdat de NeoPixel-ring is aangesloten op de Arduino en daarop draait, terwijl alle andere dingen op de Raspberry Pi draaien.
RGB NeoPixel-ring
Dit is een kleine ring gevuld met 12 RGB-leds (je kunt grotere ringen kopen met meer RGB-leds, als je dat wilt). Die is in mijn geval aangesloten op de Arduino Uno, maar kan ook op veel andere apparaten worden aangesloten en is echt eenvoudig te gebruiken.
Overzicht:
LCD-scherm 16x2
Ik gebruikte een standaard LCD-scherm om mijn temperatuur, volume en IP-adres af te drukken.
Gegevensblad:
Raspberry Pi 3B+ & 16GB SD-kaart
Mijn hele project draait op mijn Raspberry Pi 3B+ met een geconfigureerde afbeelding, die ik je later in mijn instructable zal helpen configureren.
GPIO T-Part, 2 Breadboards en veel jumperwires
Om alles aan te sluiten wat ik nodig had breadboards en jumperwires, heb ik het GPIO T-deel gebruikt zodat ik meer ruimte heb en het duidelijk is welke pin wat is.
Stap 2: Schema en bedrading
Voor mijn schema heb ik Fritzing gebruikt, het is een programma dat je kunt installeren waarmee je heel eenvoudig een schema kunt maken in verschillende soorten weergaven.
Fritzing downloaden:
Zorg dus dat je alles op de juiste manier aansluit! In mijn geval zijn de kleuren van de draden niet hetzelfde als op het schema.
Stap 3: Database-ontwerp
We verzamelen veel gegevens van de 3 aangesloten sensoren, dus we hebben een database nodig om de gegevens en sensoren in op te slaan. Later zullen we zien hoe we de database op de Raspberry Pi configureren en hoe we er gegevens aan kunnen toevoegen. Maar eerst moet het database-ontwerp of ERD (Entity Relationship Diagram) worden gemaakt en de mijne is ook genormaliseerd met 3NF. Daarom splitsen we de sensoren op in een andere tabel en werken we met ID's.
Over het algemeen is dit een heel eenvoudig en eenvoudig databaseontwerp om verder mee te werken.
Stap 4: De Raspberry Pi voorbereiden
Dus nu we een aantal basisprincipes van het project hebben gedaan. Laten we aan de slag gaan met de Raspberry Pi!
SD-kaartconfiguratie
Ten eerste heb je een SD-kaart van 16 GB nodig waar je je afbeelding op kunt zetten en een programma om een startafbeelding naar de SD-kaart te uploaden.
Software:
Startafbeelding:
Dus zodra deze zijn gedownload:
- Plaats uw SD-kaart in uw computer.
- Open Win32 die u zojuist hebt gedownload.
- Selecteer het Raspbian-afbeeldingsbestand dat u ook zojuist hebt gedownload.
- Klik op 'schrijven' naar de locatie van je SD-kaart.
Dit kan enige tijd duren, afhankelijk van uw hardware. Zodra dit is gebeurd, zijn we klaar om enkele laatste aanpassingen te maken voordat we de afbeelding in onze RPi plaatsen.
- Ga naar de map van je SD-kaart, zoek naar het bestand met de naam 'cmdline.txt' en open het.
- Voeg nu 'ip=169.254.10.1' toe op dezelfde regel.
- Bewaar het bestand.
- Maak een bestand met de naam 'ssh' zonder extensie of inhoud.
Nu kunt u de SD-kaart VEILIG uit uw computer verwijderen en ZONDER stroom in de Raspberry Pi plaatsen. Zodra de SD-kaart in de RPI zit, sluit u een LAN-kabel van uw computer aan op de RPi LAN-poort, zodra deze is aangesloten, kunt u de voeding op de RPi aansluiten.
Nu willen we onze Raspberry Pi aansturen, dit gaat via Putty.
Putty-software:
Na het downloaden opent u Putty en voert u IP '169.254.10.1' en poort '22' en verbindingstype: SSH in. Nu kunnen we eindelijk onze opdrachtregelinterface openen en inloggen met de inloggegevens van de starter -> Gebruiker: pi & wachtwoord: raspberry.
Raspi-config
sudo raspi-config
Wat echt belangrijk is voor dit project is de interface-sectie, we moeten veel verschillende interfaces inschakelen, alle volgende interfaces inschakelen:
- Eendraads
- SPI
- I2C
- serieel
Nu we klaar zijn met raspi-config, gaan we proberen verbinding te maken met internet.
Wifi verbinding
Eerst moet je root zijn voor de volgende commando's:
sudo -i
Als je eenmaal root bent, gebruik je de volgende opdracht. SSID is uw netwerknaam en wachtwoord is uiteraard het wachtwoord.
wpa_passphrase "ssid" "password" >> /etc/wpa_supplicant/wpa_supplicant.conf
Als u een fout heeft gemaakt, kunt u dit netwerk controleren, bijwerken of verwijderen door dat bestand in te voeren:
nano /etc/wpa_supplicant/wpa_supplicant.conf
Dus nadat we ons netwerk zijn binnengegaan, gaan we naar de WPA-clientinterface
wpa_cli
Selecteer uw interface
interface wlan0
Herlaad het bestand
opnieuw configureren
En tot slot kun je zien of je goed aangesloten bent:
ip a
Update & upgrade
Nu we verbonden zijn met internet, zou het een slimme zet zijn om de reeds geïnstalleerde pakketten bij te werken, dus laten we dat eerst doen voordat we andere pakketten installeren.
sudo apt-get update
sudo apt-get upgrade
MariaDB-database
Installeer de MariaDB-databaseserver:
sudo apt-get install mariadb-server
Apache2-webserver
Installeer de Apache2-webserver:
sudo apt installeer apache2
Python
Python installeren:
update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
update-alternatives --install /usr/bin/python python /usr/bin/python3 2
Python-pakket
Je zult al deze pakketten moeten installeren om de backend perfect te laten werken:
- Kolf
- Kolf-Cors
- Kolf-MySql
- Kolf-SocketIO
- PyMySQL
- Verzoeken
- Python-socketio
- RPi. GPIO
- Gent
- Gevent-websocket
- Ujson
- Wsaccel
Luidsprekerbibliotheek
Installeer de luidsprekerbibliotheek van Adafruit:
curl -sS https://raw.githubusercontent.com/adafruit/Raspbe… | bash
Tijd om opnieuw op te starten
sudo reboot
Stap 5: Stuur onze database door naar de RPi
Nu we alles hebben geïnstalleerd wat we nodig hadden, laten we onze database die we hebben ontworpen op onze Raspberry Pi zetten!
Dus eerst moeten we onze database doorsturen in de MySql-workbench, terwijl we dat doen, kopieer je volledige databasecode en verwijder alle 'zichtbare' woorden erin. Dus als dat eenmaal is gekopieerd, laten we putty opnieuw openen, inloggen en typen:
sudo mysql
en nu ben je in de mysql-interface, kopieer je databasecode erin en druk op enter.
Nu hoeven we alleen nog een gebruiker aan te maken
MAAK GEBRUIKER 'gebruiker' GEDENTIFICEERD DOOR 'gebruiker';
VERLENEN ALLE PRIVILEGES OP *.* AAN 'gebruiker';
Nu opnieuw opstarten.
Dus alles zou nu ingesteld moeten zijn, je kunt ook een verbinding maken met je Pi en MySql Workbench, dus het is gemakkelijker om alle gegevens in je tabellen te controleren.
Stap 6: Bluetooth configureren op onze RPi
We zijn een Bluetooth-luidspreker aan het maken, dus dit betekent dat de media van onze bron naar de Raspberry Pi worden verzonden en dit kan vrij eenvoudig worden gedaan, laten we er meteen aan beginnen!
Mijn bron voor de bluetooth-verbinding:
Het verwijderen van de reeds lopende bluealsa
sudo rm /var/run/bluealsa/*
Voeg A2DP-profiel Sink-rol toe
sudo bluealsa -p a2dp-sink &
Open de bluetooth-interface en zet je bluetooth aan
bluetoothctl
aanzetten
Stel een koppelingsagent in
agent aan
default-agent
Maak uw RPi vindbaar
vindbaar op
- Zoek nu vanaf uw Bluetooth-apparaat naar de RPi en maak er verbinding mee.
- Bevestig de koppeling op beide apparaten, typ 'ja' in je stopverf.
- Autoriseer A2DP-service, typ nogmaals 'ja'.
- Zodra dit is gebeurd, kunnen we ons apparaat vertrouwen, dus we hoeven dit niet elke keer opnieuw te doen als we verbinding willen maken
vertrouw XX:XX:XX:XX:XX:XX (Uw bluetooth mac-adres van ons bronapparaat)
Als je wilt dat je RPi vindbaar blijft, is dat je eigen keuze, maar ik zet hem liever weer uit, zodat mensen niet kunnen proberen verbinding te maken met je box
vindbaar uit
Dan kunnen we onze bluetooth-interface verlaten
Uitgang
En tot slot onze audiorouting: ons bronapparaat doorsturen naar onze RPi
bluealsa-aplay 00:00:00:00:00:00
Nu is ons apparaat volledig verbonden met onze Raspberry en zou je media van je bronapparaat op de Pi-luidspreker moeten kunnen afspelen.
Stap 7: De volledige backend schrijven
Dus nu de installatie is voltooid, kunnen we eindelijk beginnen met het schrijven van ons backend-programma!
Ik heb PyCharm voor mijn hele backend gebruikt, je moet er alleen voor zorgen dat je PyCharm-project is verbonden met je Raspberry Pi, dit betekent dat je implementatiepad is ingesteld in je instellingen en dat je alle pakketten hebt geïnstalleerd die we nodig hebben, zou al in stap moeten zijn gedaan 4.
Ik heb mijn eigen lessen gebruikt en deze zijn ook allemaal opgenomen in mijn GitHub. Link staat in de intro voor het geval je het gemist hebt;)
In mijn backend-bestand heb ik threading-klassen gebruikt, dus alles kan tegelijkertijd worden uitgevoerd en het zal elkaar niet onderbreken. En onderaan heb je alle routes zodat we gemakkelijk gegevens in onze frontend kunnen krijgen.
Stap 8: Frontend schrijven (HTML, CSS & JavaScript)
Nu de backend klaar is, kunnen we beginnen met het schrijven van de volledige frontend.
HTML & CSS was vrij eenvoudig gedaan, we probeerden zoveel mogelijk mobiel te werken, aangezien we meestal verbinding maken met Bluetooth vanaf een mobiel apparaat, zou het gemakkelijker te bedienen zijn vanaf een mobiel dashboard.
Je kunt je dashboard op elke gewenste manier ontwerpen, ik laat gewoon mijn code en ontwerp hier achter, je kunt doen wat je wilt!
En Javascript was niet zo moeilijk, werkte met een paar GET's van mijn backend-routes, tonnen gebeurtenisluisteraars en enkele socketio-structuren.
Stap 9: Mijn zaak opbouwen en alles samenvoegen
Ik begon eerst met wat schetsen van hoe ik wilde dat de behuizing eruit zou zien, iets belangrijks was dat het groot genoeg moest zijn om alles erin te laten passen, aangezien we een groot circuit kregen om in de behuizing te plaatsen.
Ik heb de kist van hout gemaakt, ik denk dat het het gemakkelijkst is om mee te werken als je niet zoveel ervaring hebt met het bouwen van kisten en je ook veel dingen hebt die je ermee kunt doen.
Ik ben begonnen met een koffer voor wijnflessen en ben net begonnen met het zagen van het hout. Toen ik mijn basiskoffer eenmaal had, moest ik er alleen gaten in boren (veel aan de voorkant van de koffer, zoals je op de foto's kunt zien:P) en er wat spijkers in doen, het is echt een basiskoffer, maar het ziet er cool uit en past perfect.
En toen de zaak klaar was, was het tijd om alles in elkaar te zetten, zoals je kunt zien op de laatste foto! Het is een beetje een puinhoop in de doos, maar alles werkt en ik had niet zoveel meer ruimte, dus ik raad je aan om misschien een grotere koffer te maken als je mijn project opnieuw maakt.
Stap 10: Enkele problemen die ik had op mijn weg naar het maken van de Slimbox-luidspreker …
Bluetooth & bluealsa-fouten
Elke keer dat ik muziek wilde afspelen of verbinding wilde maken met bluetooth, kreeg ik fouten van bluetooth en bluealsa. Ik heb er wat onderzoek naar gedaan en dit was de oplossing voor mijn probleem. Dus om de een of andere reden was mijn bluetooth soft-blocked, ik weet niet zeker of dit standaard soft-blocked is. U kunt zien of dit het geval is door de volgende opdracht in uw Putty te typen.
rfkill-lijst
Dus als het softblocked is, gebruik dan gewoon dit:
rfkill deblokkeer bluetooth
En misschien wil je hierna opnieuw opstarten, mijn bron:
Seriële verbindingsproblemen
Dus een ander groot probleem dat ik had was dat ik geen verbinding kon maken met mijn Arduino via de levelshifter, na wat zoeken kwam ik erachter dat mijn '/dev/ttyS0' weg was en dit zou kunnen komen door een update van je RPi. Ook hier een oplossing voor gevonden
U moet de seriële console opnieuw inschakelen met raspi-config, opnieuw opstarten en vervolgens handmatig de bit "console=serial0, 115200" verwijderen uit '/boot/cmdline.txt'. Bevestig dat "enable_uart=1" in ' staat /boot/config.txt', en start opnieuw op. Dat zou je ttyS0-poort terug moeten krijgen, evenals de '/dev/serial0'-softlink ernaartoe.
Bron:
Aanbevolen:
Slimme riem: 18 stappen
Slimme riem: het dragen van een gadget is een hele uitdaging. Eerlijk gezegd kreeg ik bij dit project hulp van mijn moeder om de hoes voor mij te naaien omdat ik niet alleen kan naaien. Wees voorzichtig bij het naaien met een naaimachine. Als je nooit ervaring hebt met naaien met een naaimachine, is het ook
Slimme bril: 4 stappen
Smart Glasses: Hallo allemaal vandaag ga ik je laten zien hoe je Smart Glasses thuis kunt maken! Een van de grootste dingen van slimme brillen is hoe nuttig het is om zoiets te hebben in de huidige wereld van technologie en dat er niet slechts één versie is
Slimme verkeerslichten: 6 stappen
Smart Traffic Lights: Waarom ik dit project heb gemaakt Ik ben student aan Howest Kortrijk. Het is een schoolproject voor mijn tweede semester MCT. Als ik in mijn auto rijd en het rustig is op straat, heeft het geen zin om voor rode lichten te gaan staan als er geen ander verkeer is
Slimme bril (minder dan $ 10!!!): 8 stappen (met afbeeldingen)
Slimme bril (minder dan $ 10!!!): Hallo daar! We kennen allemaal Smart Glasses zoals die met de naam E.D.I.T.H. gemaakt door ons geliefde personage Tony Stark die later werd doorgegeven aan Peter Parker. Vandaag ga ik zo'n slim glas bouwen dat ook minder dan $ 10 is! Ze zijn niet helemaal een
Slimme bureaulamp - Slimme verlichting met Arduino - Neopixels-werkruimte: 10 stappen (met afbeeldingen)
Slimme bureaulamp | Slimme verlichting met Arduino | Neopixels-werkruimte: tegenwoordig brengen we veel tijd thuis door, studeren en werken virtueel, dus waarom zouden we onze werkruimte niet groter maken met een aangepast en slim verlichtingssysteem op Arduino en Ws2812b-leds. Hier laat ik u zien hoe u uw Smart LED bureaulamp die