Inhoudsopgave:

Slimbox - een slimme Bluetooth-luidspreker! - Ajarnpa
Slimbox - een slimme Bluetooth-luidspreker! - Ajarnpa

Video: Slimbox - een slimme Bluetooth-luidspreker! - Ajarnpa

Video: Slimbox - een slimme Bluetooth-luidspreker! - Ajarnpa
Video: Bluetooth speaker review: Samsung Level Box Slim 2024, November
Anonim
Slimbox - een slimme Bluetooth-luidspreker!
Slimbox - een slimme Bluetooth-luidspreker!

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

Benodigdheden
Benodigdheden
Benodigdheden
Benodigdheden
Benodigdheden
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

Schema en bedrading
Schema en bedrading
Schema en bedrading
Schema en bedrading
Schema en bedrading
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

Database-ontwerp
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:

  1. Plaats uw SD-kaart in uw computer.
  2. Open Win32 die u zojuist hebt gedownload.
  3. Selecteer het Raspbian-afbeeldingsbestand dat u ook zojuist hebt gedownload.
  4. 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.

  1. Ga naar de map van je SD-kaart, zoek naar het bestand met de naam 'cmdline.txt' en open het.
  2. Voeg nu 'ip=169.254.10.1' toe op dezelfde regel.
  3. Bewaar het bestand.
  4. 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

Mijn zaak bouwen en alles samenbrengen
Mijn zaak bouwen en alles samenbrengen
Mijn zaak bouwen en alles samenbrengen
Mijn zaak bouwen en alles samenbrengen
Mijn zaak bouwen en alles samenbrengen
Mijn zaak bouwen en alles samenbrengen

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: