İçindekiler:

Slimbox - Akıllı Bluetooth Hoparlör!: 10 Adım (Resimlerle)
Slimbox - Akıllı Bluetooth Hoparlör!: 10 Adım (Resimlerle)

Video: Slimbox - Akıllı Bluetooth Hoparlör!: 10 Adım (Resimlerle)

Video: Slimbox - Akıllı Bluetooth Hoparlör!: 10 Adım (Resimlerle)
Video: Unboxing SAMSUNG LEVEL SLIM BOX speaker 2024, Kasım
Anonim
Slimbox - Akıllı Bluetooth Hoparlör!
Slimbox - Akıllı Bluetooth Hoparlör!

Selam!

MCT Howest Kortrijk'teki okul projem için farklı sensörler, LCD ve RGB NeoPixel halkası dahil akıllı bir Bluetooth hoparlör cihazı yaptım. Her şey Raspberry Pi (Veritabanı, Web Sunucusu, Arka Uç) üzerinde çalışır.

Bu derste size bu projeyi 3 hafta içinde adım adım nasıl yaptığımı göstereceğim, böylece herhangi biriniz projemi yeniden yaratmak isterse, kolayca yapabilirsiniz!

Bu aynı zamanda ilk dersim, herhangi bir sorunuz varsa, mümkün olduğunca çabuk cevaplamaya çalışacağım!

GitHub'ım:

Adım 1: Sarf Malzemeleri

Gereçler
Gereçler
Gereçler
Gereçler
Gereçler
Gereçler

DS18B20 Sıcaklık Sensörü

DS18B20, Maxim Integrated tarafından üretilen, sıcaklığı ölçen tek kablolu bir sensördür. 2 çeşit DS18B20 sensörü vardır, sadece bileşen (Ben bunu kullandım) ve çok daha büyük olan su geçirmez versiyon, ancak projem için ihtiyacım olan bu değildi, bu yüzden sadece bileşeni kullandım. Sensör, sıcaklığı -55°C ila +125°C (-67°F ila +257°F) aralığında ölçebilir ve -10°C ila +85°C arasında 0.5°C hassasiyete sahiptir. Ayrıca 9 bitten 12 bite kadar programlanabilir bir çözünürlüğe sahiptir.

Veri sayfası:

Potansiyometre sensörü

Potansiyometre, sensörün sadece üst kısmı döndürülerek manuel olarak ayarlanabilen üç terminalli bir dirençtir. Üst parçanın konumu potansiyometrenin çıkış voltajını belirler.

LSM303 İvmeölçer + Pusula Koparma

LSM303 devre kartı, Adafruit tarafından üretilen, üç eksenli bir ivmeölçer ve bir manyetometre / pusula kombinasyonudur. Raspberry Pi'nin I2C arayüzü ile birlikte kullanılır.

Genel Bakış:

Veri sayfası:

MCP3008

Potansiyometremdeki verileri okumak için, SPI arabirimli 8 kanallı 10 bit analogdan dijitale dönüştürücü olan ve programlanması oldukça kolay olan bir MCP3008 kullandım.

Veri sayfası:

Hoparlör – 3” Çap – 8 Ohm 1 Watt

Bu, ihtiyaç duyacağı Voltaj ve Amper değerlerini hesapladıktan sonra seçtiğim hoparlör konisi ve Adafruit tarafından üretilen Raspberry Pi projem için mükemmel bir seçimdi.

Genel Bakış:

MAX98357 I2S D Sınıfı Mono Amplifikatör

Bu, hoparlörle birlikte gelen amplifikatördür, yalnızca bir amplifikatör değil, aynı zamanda bir I2S dijitalden analoğa dönüştürücüdür, bu nedenle hoparlörüm ve ses sistemim için de mükemmel bir seçimdir.

Genel Bakış:

Veri sayfası:

Arduino Uno'su

Arduino Uno, Arduino.cc tarafından üretilen Microchip ATmega328P mikrodenetleyicisine dayalı açık kaynaklı bir mikro denetleyici kartıdır. Uno kartında 14 Dijital pin, 6 analog pin bulunur ve Arduino IDE yazılımı ile tamamen programlanabilir

Genel Bakış:

seviye değiştirici

Bu, Arduino Uno ve Raspberry Pi arasındaki iletişimi ve farklı voltajlar olan Arduino: 5V ve Raspberry Pi: 3.3V ile ilgilenen küçük bir karttır. Bu gereklidir, çünkü NeoPixel halkası Arduino'ya bağlıdır ve orada çalışır, diğer tüm şeyler Raspberry Pi'de çalışır.

RGB NeoPiksel Yüzük

Bu, 12 RGB led ile doldurulmuş küçük bir halkadır (isterseniz daha fazla RGB ledli daha büyük halkalar satın alabilirsiniz). Bu benim durumumda Arduino Uno'ya bağlı, ancak diğer birçok cihaza da bağlanabilir ve kullanımı gerçekten basittir.

Genel Bakış:

LCD Ekran 16x2

Sıcaklığımı, hacmimi ve IP adresimi yazdırmak için basit bir LCD Ekran kullandım.

Veri sayfası:

Raspberry Pi 3B+ ve 16GB SD Kart

Tüm projem, daha sonra talimatlarımda yapılandırmanıza yardımcı olacağım yapılandırılmış bir görüntü ile Raspberry Pi 3B+ cihazımda çalışıyor.

GPIO T-Part, 2 Breadboard ve çok sayıda jumperwire

Breadboard'lara ve jumperwire'lara ihtiyacım olan her şeyi bağlamak için GPIO T-parçasını kullandım, böylece daha fazla alana sahip oldum ve hangi pinin hangisi olduğu açık.

Adım 2: Şematik ve Kablolama

Şematik ve Kablolama
Şematik ve Kablolama
Şematik ve Kablolama
Şematik ve Kablolama
Şematik ve Kablolama
Şematik ve Kablolama

Şematiğim için Fritzing kullandım, bu, farklı görünümlerde gerçekten kolay bir şema oluşturmanıza izin veren kurabileceğiniz bir program.

Fritzing'i indirin:

Bu yüzden her şeyi doğru şekilde bağladığınızdan emin olun! Benim durumumda tellerin renkleri şematiktekiyle aynı değil.

Adım 3: Veritabanı Tasarımı

Veri tabanı tasarımı
Veri tabanı tasarımı

Bağlı 3 sensörden çok fazla veri topluyoruz, bu yüzden verileri ve sensörleri depolamak için bir veritabanına ihtiyacımız var. Daha sonra Raspberry Pi'deki veritabanını nasıl yapılandıracağımızı ve buna nasıl veri ekleyeceğinizi göreceğiz. Ama önce veritabanı tasarımı veya ERD (Varlık İlişki Şeması) yapılmalı ve benimki de 3NF ile normalleştirildi. Bu yüzden sensörleri başka bir masaya böldük ve ID'lerle çalışıyoruz.

Genel olarak bu, daha fazla çalışmak için gerçekten basit ve kolay bir veritabanı tasarımıdır.

Adım 4: Raspberry Pi'nin Hazırlanması

Şimdi, yaptığımız projenin bazı temellerine sahibiz. Raspberry Pi ile başlayalım!

SD Kart yapılandırması

İlk olarak, resminizi koyabileceğiniz 16 GB'lık bir SD Karta ve SD karta bir başlangıç resmi yüklemek için bir programa ihtiyacınız var.

Yazılım:

Başlangıç resmi:

Yani bunlar indirildikten sonra:

  1. SD kartınızı bilgisayarınıza yerleştirin.
  2. Az önce indirdiğiniz Win32'yi açın.
  3. Az önce indirdiğiniz Raspbian görüntü dosyasını seçin.
  4. SD kartınızın konumuna 'yaz' seçeneğine tıklayın.

Bu, donanımınıza bağlı olarak biraz zaman alabilir. Bu yapıldıktan sonra, görüntüyü RPi'mize koymadan önce bazı son ayarlamalar yapmaya hazırız.

  1. SD kartınızın dizinine gidin, 'cmdline.txt' adlı dosyayı arayın ve açın.
  2. Şimdi aynı satıra 'ip=169.254.10.1' ekleyin.
  3. Dosya 'yı kaydet.
  4. Uzantısı veya içeriği olmayan 'ssh' adlı bir dosya oluşturun.

Artık SD kartı GÜVENLE bilgisayarınızdan çıkarabilir ve güç OLMADAN Raspberry Pi'ye takabilirsiniz. SD kart RPI'ye takıldığında, bilgisayarınızdan bir LAN kablosunu RPi LAN bağlantı noktasına bağlayın, bu bağlandığında gücü RPi'ye bağlayabilirsiniz.

Şimdi Raspberry Pi'mizi kontrol etmek istiyoruz, bu da Putty üzerinden yapılıyor.

Putty yazılımı:

İndirdikten sonra Putty'yi açın ve IP '169.254.10.1' ve Port '22' ve bağlantı tipini ekleyin: SSH. Artık nihayet komut satırı arayüzümüzü açabilir ve başlangıç oturum açma bilgileri -> Kullanıcı: pi & Şifre: ahududu ile giriş yapabiliriz.

Raspi-yapılandırma

sudo raspi yapılandırması

Bu proje için gerçekten önemli olan arayüz bölümü, birçok farklı arayüzü etkinleştirmemiz gerekiyor, aşağıdaki tüm arayüzleri etkinleştirmeliyiz:

  • Tek telli
  • SPI
  • I2C
  • Seri

Artık raspi-config ile işimiz bittiğine göre internete bağlanmayı deneyelim.

Wi-Fi bağlantısı

Öncelikle aşağıdaki komutlar için root olmanız gerekiyor.

sudo -i

Kök olduğunuzda, aşağıdaki komutu kullanın. SSID, ağ adınızdır ve şifre açıkça şifredir.

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

Bir hata yapmanız durumunda, sadece o dosyayı girerek bu ağı kontrol edebilir, güncelleyebilir veya silebilirsiniz:

nano /etc/wpa_supplicant/wpa_supplicant.conf

O halde ağımıza girdikten sonra WPA istemci arayüzüne girelim.

wpa_cli

Arayüzünüzü seçin

arayüz wlan0

Dosyayı yeniden yükle

yeniden yapılandırmak

Ve nihayet, iyi bir şekilde bağlı olup olmadığınızı görebilirsiniz:

ip bir

Güncelleştirme yükseltme

Artık internete bağlı olduğumuza göre, kurulu paketleri güncellemek akıllıca bir hareket olacaktır, o yüzden diğer paketleri kurmadan önce bunu yapalım.

sudo apt-get güncellemesi

sudo apt-get yükseltme

MariaDB Veritabanı

MariaDB veritabanı sunucusunu kurun:

sudo apt-get install mariadb-server

Apache2 Web sunucusu

Apache2 web sunucusunu kurun:

sudo apt apache2'yi kurun

piton

Python'u yükleyin:

güncelleme alternatifleri --install /usr/bin/python python /usr/bin/python2.7 1

güncelleme alternatifleri --install /usr/bin/python python /usr/bin/python3 2

Python paketi

Arka ucun kusursuz çalışması için tüm bu paketleri kurmanız gerekecek:

  • şişe
  • Şişe-Kors
  • Flask-MySql
  • Şişe-SoketIO
  • PyMySQL
  • İstekler
  • Python-socketio
  • RPi. GPIO
  • Gevent
  • Gevent-websocket
  • Ujson
  • wsaccel

Hoparlör kitaplığı

Adafruit'ten hoparlör kitaplığını kurun:

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

Yeniden başlatma zamanı

sudo yeniden başlatma

Adım 5: Veritabanımızı RPI'ye Yönlendirin

Artık ihtiyacımız olan her şeyi yüklediğimize göre, Raspberry Pi'mizin üzerine tasarladığımız Veritabanımızı koyalım!

Bu yüzden önce veritabanımızı MySql tezgahında iletmeliyiz, bunu yaparken, tam veritabanı kodunuzu kopyalayın ve içindeki tüm 'görünür' kelimeleri silin. Bu kopyalandıktan sonra, macunu tekrar açalım, giriş yapın ve şunu yazın:

sudo mysql

ve şimdi mysql arayüzündesiniz, veritabanı kodunuzu buraya kopyalayın ve enter tuşuna basın.

Şimdi sadece bir kullanıcı oluşturmamız gerekiyor

'kullanıcı' TARAFINDAN TANIMLANAN KULLANICI 'kullanıcı' OLUŞTUR;

*.* ÜZERİNDEKİ TÜM AYRICALIKLARI 'kullanıcıya' VERİN;

Şimdi yeniden başlat.

Her şey şimdi kurulmalı, Pi ve MySql Workbench'inizle de bağlantı kurabilirsiniz, böylece tablolarınızdaki tüm verileri kontrol etmek daha kolay olur.

Adım 6: Bluetooth'u RPi'mizde Yapılandırma

Bir Bluetooth hoparlör oluşturuyoruz, bu, medyanın kaynağımızdan Raspberry Pi'ye gönderildiği anlamına geliyor ve bu oldukça kolay yapılabilir, hadi hemen konuya girelim!

Bluetooth bağlantısı için kaynağım:

Halihazırda çalışan bluealsa'yı kaldırmak

sudo rm /var/run/bluealsa/*

A2DP profili ekleyin Havuz rolü

sudo bluealsa -p a2dp-sink &

Bluetooth arayüzünü açın ve bluetooth'unuzu açın

bluetoothctl

açık

Bir eşleştirme aracısı kurun

ajan

varsayılan aracı

RPI'nizi keşfedilebilir yapın

keşfedilebilir

  • Şimdi bluetooth cihazınızdan RPI'yi arayın ve ona bağlanın.
  • Her iki cihazda da eşleştirmeyi onaylayın, macununuza 'evet' yazın.
  • A2DP servisini yetkilendirin, tekrar 'evet' yazın.
  • Bu yapıldıktan sonra, cihazımıza güvenebiliriz, bu yüzden her bağlanmak istediğimizde tüm bunlardan geçmek zorunda değiliz.

güven XX:XX:XX:XX:XX:XX (Kaynak cihazımızdan bluetooth mac adresiniz)

RPI'nızın keşfedilebilir olmaya devam etmesini istiyorsanız, bu sizin seçiminizdir, ancak insanların kutunuzla bağlantı kurmaya çalışmaması için tekrar kapatmayı tercih ederim

keşfedilebilir kapalı

Ardından bluetooth arayüzümüzden çıkabiliriz

çıkış

Ve son olarak ses yönlendirmemiz: RPi'mize yönlendirme yapan kaynak cihazımız

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

Artık cihazımız Raspberry'mize tamamen bağlı ve Pi hoparlörde kaynak cihazınızdan medya oynatabilmeniz gerekir.

7. Adım: Komple Arka Uç Yazma

Şimdi kurulum tamamlandı, nihayet arka uç programımızı yazmaya başlayabiliriz!

Tüm arka ucum için PyCharm kullandım, sadece PyCharm projenizin Raspberry Pi'nize bağlı olduğundan emin olmanız gerekiyor, bu, Kurulum yolunuzun ayarlarınızda ayarlandığı ve ihtiyacımız olan tüm paketleri yüklediğiniz anlamına gelir, zaten adım adım yapılmalıdır 4.

Kendi sınıflarımı kullandım ve bunların hepsi GitHub'a dahil edildi. Kaçırdıysanız diye link introda;)

Arka uç dosyamda iş parçacığı sınıfları kullandım, böylece her şey aynı anda çalışabilir ve birbirini kesmez. Ve en altta tüm rotaları aldınız, böylece ön ucumuzda kolayca veri alabiliriz.

Adım 8: Ön Uç Yazma (HTML, CSS ve JavaScript)

Artık arka uç bittiğine göre, tam ön ucu yazmaya başlayabiliriz.

HTML ve CSS oldukça kolay yapıldı, mümkün olduğunca önce mobil çalışmayı denedik, çoğu zaman bir mobil cihazdan Bluetooth ile bağlandığımız için mobil bir gösterge tablosundan kontrol etmek daha kolay olurdu.

Kontrol panelinizi istediğiniz şekilde tasarlayabilirsiniz, ben sadece kodumu ve tasarımımı buraya bırakacağım, istediğinizi yapabilirsiniz!

Ve Javascript o kadar zor değildi, arka uç yollarımdan birkaç GET, tonlarca olay dinleyicisi ve bazı socketio yapıları ile çalıştı.

9. Adım: Vakamı Oluşturmak ve Hepsini Bir araya getirmek

Vakamı Oluşturmak ve Hepsini Bir Araya Getirmek
Vakamı Oluşturmak ve Hepsini Bir Araya Getirmek
Vakamı Oluşturmak ve Hepsini Bir Araya Getirmek
Vakamı Oluşturmak ve Hepsini Bir Araya Getirmek
Vakamı Oluşturmak ve Hepsini Bir Araya Getirmek
Vakamı Oluşturmak ve Hepsini Bir Araya Getirmek

İlk önce kasanın nasıl görünmesini istediğime dair bazı eskizlerle başladım, önemli olan bir şey, kasaya koyacak büyük bir devremiz olduğundan, her şeyin sığabileceği kadar büyük olması gerektiğiydi.

Kasayı tahtadan yaptım, kasa inşa etme konusunda bu kadar deneyiminiz olmadığında ve bununla yapabileceğiniz birçok şeyiniz olduğunda çalışmanın en kolay olduğunu düşünüyorum.

Şarap şişeleri için bir kasadan başladım ve ahşabı kesmeye başladım. Temel davamı aldıktan sonra, sadece delikler açmak zorunda kaldım (kasanın ön tarafında, resimlerde de görebileceğiniz gibi: P) ve içine biraz çivi çaktım, bu gerçekten basit bir dava, ama bu oldukça havalı görünüyor ve mükemmel uyuyor.

Ve dava bittiğinde, son resimde de görebileceğiniz gibi, hepsini bir araya getirme zamanı geldi! Kutunun içi biraz karışık, ama her şey çalışıyor ve o kadar fazla alanım yoktu, bu yüzden projemi yeniden yaratıyorsanız daha büyük bir dava oluşturmanızı tavsiye ederim.

Adım 10: Slimbox Hoparlörü Oluşturma Yolumda Yaşadığım Bazı Sorunlar…

Bluetooth ve bluealsa hataları

Ne zaman müzik çalmak veya bluetooth ile bağlanmak istesem bluetooth ve bluealsa'dan hata alıyorum. Bu konuda biraz araştırma yaptım ve bu benim sorunumun çözümüydü. Bu nedenle, bir nedenden dolayı bluetooth'um yumuşak bloke edildi, bunun standart yumuşak bloke olup olmadığından emin değilim. Putty'nize aşağıdaki komutu yazarak olup olmadığını görebilirsiniz.

rfkill listesi

Bu nedenle, softblock ise, sadece şunu kullanın:

rfkill bluetooth engelini kaldır

Ve bundan sonra yeniden başlatmak isteyebilirsiniz, kaynağım:

Seri bağlantı sorunları

Bir başka büyük problemim de seviye değiştirici aracılığıyla Arduino'mla herhangi bir bağlantı kuramamamdı, bazı aramalardan sonra '/dev/ttyS0'ımın gittiğini ve bunun RPi'nizin bir güncellemesinden kaynaklanabileceğini öğrendim. Buna da bir çözüm bulundu

Seri konsolu raspi-config ile yeniden etkinleştirmeniz, yeniden başlatmanız ve ardından "console=serial0, 115200" bitini '/boot/cmdline.txt' dizininden manuel olarak kaldırmanız gerekir. /boot/config.txt' öğesini seçin ve yeniden başlatın. Bu, ttyS0 bağlantı noktanızın yanı sıra '/dev/serial0' yazılım bağlantısını da geri almalıdır.

Kaynak:

Önerilen: