Inhaltsverzeichnis:

Slimbox - ein intelligenter Bluetooth-Lautsprecher! - Gunook
Slimbox - ein intelligenter Bluetooth-Lautsprecher! - Gunook

Video: Slimbox - ein intelligenter Bluetooth-Lautsprecher! - Gunook

Video: Slimbox - ein intelligenter Bluetooth-Lautsprecher! - Gunook
Video: Универсальная прошивка для ТВ Боксов на AMLOGIC процессорах SLIMBOX. На примере TANIX TX9S 2024, Juli
Anonim
Slimbox - ein intelligenter Bluetooth-Lautsprecher!
Slimbox - ein intelligenter Bluetooth-Lautsprecher!

Sie da!

Für mein Schulprojekt bei MCT Howest Kortrijk habe ich ein intelligentes Bluetooth-Lautsprechergerät mit verschiedenen Sensoren, einem LCD- und RGB-NeoPixel-Ring inklusive. Alles läuft auf dem Raspberry Pi (Datenbank, Webserver, Backend).

In diesem anweisbaren zeige ich Ihnen, wie ich dieses Projekt in 3 Wochen Schritt für Schritt gemacht habe. Wenn also einer von Ihnen mein Projekt neu erstellen möchte, können Sie dies leicht tun!

Dies ist auch mein erstes instructable, wenn Sie Fragen haben, werde ich versuchen, sie so schnell wie möglich zu beantworten!

Mein GitHub:

Schritt 1: Zubehör

Lieferungen
Lieferungen
Lieferungen
Lieferungen
Lieferungen
Lieferungen

DS18B20 Temperatursensor

Der DS18B20 ist ein Eindrahtsensor, der die Temperatur misst, hergestellt von Maxim Integrated. Es gibt 2 Arten von DS18B20-Sensoren, nur die Komponente (die ich verwendet habe) und die wasserdichte Version, die viel größer ist, aber das ist nicht das, was ich für mein Projekt benötigt habe, also habe ich nur die Komponente verwendet. Der Sensor kann die Temperatur in einem Bereich von -55 °C bis +125 °C (67 °F bis +257 °F) messen und hat eine Genauigkeit von 0,5 °C von -10 °C bis +85 °C. Es hat auch eine programmierbare Auflösung von 9 Bit bis 12 Bit.

Datenblatt:

Potentiometersensor

Ein Potentiometer ist ein Widerstand mit drei Anschlüssen, der manuell durch Drehen des oberen Teils des Sensors eingestellt werden kann. Die Position des Oberteils bestimmt die Ausgangsspannung des Potentiometers.

LSM303 Beschleunigungsmesser + Kompass Breakout

Das Breakout-Board LSM303 ist eine Kombination aus einem dreiachsigen Beschleunigungsmesser und einem Magnetometer / Kompass, hergestellt von Adafruit. Es wird mit der I2C-Schnittstelle des Raspberry Pi verwendet.

Übersicht:

Datenblatt:

MCP3008

Zum Auslesen der Daten von meinem Potentiometer habe ich einen MCP3008 verwendet, der ein 8-Kanal-10-Bit-Analog-Digital-Wandler mit der SPI-Schnittstelle ist und ziemlich einfach zu programmieren ist.

Datenblatt:

Lautsprecher – 3” Durchmesser – 8 Ohm 1 Watt

Dies ist der Lautsprecherkonus, den ich ausgewählt habe, nachdem ich die benötigte Spannung und Ampere berechnet hatte, und dies passte perfekt zu meinem Raspberry Pi-Projekt, das von Adafruit hergestellt wurde.

Übersicht:

MAX98357 I2S Class-D Mono-Verstärker

Dies ist der Verstärker, der mit dem Lautsprecher geliefert wird. Er ist nicht nur ein Verstärker, sondern auch ein I2S-Digital-Analog-Wandler, sodass er auch perfekt zu meinem Lautsprecher- und Audiosystem passt.

Übersicht:

Datenblatt:

Arduino Uno

Das Arduino Uno ist ein Open-Source-Mikrocontroller-Board, das auf dem Microchip ATmega328P-Mikrocontroller basiert, hergestellt von Arduino.cc. Das Uno-Board hat 14 digitale Pins, 6 analoge Pins und ist vollständig mit der Arduino IDE-Software programmierbar

Übersicht:

Levelshifter

Dies ist eine kleine Platine, die sich um die Kommunikation zwischen Arduino Uno und Raspberry Pi und die verschiedenen Spannungen kümmert, Arduino: 5V & Raspberry Pi: 3.3V. Dies wird benötigt, weil der NeoPixel-Ring mit dem Arduino verbunden ist und dort läuft, während alle anderen Dinge auf dem Raspberry Pi laufen.

RGB NeoPixel-Ring

Dies ist ein kleiner Ring, der mit 12 RGB-LEDs gefüllt ist (Sie können größere Ringe mit mehr RGB-LEDs kaufen, wenn Sie möchten). Die ist in meinem Fall mit dem Arduino Uno verbunden, kann aber auch mit vielen anderen Geräten verbunden werden und ist wirklich einfach zu bedienen.

Übersicht:

LCD-Anzeige 16x2

Ich habe ein einfaches LCD-Display verwendet, um meine Temperatur, Lautstärke und IP-Adresse zu drucken.

Datenblatt:

Raspberry Pi 3B+ & 16GB SD-Karte

Mein ganzes Projekt läuft auf meinem Raspberry Pi 3B + mit einem konfigurierten Bild, das ich Ihnen später in meiner Anleitung bei der Konfiguration helfe.

GPIO T-Teil, 2 Breadboards und viele Jumperwires

Um alles zu verbinden, was ich brauchte, Breadboards und Jumperwires, habe ich das GPIO-T-Teil verwendet, damit ich mehr Platz habe und klar ist, welcher Pin welcher ist.

Schritt 2: Schaltplan und Verdrahtung

Schaltplan und Verdrahtung
Schaltplan und Verdrahtung
Schaltplan und Verdrahtung
Schaltplan und Verdrahtung
Schaltplan und Verdrahtung
Schaltplan und Verdrahtung

Für meinen Schaltplan habe ich Fritzing verwendet, ein Programm, das Sie installieren können, mit dem Sie ganz einfach einen Schaltplan in verschiedenen Ansichten erstellen können.

Fritzing herunterladen:

Stellen Sie also sicher, dass Sie alles richtig anschließen! In meinem Fall sind die Farben der Drähte nicht die gleichen wie auf dem Schaltplan.

Schritt 3: Datenbankdesign

Datenbank Design
Datenbank Design

Wir sammeln viele Daten von den 3 angeschlossenen Sensoren, daher benötigen wir eine Datenbank, um die Daten und Sensoren zu speichern. Später werden wir sehen, wie man die Datenbank auf dem Raspberry Pi konfiguriert und Daten hinzufügt. Aber zuerst muss das Datenbankdesign oder ERD (Entity Relationship Diagram) erstellt werden und meins wurde auch mit 3NF normalisiert. Deshalb teilen wir die Sensoren in eine weitere Tabelle auf und arbeiten mit IDs.

Insgesamt ist dies ein wirklich einfaches und einfaches Datenbankdesign, mit dem Sie weiter arbeiten können.

Schritt 4: Vorbereitung des Raspberry Pi

So, jetzt haben wir einige Grundlagen des Projekts erledigt. Beginnen wir mit dem Raspberry Pi!

Konfiguration der SD-Karte

Zunächst benötigen Sie eine 16 GB SD-Karte, auf die Sie Ihr Bild legen können, und ein Programm, um ein Startbild auf die SD-Karte hochzuladen.

Software:

Startbild:

Sobald diese heruntergeladen sind:

  1. Legen Sie Ihre SD-Karte in Ihren Computer ein.
  2. Öffnen Sie Win32, das Sie gerade heruntergeladen haben.
  3. Wählen Sie die Raspbian-Image-Datei aus, die Sie ebenfalls gerade heruntergeladen haben.
  4. Klicken Sie auf "Schreiben" an den Speicherort Ihrer SD-Karte.

Dies kann je nach Hardware einige Zeit dauern. Sobald dies erledigt ist, sind wir bereit, einige letzte Anpassungen vorzunehmen, bevor wir das Bild in unser RPi einfügen.

  1. Gehen Sie in das Verzeichnis Ihrer SD-Karte, suchen Sie nach der Datei „cmdline.txt“und öffnen Sie sie.
  2. Fügen Sie nun 'ip=169.254.10.1' in derselben Zeile hinzu.
  3. Speicher die Datei.
  4. Erstellen Sie eine Datei namens 'ssh' ohne Erweiterung oder Inhalt.

Jetzt können Sie die SD-Karte SICHER aus Ihrem Computer auswerfen und OHNE Strom in den Raspberry Pi stecken. Sobald sich die SD-Karte im RPI befindet, verbinden Sie ein LAN-Kabel von Ihrem Computer mit dem RPi-LAN-Port. Sobald dieser verbunden ist, können Sie das RPi mit Strom versorgen.

Nun wollen wir unseren Raspberry Pi steuern, dies geschieht über Putty.

Putty-Software:

Öffnen Sie nach dem Herunterladen Putty und geben Sie die IP '169.254.10.1' und den Port '22' und den Verbindungstyp ein: SSH. Jetzt können wir endlich unsere Kommandozeilenschnittstelle öffnen und uns mit den Starter-Anmeldeinformationen anmelden -> Benutzer: pi & Passwort: raspberry.

Raspi-config

sudo raspi-config

Was für dieses Projekt wirklich wichtig ist, ist der Schnittstellenbereich, wir müssen viele verschiedene Schnittstellen aktivieren, alle folgenden Schnittstellen aktivieren:

  • Eindraht
  • SPI
  • I2C
  • Seriennummer

Nachdem wir mit raspi-config fertig sind, versuchen wir, eine Verbindung zum Internet herzustellen.

WiFi Verbindung

Zuerst müssen Sie für die folgenden Befehle root sein

sudo -i

Sobald Sie root sind, verwenden Sie den folgenden Befehl. SSID ist Ihr Netzwerkname und Passwort ist offensichtlich das Passwort.

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

Falls Sie einen Fehler gemacht haben, können Sie dieses Netzwerk überprüfen, aktualisieren oder löschen, indem Sie einfach diese Datei eingeben:

nano /etc/wpa_supplicant/wpa_supplicant.conf

Nachdem wir also unser Netzwerk betreten haben, betreten wir die WPA-Client-Schnittstelle

wpa_cli

Wählen Sie Ihre Schnittstelle

Schnittstelle wlan0

Datei neu laden

neu konfigurieren

Und schließlich können Sie sehen, ob Sie gut verbunden sind:

ip a

Aktualisieren und aktualisieren

Jetzt, da wir mit dem Internet verbunden sind, wäre es ein kluger Schachzug, die bereits installierten Pakete zu aktualisieren, also lass uns das zuerst tun, bevor wir andere Pakete installieren.

sudo apt-get update

sudo apt-get upgrade

MariaDB-Datenbank

Installieren Sie den MariaDB-Datenbankserver:

sudo apt-get install mariadb-server

Apache2-Webserver

Installieren Sie den Apache2-Webserver:

sudo apt installiere apache2

Python

Python installieren:

update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1

update-alternatives --install /usr/bin/python python /usr/bin/python3 2

Python-Paket

Sie müssen alle diese Pakete installieren, damit das Backend perfekt funktioniert:

  • Flasche
  • Kolben-Cors
  • Flask-MySql
  • Kolben-SockelIO
  • PyMySQL
  • Anfragen
  • Python-Socketio
  • RPi. GPIO
  • Gevent
  • Gevent-Websocket
  • Ujson
  • Wsaccel

Sprecherbibliothek

Installieren Sie die Lautsprecherbibliothek von Adafruit:

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

Zeit für einen Neustart

sudo neu starten

Schritt 5: Weiterleiten unserer Datenbank an das RPi

Nachdem wir nun alles installiert haben, was wir brauchten, legen wir unsere Datenbank, die wir entworfen haben, auf unserem Raspberry Pi!

Zuerst müssen wir also unsere Datenbank in der MySql-Workbench vorwärts entwickeln, dabei Ihren vollständigen Datenbankcode kopieren und alle "sichtbaren" Wörter darin löschen. Sobald das kopiert ist, öffnen Sie Putty erneut, melden Sie sich an und geben Sie Folgendes ein:

sudo mysql

und jetzt befinden Sie sich in der MySQL-Schnittstelle, kopieren Sie Ihren Datenbankcode hinein und drücken Sie die Eingabetaste.

Jetzt müssen wir nur noch einen Benutzer erstellen

BENUTZER 'Benutzer' IDENTIFIZIERT DURCH 'Benutzer' ERSTELLEN;

GEWÄHRLEISTEN SIE ALLE PRIVILEGIEN AUF *.* TO 'user';

Jetzt neu starten.

Damit jetzt alles eingerichtet sein sollte, können Sie auch eine Verbindung mit Ihrem Pi und MySql Workbench herstellen, damit Sie alle Daten in Ihren Tabellen leichter überprüfen können.

Schritt 6: Konfigurieren von Bluetooth auf unserem RPi

Wir erstellen einen Bluetooth-Lautsprecher, das bedeutet, dass die Medien von unserer Quelle an den Raspberry Pi gesendet werden, und dies kann ziemlich einfach erfolgen, lass uns gleich loslegen!

Meine Quelle für die Bluetooth-Verbindung:

Entfernen des bereits laufenden bluealsa

sudo rm /var/run/bluealsa/*

Fügen Sie die Senkenrolle des A2DP-Profils hinzu

sudo bluealsa -p a2dp-sink &

Öffnen Sie die Bluetooth-Schnittstelle und schalten Sie Ihr Bluetooth ein

bluetoothctl

ein

Richten Sie einen Pairing-Agenten ein

Agent an

Standard-Agent

Machen Sie Ihr RPi auffindbar

auffindbar auf

  • Suchen Sie nun von Ihrem Bluetooth-Gerät aus nach dem RPi und verbinden Sie sich damit.
  • Bestätigen Sie die Kopplung auf beiden Geräten, geben Sie 'ja' in Ihren Kitt ein.
  • Autorisieren Sie den A2DP-Dienst, geben Sie erneut "ja" ein.
  • Sobald dies erledigt ist, können wir unserem Gerät vertrauen, sodass wir nicht jedes Mal, wenn wir eine Verbindung herstellen möchten, alles durchgehen müssen

Vertrauen Sie XX:XX:XX:XX:XX:XX (Ihre Bluetooth-Mac-Adresse von unserem Quellgerät)

Wenn Sie möchten, dass Ihr RPi weiterhin auffindbar ist, ist das Ihre eigene Entscheidung, aber ich ziehe es vor, es wieder auszuschalten, damit die Leute nicht versuchen können, sich mit Ihrer Box zu verbinden

auffindbar aus

Dann können wir unsere Bluetooth-Schnittstelle verlassen

Ausfahrt

Und schließlich unser Audio-Routing: unsere Quellgeräte-Weiterleitung an unser RPi

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

Jetzt ist unser Gerät vollständig mit unserem Raspberry verbunden und Sie sollten Medien von Ihrem Quellgerät auf dem Pi-Lautsprecher abspielen können.

Schritt 7: Schreiben des kompletten Backends

Jetzt ist das Setup abgeschlossen und wir können endlich damit beginnen, unser Backend-Programm zu schreiben!

Ich habe PyCharm für mein gesamtes Backend verwendet, Sie müssen nur sicherstellen, dass Ihr PyCharm-Projekt mit Ihrem Raspberry Pi verbunden ist. Dies bedeutet, dass Ihr Bereitstellungspfad in Ihren Einstellungen eingerichtet ist und Sie alle benötigten Pakete installiert haben, sollte bereits in Schritt erfolgen 4.

Ich habe meine eigenen Klassen verwendet und diese sind auch alle in meinem GitHub enthalten. Link ist im Intro, falls du es verpasst hast;)

In meiner Backend-Datei habe ich Threading-Klassen verwendet, damit alles gleichzeitig ausgeführt werden kann und sich nicht gegenseitig unterbricht. Und ganz unten haben Sie alle Routen, damit wir ganz einfach Daten in unserem Frontend abrufen können.

Schritt 8: Frontend schreiben (HTML, CSS & JavaScript)

Jetzt, da das Backend fertig ist, können wir mit dem Schreiben des vollständigen Frontends beginnen.

HTML & CSS war ziemlich einfach, ich habe versucht, so gut wie möglich zuerst mobil zu arbeiten, da wir uns meistens mit Bluetooth von einem mobilen Gerät aus verbinden, wäre es einfacher, über ein mobiles Dashboard zu steuern.

Sie können Ihr Dashboard so gestalten, wie Sie möchten, ich lasse einfach meinen Code und mein Design hier, Sie können tun, was Sie möchten!

Und Javascript war nicht so schwer, funktionierte mit ein paar GETs aus meinen Backend-Routen, Tonnen von Event-Listenern und einigen Socketio-Strukturen.

Schritt 9: Meinen Fall aufbauen und alles zusammenfügen

Meinen Fall aufbauen und alles zusammenfügen
Meinen Fall aufbauen und alles zusammenfügen
Meinen Fall aufbauen und alles zusammenfügen
Meinen Fall aufbauen und alles zusammenfügen
Meinen Fall aufbauen und alles zusammenfügen
Meinen Fall aufbauen und alles zusammenfügen

Ich begann mit einigen Skizzen, wie das Gehäuse aussehen sollte. Wichtig war, dass es groß genug sein musste, damit alles hineinpasste, da wir eine große Schaltung für das Gehäuse hatten.

Ich habe den Koffer aus Holz gemacht, ich denke, es ist am einfachsten, damit zu arbeiten, wenn Sie nicht so viel Erfahrung mit dem Bauen von Koffern haben und auch viele Dinge haben, die Sie damit machen können.

Ich begann mit einem Koffer für Weinflaschen und fing einfach an, das Holz zu sägen. Als ich meinen Basiskoffer hatte, musste ich nur noch Löcher hineinbohren (viele auf der Vorderseite des Koffers, wie auf den Bildern zu sehen:P) und ein paar Nägel hineinstecken, es ist ein wirklich einfacher Koffer, aber er sieht ziemlich cool aus und passt perfekt.

Und als der Koffer fertig war, war es an der Zeit, alles zusammenzubauen, wie Sie auf dem letzten Bild sehen können! Es ist ein bisschen durcheinander in der Box, aber alles funktioniert und ich hatte nicht viel mehr Platz, daher rate ich Ihnen, vielleicht einen größeren Fall zu erstellen, wenn Sie mein Projekt neu erstellen.

Schritt 10: Einige Probleme, die ich bei der Erstellung des Slimbox-Lautsprechers hatte…

Bluetooth- und Bluealsa-Fehler

Jedes Mal, wenn ich Musik abspielen oder mich mit Bluetooth verbinden wollte, erhielt ich Fehler von Bluetooth und bluealsa. Ich habe etwas recherchiert und das war die Lösung für mein Problem. Aus irgendeinem Grund war mein Bluetooth weich geblockt, ich bin mir nicht sicher, ob dies standardmäßig weich geblockt ist. Sie können sehen, ob dies der Fall ist, indem Sie den folgenden Befehl in Ihren Putty eingeben.

rfkill-Liste

Wenn es also weich blockiert ist, verwenden Sie einfach Folgendes:

rfkill Bluetooth entsperren

Und Sie möchten vielleicht danach neu starten, meine Quelle:

Probleme mit der seriellen Verbindung

Ein weiteres großes Problem war, dass ich über den Levelshifter keine Verbindung zu meinem Arduino herstellen konnte. Nach einigem Suchen fand ich heraus, dass mein '/dev/ttyS0' weg war und dies könnte an einem Update Ihres RPi liegen. Habe dazu auch eine Lösung gefunden

Sie müssen die serielle Konsole mit raspi-config erneut aktivieren, neu starten und dann das Bit "console=serial0, 115200" manuell aus '/boot/cmdline.txt' entfernen. Bestätigen Sie, dass "enable_uart=1" in ' ist. /boot/config.txt“und starten Sie erneut. Das sollte Ihren ttyS0-Port sowie den Softlink „/dev/serial0“zurückbekommen.

Quelle:

Empfohlen: