Talaan ng mga Nilalaman:

Slimbox - isang Smart Bluetooth Speaker !: 10 Hakbang (na may Mga Larawan)
Slimbox - isang Smart Bluetooth Speaker !: 10 Hakbang (na may Mga Larawan)

Video: Slimbox - isang Smart Bluetooth Speaker !: 10 Hakbang (na may Mga Larawan)

Video: Slimbox - isang Smart Bluetooth Speaker !: 10 Hakbang (na may Mga Larawan)
Video: Как подключить телефон Xiaomi к Телевизору или ТВ приставке | Беспроводной дисплей 2024, Hulyo
Anonim
Slimbox - isang Smart Bluetooth Speaker!
Slimbox - isang Smart Bluetooth Speaker!

Hoy, ikaw!

Para sa aking proyekto sa paaralan sa MCT Howest Kortrijk, gumawa ako ng isang smart Bluetooth speaker device na may iba't ibang mga sensor, kasama ang isang LCD at RGB NeoPixel ring. Tumatakbo ang lahat sa Raspberry Pi (Database, Webserver, Backend).

Kaya sa itinuturo na ito ay ipapakita ko sa iyo kung paano ko nagawa ang proyektong ito sa loob ng 3 linggo, sunud-sunod, kaya't kung may sinuman sa inyo na nais na likhain muli ang aking proyekto, madali mong magagawa!

Ito rin ang aking unang itinuturo, kung mayroon kang anumang mga katanungan, susubukan kong sagutin ang mga ito nang mabilis hangga't maaari!

Aking GitHub:

Hakbang 1: Mga Panustos

Mga gamit
Mga gamit
Mga gamit
Mga gamit
Mga gamit
Mga gamit

DS18B20 Temperatura Sensor

Ang DS18B20 ay isang sensor na may isang wire na sumusukat sa temperatura, na gawa ng Maxim Integrated. Mayroong 2 uri ng mga sensor ng DS18B20, ang sangkap lamang (Na ginamit ko) at ang hindi tinatagusan ng tubig na bersyon, na mas malaki, ngunit hindi iyon ang kailangan ko para sa aking proyekto, kaya ginamit ko lang ang sangkap. Maaaring sukatin ng sensor ang temperatura sa saklaw na -55 ° C hanggang + 125 ° C (-67 ° F hanggang + 257 ° F) at mayroon itong katumpakan na 0.5 ° C mula -10 ° C hanggang + 85 ° C. Mayroon din itong isang programmable na resolusyon mula 9 na piraso hanggang 12 piraso.

Datasheet:

Potentiometer sensor

Ang potensyomiter ay risistor na may tatlong mga terminal na manu-manong maaayos sa pamamagitan lamang ng pag-ikot ng itaas na bahagi ng sensor. Ang posisyon ng itaas na bahagi ay tumutukoy sa output boltahe ng potensyomiter.

LSM303 Accelerometer + Compass Breakout

Ang breakout board ng LSM303 ay isang kumbinasyon ng isang triple-axis accelerometer at isang magnetometer / compass, na ginawa ng Adafruit. Ginagamit ito sa interface ng I2C ng Raspberry Pi.

Pangkalahatang-ideya:

Datasheet:

MCP3008

Upang mabasa ang data mula sa aking potensyomiter ginamit ko ang isang MCP3008, na kung saan ay isang 8 channel na 10 bit na analog sa digital converter sa interface ng SPI at medyo madali itong mai-program.

Datasheet:

Tagapagsalita - 3”Diameter - 8 Ohm 1 Watt

Ito ang pinili kong speaker cone pagkatapos makalkula ang Voltage at Amperes na kakailanganin nito at ito ay isang perpektong akma para sa aking proyekto na Raspberry Pi, na ginawa ng Adafruit.

Pangkalahatang-ideya:

MAX98357 I2S Class-D Mono Amplifier

Ito ang amplifier na kasama ng nagsasalita, hindi lamang ito isang amplifier, isa rin itong I2S digital sa analog converter, kaya perpekto din ito para sa aking speaker at audio system.

Pangkalahatang-ideya:

Datasheet:

Arduino Uno

Ang Arduino Uno ay isang open-source microcontroller board batay sa Microchip ATmega328P microcontroller, na ginawa ng Arduino.cc. Ang Uno board ay mayroong 14 Digital pin, 6 analog pin at ganap na mai-program sa software ng Arduino IDE

Pangkalahatang-ideya:

Levelshifter

Ito ay isang maliit na board na nangangalaga sa komunikasyon sa pagitan ng Arduino Uno at ng Raspberry Pi at ng iba't ibang mga voltages, Arduino: 5V & Raspberry Pi: 3.3V. Kailangan ito dahil ang singsing na NeoPixel ay konektado sa Arduino at tumatakbo doon, habang ang lahat ng iba pang mga bagay ay tumatakbo sa Raspberry Pi.

RGB NeoPixel Ring

Ito ay isang maliit na singsing na puno ng 12 RGB leds (maaari kang bumili ng mas malaking singsing na may mas maraming RGB leds, kung nais mo). Alin ang sa aking kaso na konektado sa Arduino Uno, ngunit maaari ring maiugnay sa maraming iba pang mga aparato at talagang simpleng gamitin.

Pangkalahatang-ideya:

LCD Display 16x2

Gumamit ako ng pangunahing LCD Display upang mai-print ang aking temperatura, dami at IP address.

Datasheet:

Raspberry Pi 3B + & 16GB SD Card

Ang aking buong proyekto ay tumatakbo sa aking Raspberry Pi 3B + na may isang naka-configure na imahe, na tutulong sa iyo na mai-configure sa paglaon sa aking itinuro.

GPIO T-Bahagi, 2 Breadboard at maraming mga jumperwires

Upang ikonekta ang lahat ng kailangan ko ng mga breadboard at jumperwires, ginamit ko ang GPIO T-part kaya't mas marami akong puwang at malinaw kung aling pin ang alin.

Hakbang 2: Skematika at Mga Kable

Schematic at Kable
Schematic at Kable
Schematic at Kable
Schematic at Kable
Schematic at Kable
Schematic at Kable

Para sa aking eskematiko ginamit ko ang Fritzing, ito ay isang programa na maaari mong mai-install na nagbibigay-daan sa iyo upang lumikha ng isang eskematiko talagang madali sa iba't ibang mga uri ng pananaw.

I-download ang Fritzing:

Kaya tiyaking ikinonekta mo ang lahat sa tamang paraan! Sa aking kaso ang mga kulay ng mga wire ay hindi pareho tulad ng sa eskematiko.

Hakbang 3: Disenyo ng Database

Disenyo ng Database
Disenyo ng Database

Nangongolekta kami ng maraming data mula sa 3 mga sensor na konektado, kaya kailangan namin ng isang database upang maiimbak ang data at mga sensor. Mamaya makikita natin kung paano i-configure ang database sa Raspberry Pi at kung paano magdagdag ng data dito. Ngunit una ang disenyo ng database o ERD (Entity Relationship Diagram) ay dapat gawin at ang akin ay na-normalize din sa 3NF. Iyon ang dahilan kung bakit pinaghiwalay namin ang mga sensor sa isa pang mesa at nagtatrabaho sa mga ID.

Sa pangkalahatan ito ay isang talagang pangunahing at madaling disenyo ng database upang higit na gumana.

Hakbang 4: Paghahanda ng Raspberry Pi

Kaya ngayon na mayroon kaming ilang mga pangunahing kaalaman sa tapos na proyekto. Magsimula tayo sa Raspberry Pi!

Pag-configure ng SD Card

Una, kailangan mo ng isang 16GB SD Card kung saan mailalagay mo ang iyong imahe at isang programa upang mag-upload ng isang panimulang imahe sa SD card.

Software:

Simulan ang imahe:

Kaya kapag na-download na ang mga ito:

  1. Ilagay ang iyong SD card sa iyong computer.
  2. Buksan ang Win32 na na-download mo lang.
  3. Piliin ang file ng imahe ng Raspbian na na-download mo lamang.
  4. Mag-click sa 'sumulat' sa lokasyon ng iyong SD card.

Maaari itong magtagal, depende sa iyong hardware. Kapag tapos na ito, handa na kaming gumawa ng mga huling pagsasaayos bago ilagay ang imahe sa aming RPi.

  1. Pumunta sa direktoryo ng iyong SD card, hanapin ang file na pinangalanang 'cmdline.txt' at buksan ito.
  2. Ngayon idagdag ang 'ip = 169.254.10.1' sa parehong isang linya.
  3. I-save ang file.
  4. Lumikha ng isang file na pinangalanang 'ssh' nang walang extension o nilalaman.

Ngayon ay maaari mong ligtas na palabasin ang SD card mula sa iyong computer at ilagay ito sa Raspberry Pi NA WALANG kapangyarihan. Kapag ang SD card ay nasa RPI, ikonekta ang isang LAN cable mula sa iyong computer sa RPi LAN port, sa sandaling nakakonekta ito maaari mong ikonekta ang lakas sa RPi.

Ngayon nais naming kontrolin ang aming Raspberry Pi, ginagawa ito sa pamamagitan ng Putty.

Putty software:

Kapag na-download na, buksan ang Putty at ipasok ang IP '169.254.10.1' at Port '22' at uri ng koneksyon: SSH. Ngayon ay maaari na nating buksan ang aming interface ng command line at mag-login gamit ang impormasyon sa pag-login ng starter -> Gumagamit: pi & Password: raspberry.

Raspi-config

sudo raspi-config

Ang talagang mahalaga para sa proyektong ito ay ang seksyon ng interfacing, kailangan naming paganahin ang maraming iba't ibang mga interface, paganahin ang lahat ng mga sumusunod na interface:

  • One-wire
  • SPI
  • I2C
  • Serial

Ngayong tapos na kami sa raspi-config, subukan natin at gumawa ng isang koneksyon sa internet.

Koneksyon sa Wi-Fi

Una, kailangan kang maging ugat para sa mga sumusunod na utos

sudo -i

Kapag nag-ugat ka na, gamitin ang sumusunod na utos. Ang SSID ang iyong pangalan sa network at ang password ay malinaw na password ito.

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

Kung sakaling nagkamali ka, maaari mong suriin, i-update o tanggalin ang network na ito sa pamamagitan lamang ng pagpasok sa file na iyon:

nano /etc/wpa_supplicant/wpa_supplicant.conf

Kaya pagkatapos na ipasok ang aming network, ipasok natin ang interface ng WPA client

wpa_cli

Piliin ang iyong interface

interface wlan0

I-reload ang file

muling pag-configure

At sa wakas makikita mo kung nakakonekta ka nang maayos:

ip a

I-update at i-upgrade

Ngayong nakakonekta na tayo sa internet, ang pag-update ng naka-install na mga pakete ay magiging isang matalinong paglipat, kaya gawin muna natin iyon bago mag-install ng iba pang mga pakete.

sudo apt-get update

sudo apt-get upgrade

MariaDB Database

I-install ang MariaDB database server:

sudo apt-get install mariadb-server

Apache2 Webserver

I-install ang Apache2 webserver:

sudo apt i-install ang apache2

Sawa

I-install ang Python:

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

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

Pakete ng sawa

Kailangan mong i-install ang lahat ng mga package na ito upang gawing perpekto ang backend:

  • Prasko
  • Flask-Cors
  • Flask-MySql
  • Flask-SocketIO
  • PyMySQL
  • Mga Kahilingan
  • Python-socketio
  • RPi. GPIO
  • Gevent
  • Gevent-websocket
  • Ujson
  • Wsaccel

Speaker library

I-install ang speaker library mula sa Adafruit:

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

Oras upang mag-reboot

sudo reboot

Hakbang 5: Ipasa ang Inhenyeriyang Ang aming Database sa RPi

Ngayon na na-install na namin ang lahat ng kailangan namin, ilagay ang aming Database na dinisenyo namin sa aming Raspberry Pi!

Kaya muna kailangan naming ipasa ang engineer ang aming database sa MySql workbench, habang ginagawa iyon, kopyahin ang iyong buong code ng database at tanggalin ang lahat ng mga 'nakikitang' salita dito. Kaya't sa sandaling makopya iyon, hinayaan nating buksan muli ang masilya, mag-log in at mag-type:

sudo MySQL

at ngayon nasa interface ka ng MySQL, kopyahin ang iyong database code dito at pindutin ang enter.

Ngayon kailangan lang naming lumikha ng isang gumagamit

GUMAWA NG USER 'gumagamit' NA NAKILALA NG 'gumagamit';

IBIGAY ANG LAHAT NG PRIVILEGES SA *. * SA 'gumagamit';

Ngayon i-reboot.

Kaya't dapat na naka-set up ang lahat ngayon, maaari ka ring gumawa ng isang koneksyon sa iyong Pi at MySql Workbench, kaya mas madaling suriin ang lahat ng data sa iyong mga talahanayan.

Hakbang 6: Pag-configure ng Bluetooth sa Aming RPi

Lumilikha kami ng isang Bluetooth speaker, kaya't nangangahulugan ito na ang media ay ipinapadala mula sa aming mapagkukunan sa Raspberry Pi at maaari itong magawa medyo madali, tayo mismo!

Ang aking mapagkukunan para sa koneksyon sa bluetooth: https://scribles.net/streaming-blu Bluetooth-audio-fro…

Inaalis ang tumatakbo na bluealsa

sudo rm / var / run / bluealsa / *

Magdagdag ng A2DP profile Sink role

sudo bluealsa -p a2dp-sink &

Buksan ang interface ng Bluetooth at paganahin ang iyong bluetooth

bluetoothctl

kapangyarihan sa

Mag-set up ng isang ahente ng pagpapares

ahente sa

default-ahente

Gawing matuklasan ang iyong RPi

matuklasan sa

  • Ngayon mula sa iyong aparatong Bluetooth, hanapin ang RPi at kumonekta dito.
  • Kumpirmahin ang pagpapares sa parehong mga aparato, i-type ang 'oo' sa iyong masilya.
  • Pahintulutan ang serbisyo ng A2DP, i-type muli ang 'oo'.
  • Kapag tapos na ito, mapagkakatiwalaan namin ang aming aparato, kaya hindi na namin ito pinagdadaanan tuwing nais naming kumonekta

tiwala XX: XX: XX: XX: XX: XX (Ang iyong blu mac mac address mula sa aming pinagmulang aparato)

Kung nais mong mapanatili ang pagiging tuklas ng iyong RPi, iyon ang iyong sariling pagpipilian, ngunit mas gusto ko itong patayin muli, upang hindi masubukan ng mga tao na kumonekta sa iyong kahon

matutuklasan

Pagkatapos ay makakalabas kami ng aming interface ng Bluetooth

labasan

At sa wakas ang aming audio routing: ang aming pinagmulang aparato na nagpapasa sa aming RPi

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

Ngayon ang aming aparato ay ganap na konektado sa aming Raspberry at dapat na makapag-play ng media mula sa iyong pinagmulang aparato sa Pi speaker.

Hakbang 7: Pagsulat ng Kumpletong Backend

Kaya't ngayon ang pag-setup ay tapos na, maaari na nating magsimula sa pagsulat ng aming backend program!

Ginamit ko ang PyCharm para sa aking buong backend, kailangan mo lamang tiyakin na ang iyong proyekto ng PyCharm ay konektado sa iyong Raspberry Pi, nangangahulugan ito na ang iyong landas sa Pag-deploy ay naka-set up sa iyong mga setting at na-install mo ang lahat ng mga pakete na kailangan namin, dapat ay tapos na sa hakbang 4.

Gumamit ako ng sarili kong mga klase at lahat din ito ay kasama sa aking GitHub. Nasa intro ang link kung sakaling napalampas mo ito;)

Sa aking backend file na ginamit ko ang mga klase sa pag-thread, kaya't ang lahat ay maaaring tumakbo nang sabay at hindi ito makagambala. At sa ibaba nakuha mo ang lahat ng mga ruta upang madali kaming makakuha ng data sa aming frontend.

Hakbang 8: Pagsulat ng Frontend (HTML, CSS & JavaScript)

Ngayon na tapos na ang backend, maaari naming simulang isulat ang buong front-end.

Ang HTML & CSS ay tapos na medyo madali, sinubukan muna ang pagtatrabaho mobile hangga't maaari, dahil madalas kaming kumonekta sa Bluetooth mula sa isang mobile device, mas madaling kontrolin mula sa isang mobile dashboard.

Maaari mong idisenyo ang iyong dashboard sa anumang paraan na nais mong, iiwan ko lamang ang aking code at disenyo dito, maaari mong gawin ang nais mo!

At ang Javascript ay hindi ganoon kahirap, nagtrabaho kasama ng ilang mga GET mula sa aking mga ruta sa backend, tone-toneladang tagapakinig ng kaganapan at ilang mga socketio na istraktura.

Hakbang 9: Pagbubuo ng Aking Kaso at Pagsasama-sama sa Lahat ng Ito

Pagbubuo ng Aking Kaso at Pagsasama-sama sa Lahat ng Ito
Pagbubuo ng Aking Kaso at Pagsasama-sama sa Lahat ng Ito
Pagbubuo ng Aking Kaso at Pagsasama-sama sa Lahat ng Ito
Pagbubuo ng Aking Kaso at Pagsasama-sama sa Lahat ng Ito
Pagbubuo ng Aking Kaso at Pagsasama-sama sa Lahat ng Ito
Pagbubuo ng Aking Kaso at Pagsasama-sama sa Lahat ng Ito

Una akong nagsimula sa ilang mga sketch ng kung paano ko nais na tumingin ang kaso, isang bagay na mahalaga ay kailangang sapat na malaki para magkasya ang lahat, dahil nakakuha kami ng isang malaking circuit upang mailagay ang kaso.

Ginawa ko ang kaso sa kahoy, sa palagay ko ito ang pinakamadaling magtrabaho kapag wala kang gaanong karanasan sa mga kaso ng pagbuo at mayroon ka ding maraming mga bagay na magagawa mo dito.

Nagsimula ako mula sa isang kaso para sa mga bote ng alak at nagsimula na lamang akong magbas ng kahoy. Kapag nagkaroon ako ng aking pangunahing kaso, kailangan ko lamang mag-drill ng mga butas dito (maraming sa harap ng kaso, tulad ng nakikita mo sa mga larawan: P) at maglagay ng ilang mga kuko dito, ito ay talagang pangunahing kaso, ngunit ito mukhang medyo cool at akma perpekto.

At sa sandaling tapos na ang kaso, oras na upang pagsamahin ang lahat, tulad ng nakikita mo sa huling larawan! Ito ay isang gulo sa loob ng kahon, ngunit ang lahat ay gumagana at wala akong gaanong mas maraming puwang, kaya pinapayuhan ko kayo na baka lumikha ng isang mas malaking kaso kung muling nililikha mo ang aking proyekto.

Hakbang 10: Ilang Mga Suliraning Nagkaroon Ako sa Aking Kalsada ng Paglikha ng Slimbox Speaker…

Mga error sa Bluetooth at bluealsa

Sa tuwing nais kong maglaro ng musika o kumonekta sa bluetooth, nakatanggap ako ng mga pagkakamali mula sa bluetooth at bluealsa. Gumawa ako ng ilang pagsasaliksik dito at ito ang solusyon sa aking problema. Kaya't sa ilang kadahilanan ang aking bluetooth ay naka-blockblock, hindi sigurado kung ito ay karaniwang soft-block. Maaari mong makita kung ito ay sa pamamagitan ng pag-type ng sumusunod na utos sa iyong Putty.

listahan ng rfkill

Kaya kung softblocked ito, gamitin lamang ito:

rfkill i-block ang bluetooth

At baka gusto mong i-reboot pagkatapos nito, ang aking mapagkukunan:

Mga problema sa serial na koneksyon

Kaya isa pang malaking problema na mayroon ako ay hindi ako makagawa ng anumang koneksyon sa aking Arduino sa pamamagitan ng levelshifter, pagkatapos ng ilang paghahanap ay nalaman ko na ang aking '/ dev / ttyS0' ay nawala at ito ay maaaring dahil sa isang pag-update ng iyong RPi. Nakahanap din ng solusyon dito

Kailangan mong muling paganahin ang serial console na may raspi-config, reboot, at pagkatapos ay manu-manong alisin ang "console = serial0, 115200" na bit mula sa '/boot/cmdline.txt'. Kumpirmahing ang "paganahin ang_uart = 1" ay nasa ' /boot/config.txt ', at muling i-reboot. Iyon ay dapat ibalik ang iyong ttyS0 port, pati na rin ang' / dev / serial0 'soft link dito.

Pinagmulan:

Inirerekumendang: