Spisu treści:

Slimbox - inteligentny głośnik Bluetooth!: 10 kroków (ze zdjęciami)
Slimbox - inteligentny głośnik Bluetooth!: 10 kroków (ze zdjęciami)

Wideo: Slimbox - inteligentny głośnik Bluetooth!: 10 kroków (ze zdjęciami)

Wideo: Slimbox - inteligentny głośnik Bluetooth!: 10 kroków (ze zdjęciami)
Wideo: Samsung Level Slim Box - recenzja głośnika |Opinie RTV AGD 2024, Lipiec
Anonim
Slimbox - inteligentny głośnik Bluetooth!
Slimbox - inteligentny głośnik Bluetooth!

No hej!

Na potrzeby mojego szkolnego projektu w MCT Howest Kortrijk stworzyłem inteligentne urządzenie głośnikowe Bluetooth z różnymi czujnikami, w zestawie z wyświetlaczem LCD i pierścieniem RGB NeoPixel. Wszystko działa na Raspberry Pi (baza danych, serwer WWW, backend).

Więc w tej instrukcji pokażę ci, jak zrobiłem ten projekt w 3 tygodnie, krok po kroku, więc jeśli ktoś z was chce odtworzyć mój projekt, możesz to łatwo zrobić!

To także moja pierwsza instrukcja, jeśli masz jakieś pytania, postaram się na nie odpowiedzieć tak szybko, jak to możliwe!

Mój GitHub:

Krok 1: Materiały eksploatacyjne

Kieszonkowe dzieci
Kieszonkowe dzieci
Kieszonkowe dzieci
Kieszonkowe dzieci
Kieszonkowe dzieci
Kieszonkowe dzieci

Czujnik temperatury DS18B20

DS18B20 to jednoprzewodowy czujnik mierzący temperaturę, wyprodukowany przez Maxim Integrated. Istnieją dwa rodzaje czujników DS18B20, sam komponent (których użyłem) i wersja wodoodporna, która jest znacznie większa, ale nie tego potrzebowałem do mojego projektu, więc użyłem tylko tego komponentu. Czujnik może mierzyć temperaturę w zakresie od -55°C do +125°C (-67°F do +257°F) i ma dokładność 0,5°C od -10°C do +85°C. Posiada również programowalną rozdzielczość od 9 bitów do 12 bitów.

Arkusz danych:

Czujnik potencjometru

Potencjometr to rezystor z trzema zaciskami, który można regulować ręcznie, obracając górną część czujnika. Pozycja górnej części określa napięcie wyjściowe potencjometru.

Akcelerometr LSM303 + Kompas Breakout

Płytka typu breakout LSM303 to połączenie trójosiowego akcelerometru oraz magnetometru/kompasu, wyprodukowane przez firmę Adafruit. Jest używany z interfejsem I2C Raspberry Pi.

Przegląd:

Arkusz danych:

MCP3008

Aby odczytać dane z mojego potencjometru, użyłem MCP3008, który jest 8-kanałowym 10-bitowym konwerterem analogowo-cyfrowym z interfejsem SPI i jest dość łatwy do zaprogramowania.

Arkusz danych:

Głośnik – średnica 3” – 8 Ohm 1 Wat

To jest stożek głośnika, który wybrałem po obliczeniu potrzebnego napięcia i amperów i idealnie pasował do mojego projektu Raspberry Pi, wyprodukowanego przez Adafruit.

Przegląd:

Wzmacniacz mono MAX98357 I2S klasy D

To jest wzmacniacz, który jest dostarczany z głośnikiem, nie tylko jest to wzmacniacz, ale także konwerter cyfrowo-analogowy I2S, więc idealnie pasuje do mojego głośnika i systemu audio.

Przegląd:

Arkusz danych:

Arduino Uno

Arduino Uno to płytka mikrokontrolera typu open source oparta na mikrokontrolerze Microchip ATmega328P, wyprodukowanym przez firmę Arduino.cc. Płytka Uno ma 14 pinów cyfrowych, 6 pinów analogowych i jest w pełni programowalna za pomocą oprogramowania Arduino IDE

Przegląd:

Zmieniacz poziomu

Jest to niewielka płytka, która dba o komunikację pomiędzy Arduino Uno i Raspberry Pi oraz różnymi napięciami, Arduino: 5V i Raspberry Pi: 3,3V. Jest to potrzebne, ponieważ pierścień NeoPixel jest podłączony do Arduino i tam działa, podczas gdy wszystkie inne rzeczy działają na Raspberry Pi.

Pierścień NeoPixel RGB

Jest to mały pierścień wypełniony 12 diodami RGB (możesz kupić większe pierścienie z większą ilością diod RGB, jeśli chcesz). Który w moim przypadku jest podłączony do Arduino Uno, ale można go również podłączyć do wielu innych urządzeń i jest naprawdę prosty w użyciu.

Przegląd:

Wyświetlacz LCD 16x2

Użyłem podstawowego wyświetlacza LCD do wydrukowania mojej temperatury, głośności i adresu IP.

Arkusz danych:

Karta SD Raspberry Pi 3B+ i 16 GB

Cały mój projekt działa na moim Raspberry Pi 3B+ ze skonfigurowanym obrazem, który pomogę ci skonfigurować później w mojej instrukcji.

GPIO T-Part, 2 płytki prototypowe i wiele zworek

Aby podłączyć wszystko, czego potrzebowałem, płytki stykowe i zworki, użyłem części T GPIO, więc mam więcej miejsca i jest jasne, który pin jest który.

Krok 2: Schemat i okablowanie

Schemat i okablowanie
Schemat i okablowanie
Schemat i okablowanie
Schemat i okablowanie
Schemat i okablowanie
Schemat i okablowanie

Do mojego schematu użyłem Fritzing, jest to program, który można zainstalować, który pozwala na naprawdę łatwe tworzenie schematu w różnych rodzajach widoków.

Pobierz Fritzing:

Upewnij się więc, że wszystko łączysz we właściwy sposób! W moim przypadku kolory przewodów nie są takie same jak na schemacie.

Krok 3: Projektowanie bazy danych

Projekt bazy danych
Projekt bazy danych

Zbieramy dużo danych z 3 podłączonych czujników, więc potrzebujemy bazy danych do przechowywania danych i czujników. Później zobaczymy, jak skonfigurować bazę danych na Raspberry Pi i jak dodawać do niej dane. Ale najpierw trzeba wykonać projekt bazy danych lub ERD (ang. Entity Relationship Diagram), a mój również został znormalizowany za pomocą 3NF. Dlatego podzieliliśmy czujniki na inny stół i pracujemy z identyfikatorami.

Ogólnie rzecz biorąc, jest to naprawdę prosty i łatwy projekt bazy danych do dalszej pracy.

Krok 4: Przygotowanie Raspberry Pi

Więc teraz, gdy mamy gotowe podstawy projektu. Zacznijmy od Raspberry Pi!

Konfiguracja karty SD

Najpierw potrzebujesz karty SD o pojemności 16 GB, na której możesz umieścić swój obraz oraz programu do wgrania obrazu startowego na kartę SD.

Oprogramowanie:

Obraz początkowy:

Więc po ich pobraniu:

  1. Włóż kartę SD do komputera.
  2. Otwórz Win32, który właśnie pobrałeś.
  3. Wybierz plik obrazu Raspbian, który również właśnie pobrałeś.
  4. Kliknij „zapisz” w lokalizacji swojej karty SD.

Może to zająć trochę czasu, w zależności od sprzętu. Gdy już to zrobimy, jesteśmy gotowi do wprowadzenia ostatecznych poprawek przed umieszczeniem obrazu w naszym RPi.

  1. Przejdź do katalogu karty SD, wyszukaj plik o nazwie „cmdline.txt” i otwórz go.
  2. Teraz dodaj 'ip=169.254.10.1' w tej samej linii.
  3. Zapisz plik.
  4. Utwórz plik o nazwie „ssh” bez rozszerzenia i zawartości.

Teraz możesz BEZPIECZNIE wysunąć kartę SD z komputera i włożyć ją do Raspberry Pi BEZ zasilania. Gdy karta SD znajduje się w RPI, podłącz kabel LAN z komputera do portu LAN RPi, po podłączeniu możesz podłączyć zasilanie do RPi.

Teraz chcemy kontrolować nasze Raspberry Pi, odbywa się to za pomocą Putty.

Oprogramowanie Putty:

Po pobraniu otwórz Putty i wprowadź adres IP „169.254.10.1” i port „22” oraz typ połączenia: SSH. Teraz możemy wreszcie otworzyć nasz interfejs wiersza poleceń i zalogować się za pomocą danych logowania startera -> Użytkownik: pi i Hasło: raspberry.

Konfiguracja raspi

sudo raspi-config

To, co jest naprawdę ważne dla tego projektu, to sekcja interfejsów, musimy włączyć wiele różnych interfejsów, włączyć wszystkie następujące interfejsy:

  • Jednoprzewodowy
  • SPI
  • I2C
  • Seryjny

Teraz, gdy skończyliśmy z raspi-config, spróbujmy połączyć się z internetem.

Połączenie WiFi

Po pierwsze, musisz być rootem dla następujących poleceń

sudo-i

Gdy jesteś rootem, użyj następującego polecenia. SSID to nazwa Twojej sieci, a hasło to oczywiście hasło.

wpa_passphrase "ssid" "hasło" >> /etc/wpa_supplicant/wpa_supplicant.conf

Jeśli popełniłeś błąd, możesz sprawdzić, zaktualizować lub usunąć tę sieć, po prostu wprowadzając ten plik:

nano /etc/wpa_supplicant/wpa_supplicant.conf

Więc po wejściu do naszej sieci wejdźmy do interfejsu klienta WPA

wpa_cli

Wybierz swój interfejs

interfejs wlan0

Odśwież plik

przekonfigurować

I na koniec możesz sprawdzić, czy masz dobre połączenie:

ip a

Aktualizacja i aktualizacja

Teraz, gdy jesteśmy połączeni z Internetem, aktualizacja już zainstalowanych pakietów byłaby sprytnym posunięciem, więc zróbmy to najpierw przed zainstalowaniem innych pakietów.

aktualizacja sudo apt-get

sudo apt-get upgrade

Baza danych MariaDB

Zainstaluj serwer bazy danych MariaDB:

sudo apt-get zainstaluj serwer mariadb

Serwer WWW Apache2

Zainstaluj serwer WWW Apache2:

sudo apt zainstaluj apache2

Pyton

Zainstaluj Pythona:

update-alternatives – zainstaluj /usr/bin/python python /usr/bin/python2.7 1

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

Pakiet Pythona

Będziesz musiał zainstalować wszystkie te pakiety, aby backend działał idealnie:

  • Kolba
  • Flask-Cors
  • Flask-MySql
  • Kolba-Gniazdo IO
  • PyMySQL
  • Upraszanie
  • Gniazdo Pythona
  • RPi. GPIO
  • Gevent
  • Gevent-websocket
  • Ujson
  • Wsaccel

Biblioteka głośników

Zainstaluj bibliotekę głośników z Adafruit:

curl -sS https://raw.githubusercontent.com/adafruit/Raspbe… | grzmotnąć

Czas na restart

ponowne uruchomienie sudo

Krok 5: Prześlij naszą bazę danych do RPi

Teraz, gdy zainstalowaliśmy wszystko, czego potrzebowaliśmy, umieść naszą bazę danych, którą zaprojektowaliśmy na naszym Raspberry Pi!

Więc najpierw musimy zaprojektować naszą bazę danych w środowisku MySql, jednocześnie kopiując cały kod bazy danych i usuwając wszystkie "widoczne" słowa. Więc kiedy to zostanie skopiowane, otwórz ponownie putty, zaloguj się i wpisz:

sudo mysql

a teraz jesteś w interfejsie mysql, skopiuj do niego kod bazy danych i naciśnij enter.

Teraz wystarczy tylko utworzyć użytkownika

UTWÓRZ UŻYTKOWNIKA „użytkownika” ZIDENTYFIKOWANEGO PRZEZ „użytkownika”;

PRZYZNAJ WSZYSTKIE UPRAWNIENIA OD *.* 'użytkownikowi';

Teraz uruchom ponownie.

Więc wszystko powinno być teraz skonfigurowane, możesz również nawiązać połączenie ze swoim Pi i MySql Workbench, aby łatwiej było sprawdzić wszystkie dane w twoich tabelach.

Krok 6: Konfiguracja Bluetooth w naszym RPi

Tworzymy głośnik Bluetooth, co oznacza, że media są wysyłane z naszego źródła do Raspberry Pi i można to zrobić całkiem łatwo, przejdźmy od razu!

Moje źródło połączenia Bluetooth:

Usunięcie już działającej bluealsy

sudo rm /var/run/bluealsa/*

Dodaj rolę zlewu profilu A2DP

sudo bluealsa -p a2dp-zlew &

Otwórz interfejs Bluetooth i włącz Bluetooth

bluetoothctl

zasilanie włączone

Skonfiguruj agenta parowania

agent włączony

domyślny agent

Spraw, aby Twoje RPi było wykrywalne

do znalezienia na

  • Teraz z urządzenia Bluetooth wyszukaj RPi i połącz się z nim.
  • Potwierdź parowanie na obu urządzeniach, wpisz „tak” w swojej szpachli.
  • Autoryzuj usługę A2DP, ponownie wpisz „tak”.
  • Gdy to zrobimy, możemy zaufać naszemu urządzeniu, więc nie musimy przechodzić przez to wszystko za każdym razem, gdy chcemy się połączyć

zaufaj XX:XX:XX:XX:XX:XX (Twój adres mac bluetooth z naszego urządzenia źródłowego)

Jeśli chcesz, aby twoje RPi było nadal wykrywalne, to twój własny wybór, ale wolę go ponownie wyłączyć, aby ludzie nie mogli próbować połączyć się z twoim pudełkiem

wykrywalny wyłączony

Następnie możemy wyjść z naszego interfejsu bluetooth

Wyjście

I wreszcie nasz routing audio: nasze urządzenie źródłowe przekierowuje do naszego RPi

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

Teraz nasze urządzenie jest w pełni połączone z naszym Raspberry i powinieneś być w stanie odtwarzać multimedia z urządzenia źródłowego na głośniku Pi.

Krok 7: Napisanie kompletnego zaplecza

Więc teraz konfiguracja jest zakończona, możemy wreszcie zacząć pisać nasz program backendowy!

Użyłem PyCharm dla całego mojego backendu, musisz tylko upewnić się, że twój projekt PyCharm jest podłączony do twojego Raspberry Pi, oznacza to, że twoja ścieżka wdrożenia jest ustawiona w twoich ustawieniach i zainstalowałeś wszystkie potrzebne pakiety, powinny być już zrobione w kroku 4.

Użyłem własnych klas i wszystkie są zawarte w moim GitHubie. Link jest w intro na wypadek, gdybyś go przegapił;)

W moim pliku backendowym użyłem klas wątków, więc wszystko może działać w tym samym czasie i nie będzie się nawzajem przerywać. A na dole masz wszystkie trasy, dzięki czemu możemy łatwo uzyskać dane w naszym interfejsie.

Krok 8: Pisanie frontendu (HTML, CSS i JavaScript)

Teraz, gdy backend jest gotowy, możemy zacząć pisać pełny frontend.

HTML i CSS zostały wykonane dość łatwo, najpierw wypróbowaliśmy pracę mobilną, jak to tylko możliwe, ponieważ najczęściej łączymy się przez Bluetooth z urządzenia mobilnego, łatwiej byłoby kontrolować z mobilnego pulpitu nawigacyjnego.

Możesz zaprojektować swój pulpit nawigacyjny w dowolny sposób, po prostu zostawię tutaj mój kod i projekt, możesz robić, co chcesz!

A Javascript nie był taki trudny, pracował z kilkoma GET z moich tras zaplecza, mnóstwem detektorów zdarzeń i kilkoma strukturami socketio.

Krok 9: Budowanie mojej sprawy i składanie wszystkiego razem

Budowanie mojej sprawy i łączenie wszystkiego w całość
Budowanie mojej sprawy i łączenie wszystkiego w całość
Budowanie mojej sprawy i łączenie wszystkiego w całość
Budowanie mojej sprawy i łączenie wszystkiego w całość
Budowanie mojej sprawy i łączenie wszystkiego w całość
Budowanie mojej sprawy i łączenie wszystkiego w całość

Zacząłem od kilku szkiców tego, jak chciałem, aby wyglądała obudowa, ważne było to, że musiała być wystarczająco duża, aby wszystko się zmieściło, ponieważ mamy duży obwód do umieszczenia w obudowie.

Zrobiłem obudowę z drewna, myślę, że najłatwiej jest z nią pracować, gdy nie masz dużego doświadczenia w budowaniu skrzynek i masz wiele rzeczy, które możesz z tym zrobić.

Zacząłem od skrzynki na butelki wina i po prostu zacząłem piłować drewno. Kiedy już miałem swoją podstawową walizkę, musiałem tylko wywiercić w niej otwory (dużo z przodu obudowy, jak widać na zdjęciach:P) i włożyć do niej kilka gwoździ, to naprawdę podstawowa obudowa, ale tak wygląda całkiem fajnie i idealnie pasuje.

A gdy sprawa była już skończona, nadszedł czas, aby to wszystko poskładać, jak widać na ostatnim zdjęciu! W środku jest trochę bałaganu, ale wszystko działa, a ja nie miałem dużo więcej miejsca, więc radzę może stworzyć większą skrzynkę, jeśli odtwarzasz mój projekt.

Krok 10: Niektóre problemy, które miałem na drodze tworzenia głośnika Slimbox…

Błędy Bluetooth i bluealsa

Za każdym razem, gdy chciałem odtworzyć muzykę lub połączyć się przez bluetooth otrzymywałem błędy z bluetooth i bluealsa. Zrobiłem kilka badań na ten temat i to było rozwiązanie mojego problemu. Z jakiegoś powodu mój bluetooth został zablokowany programowo, nie jestem pewien, czy jest to standardowa blokada programowa. Możesz sprawdzić, czy tak jest, wpisując następujące polecenie w swoim Putty.

lista rfkill

Więc jeśli jest zablokowany programowo, po prostu użyj tego:

rfkill odblokuj bluetooth

I możesz chcieć zrestartować po tym, moje źródło:

Problemy z połączeniem szeregowym

Innym dużym problemem, jaki miałem, było to, że nie mogłem nawiązać żadnego połączenia z moim Arduino przez levelshifter, po kilku poszukiwaniach dowiedziałem się, że mój „/dev/ttyS0” zniknął i może to być spowodowane aktualizacją twojego RPi. Również znalazłem rozwiązanie na ten temat

Będziesz musiał ponownie włączyć konsolę szeregową za pomocą raspi-config, zrestartować, a następnie ręcznie usunąć bit "console=serial0, 115200" z '/boot/cmdline.txt'. Potwierdź, że "enable_uart=1" jest w ' /boot/config.txt' i uruchom ponownie. To powinno przywrócić twój port ttyS0, jak również miękki link '/dev/serial0' do niego.

Źródło:

Zalecana: