Mục lục:

Slimbox - Loa Bluetooth thông minh !: 10 bước (kèm hình ảnh)
Slimbox - Loa Bluetooth thông minh !: 10 bước (kèm hình ảnh)

Video: Slimbox - Loa Bluetooth thông minh !: 10 bước (kèm hình ảnh)

Video: Slimbox - Loa Bluetooth thông minh !: 10 bước (kèm hình ảnh)
Video: Hướng dẫn thực hành Javascript: Tính năng phóng to ảnh (lightbox) 2024, Tháng bảy
Anonim
Slimbox - Loa Bluetooth thông minh!
Slimbox - Loa Bluetooth thông minh!

Này đó!

Đối với dự án trường học của tôi tại MCT Howest Kortrijk, tôi đã tạo một thiết bị loa Bluetooth thông minh với các cảm biến khác nhau, bao gồm một màn hình LCD và vòng NeoPixel RGB. Mọi thứ chạy trên Raspberry Pi (Cơ sở dữ liệu, Máy chủ web, Phần phụ trợ).

Vì vậy, trong hướng dẫn này, tôi sẽ chỉ cho các bạn cách tôi thực hiện dự án này trong 3 tuần, từng bước một, vì vậy nếu có bạn nào muốn tạo lại dự án của tôi, bạn có thể dễ dàng thực hiện!

Đây cũng là hướng dẫn đầu tiên của tôi, nếu bạn có bất kỳ câu hỏi nào, tôi sẽ cố gắng trả lời chúng nhanh nhất có thể!

GitHub của tôi:

Bước 1: Nguồn cung cấp

Quân nhu
Quân nhu
Quân nhu
Quân nhu
Quân nhu
Quân nhu

Cảm biến nhiệt độ DS18B20

DS18B20 là cảm biến một dây đo nhiệt độ, được sản xuất bởi Maxim Integrated. Có 2 loại cảm biến DS18B20, chỉ dành cho thành phần (Tôi đã sử dụng) và phiên bản chống thấm nước, lớn hơn nhiều, nhưng đó không phải là thứ tôi cần cho dự án của mình, vì vậy tôi chỉ sử dụng thành phần đó. Cảm biến có thể đo nhiệt độ trong phạm vi từ -55 ° C đến + 125 ° C (-67 ° F đến + 257 ° F) và nó có độ chính xác 0,5 ° C từ -10 ° C đến + 85 ° C. Nó cũng có độ phân giải có thể lập trình được từ 9 bit đến 12 bit.

Datasheet:

Cảm biến chiết áp

Chiết áp là một điện trở có ba đầu nối có thể điều chỉnh bằng tay bằng cách chỉ xoay phần trên của cảm biến. Vị trí của phần trên xác định điện áp đầu ra của chiết áp.

LSM303 Accelerometer + La bàn Breakout

Bảng đột phá LSM303 là sự kết hợp của cảm biến gia tốc ba trục và từ kế / la bàn, do Adafruit sản xuất. Nó được sử dụng với giao diện I2C của Raspberry Pi.

Tổng quan:

Datasheet:

MCP3008

Để đọc dữ liệu từ chiết áp của tôi, tôi đã sử dụng MCP3008, đây là một bộ chuyển đổi 8 kênh 10 bit tương tự sang kỹ thuật số với giao diện SPI và khá dễ dàng để lập trình.

Datasheet:

Loa - Đường kính 3”- 8 Ohm 1 Watt

Đây là hình nón loa tôi đã chọn sau khi tính toán Điện áp và Ampe nó sẽ cần và đây là một sự phù hợp hoàn hảo cho dự án Raspberry Pi của tôi, do Adafruit sản xuất.

Tổng quan:

Bộ khuếch đại Mono Mono MAX98357 I2S Class-D

Đây là bộ khuếch đại đi kèm với loa, không chỉ là bộ khuếch đại, nó còn là bộ chuyển đổi tín hiệu kỹ thuật số sang tương tự I2S, vì vậy nó còn là sự phù hợp hoàn hảo cho loa và hệ thống âm thanh của tôi.

Tổng quan:

Datasheet:

Arduino Uno

Arduino Uno là một bo mạch vi điều khiển mã nguồn mở dựa trên vi điều khiển Microchip ATmega328P, được sản xuất bởi Arduino.cc. Bo mạch Uno có 14 chân Digital, 6 chân analog và hoàn toàn có thể lập trình được với phần mềm Arduino IDE

Tổng quan:

Levelshifter

Đây là một bo mạch nhỏ đảm nhiệm việc giao tiếp giữa Arduino Uno và Raspberry Pi và các điện áp khác nhau, Arduino: 5V & Raspberry Pi: 3.3V. Điều này là cần thiết vì vòng NeoPixel được kết nối với Arduino và chạy trên đó, trong khi tất cả những thứ khác chạy trên Raspberry Pi.

Vòng NeoPixel RGB

Đây là một vòng nhỏ chứa đầy 12 đèn LED RGB (bạn có thể mua các vòng lớn hơn với nhiều đèn LED RGB hơn, nếu bạn muốn). Đó là trong trường hợp của tôi được kết nối với Arduino Uno, nhưng cũng có thể được kết nối với nhiều thiết bị khác và thực sự đơn giản để sử dụng.

Tổng quan:

Màn hình LCD 16x2

Tôi đã sử dụng Màn hình LCD cơ bản để in nhiệt độ, âm lượng và địa chỉ IP của mình.

Datasheet:

Thẻ SD Raspberry Pi 3B + & 16GB

Toàn bộ dự án của tôi chạy trên Raspberry Pi 3B + với một hình ảnh được định cấu hình, tôi sẽ giúp bạn định cấu hình sau trong phần hướng dẫn của tôi.

GPIO T-Part, 2 Breadboards và rất nhiều jumperwires

Để kết nối mọi thứ tôi cần breadboards và jumperwires, tôi đã sử dụng GPIO T-part để tôi có nhiều không gian hơn và rõ ràng là chân nào.

Bước 2: Sơ đồ và đấu dây

Sơ đồ và hệ thống dây điện
Sơ đồ và hệ thống dây điện
Sơ đồ và hệ thống dây điện
Sơ đồ và hệ thống dây điện
Sơ đồ và hệ thống dây điện
Sơ đồ và hệ thống dây điện

Đối với sơ đồ của tôi, tôi đã sử dụng Fritzing, đó là một chương trình bạn có thể cài đặt, cho phép bạn tạo một giản đồ thực sự dễ dàng trong các loại chế độ xem khác nhau.

Tải xuống Fritzing:

Vì vậy, hãy đảm bảo rằng bạn kết nối mọi thứ theo đúng cách! Trong trường hợp của tôi, màu sắc của dây không giống như trên sơ đồ.

Bước 3: Thiết kế cơ sở dữ liệu

Thiết kế cơ sở dữ liệu
Thiết kế cơ sở dữ liệu

Chúng tôi đang thu thập rất nhiều dữ liệu từ 3 cảm biến được kết nối, vì vậy chúng tôi cần cơ sở dữ liệu để lưu trữ dữ liệu và cảm biến. Sau đó, chúng ta sẽ xem cách định cấu hình cơ sở dữ liệu trên Raspberry Pi và cách thêm dữ liệu vào đó. Nhưng trước tiên, thiết kế cơ sở dữ liệu hoặc ERD (Sơ đồ mối quan hệ thực thể) phải được thực hiện và của tôi cũng đã được chuẩn hóa với 3NF. Đó là lý do tại sao chúng tôi chia các cảm biến thành một bảng khác và làm việc với ID.

Nhìn chung, đây là một thiết kế cơ sở dữ liệu thực sự cơ bản và dễ dàng để làm việc thêm.

Bước 4: Chuẩn bị Raspberry Pi

Vì vậy, bây giờ chúng ta đã hoàn thành một số khái niệm cơ bản về dự án. Hãy bắt đầu với Raspberry Pi!

Cấu hình thẻ SD

Đầu tiên, bạn cần một Thẻ SD 16GB để bạn có thể đặt hình ảnh của mình và một chương trình để tải hình ảnh bắt đầu lên thẻ SD.

Phần mềm:

Hình ảnh bắt đầu:

Vì vậy, khi chúng được tải xuống:

  1. Đặt thẻ SD của bạn vào máy tính của bạn.
  2. Mở Win32 mà bạn vừa tải xuống.
  3. Chọn tệp hình ảnh Raspbian mà bạn cũng vừa tải xuống.
  4. Nhấp vào 'ghi' vào vị trí của thẻ SD của bạn.

Quá trình này có thể mất một chút thời gian, tùy thuộc vào phần cứng của bạn. Khi điều này được thực hiện, chúng tôi đã sẵn sàng thực hiện một số điều chỉnh cuối cùng trước khi đưa hình ảnh vào RPi của chúng tôi.

  1. Đi tới thư mục thẻ SD của bạn, tìm kiếm tệp có tên 'cmdline.txt' và mở nó.
  2. Bây giờ thêm 'ip = 169.254.10.1' trên cùng một dòng.
  3. Lưu các tập tin.
  4. Tạo một tệp có tên 'ssh' không có phần mở rộng hoặc nội dung.

Giờ đây, bạn có thể AN TOÀN rút thẻ SD ra khỏi máy tính của mình và đặt nó vào Raspberry Pi mà KHÔNG cần nguồn điện. Sau khi thẻ SD vào RPI, hãy kết nối cáp LAN từ máy tính của bạn với cổng LAN RPi, sau khi kết nối này, bạn có thể kết nối nguồn với RPi.

Bây giờ chúng ta muốn điều khiển Raspberry Pi của mình, điều này được thực hiện thông qua Putty.

Phần mềm Putty:

Sau khi tải xuống, hãy mở Putty và chèn IP '169.254.10.1' và Cổng '22' và loại kết nối: SSH. Bây giờ cuối cùng chúng ta có thể mở giao diện dòng lệnh của mình và đăng nhập bằng thông tin đăng nhập dành cho người mới bắt đầu -> Người dùng: pi & Mật khẩu: raspberry.

Raspi-config

sudo raspi-config

Điều thực sự quan trọng đối với dự án này là phần giao diện, chúng ta phải kích hoạt rất nhiều giao diện khác nhau, kích hoạt tất cả các giao diện sau:

  • Một dây
  • SPI
  • I2C
  • Nối tiếp

Bây giờ chúng ta đã hoàn tất với raspi-config, hãy thử và tạo kết nối với internet.

Kết nối wifi

Đầu tiên, bạn phải root cho các lệnh sau

sudo -i

Khi bạn đã root, hãy sử dụng lệnh sau. SSID là tên mạng của bạn và mật khẩu rõ ràng là mật khẩu.

wpa_passphrase "ssid" "mật khẩu" >> /etc/wpa_supplicant/wpa_supplicant.conf

Trong trường hợp bạn mắc lỗi, bạn có thể kiểm tra, cập nhật hoặc xóa mạng này bằng cách chỉ cần nhập tệp đó:

nano /etc/wpa_supplicant/wpa_supplicant.conf

Vì vậy, sau khi chúng tôi vào mạng của mình, hãy nhập giao diện ứng dụng khách WPA

wpa_cli

Chọn giao diện của bạn

giao diện wlan0

Tải lại tệp

cấu hình lại

Và cuối cùng, bạn có thể xem liệu bạn có được kết nối tốt hay không:

ip a

Cập nhật & nâng cấp

Bây giờ chúng tôi đã kết nối với internet, cập nhật các gói đã được cài đặt sẽ là một bước đi thông minh, vì vậy hãy làm điều đó trước khi cài đặt các gói khác.

sudo apt-get cập nhật

sudo apt-get nâng cấp

Cơ sở dữ liệu MariaDB

Cài đặt máy chủ cơ sở dữ liệu MariaDB:

sudo apt-get install mariadb-server

Máy chủ web Apache2

Cài đặt máy chủ web Apache2:

sudo apt install apache2

Python

Cài đặt Python:

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

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

Gói Python

Bạn sẽ phải cài đặt tất cả các gói này để làm cho chương trình phụ trợ hoạt động hoàn hảo:

  • Bình giữ nhiệt
  • Bình-Cors
  • Flask-MySql
  • Flask-SocketIO
  • PyMySQL
  • Yêu cầu
  • Python-socketio
  • RPi. GPIO
  • Gevent
  • Gevent-websocket
  • Ujson
  • Wsaccel

Thư viện loa

Cài đặt thư viện loa từ Adafruit:

curl -sS https://raw.githubusercontent.com/adafruit/Raspbe… | bấu víu

Đã đến lúc khởi động lại

khởi động lại sudo

Bước 5: Chuyển tiếp Cơ sở dữ liệu của chúng tôi sang RPi

Bây giờ chúng tôi đã cài đặt mọi thứ chúng tôi cần, hãy đặt Cơ sở dữ liệu mà chúng tôi thiết kế trên Raspberry Pi của chúng tôi!

Vì vậy, trước tiên, chúng ta cần chuyển tiếp cơ sở dữ liệu của mình trong bàn làm việc MySql, trong khi làm việc đó, hãy sao chép mã cơ sở dữ liệu đầy đủ của bạn và xóa tất cả các từ 'hiển thị' trong đó. Vì vậy, khi nó được sao chép, hãy mở lại putty, đăng nhập và nhập:

sudo mysql

và bây giờ bạn đang ở trong giao diện mysql, hãy sao chép mã cơ sở dữ liệu của bạn vào đó và nhấn enter.

Bây giờ chúng ta chỉ cần tạo một người dùng

TẠO NGƯỜI DÙNG "người dùng" ĐƯỢC "người dùng" xác định;

CẤP TẤT CẢ CÁC QUYỀN RIÊNG TƯ BẬT *. * CHO 'người dùng';

Bây giờ khởi động lại.

Vì vậy, mọi thứ sẽ được thiết lập ngay bây giờ, bạn cũng có thể tạo kết nối với Pi và MySql Workbench của mình, vì vậy việc kiểm tra tất cả dữ liệu trong bảng của bạn sẽ dễ dàng hơn.

Bước 6: Định cấu hình Bluetooth trên RPi của chúng tôi

Chúng tôi đang tạo một loa Bluetooth, vì vậy điều này có nghĩa là phương tiện đang được gửi từ nguồn của chúng tôi đến Raspberry Pi và điều này có thể được thực hiện khá dễ dàng, hãy bắt tay ngay vào nó!

Nguồn của tôi cho kết nối bluetooth: https://scribeles.net/streaming-bl Bluetooth-audio-fro…

Đang xóa bluealsa đã chạy

sudo rm / var / run / bluealsa / *

Thêm hồ sơ A2DP Vai trò bồn rửa

sudo bluealsa -p a2dp-chìm &

Mở giao diện bluetooth và bật bluetooth của bạn

bluetoothctl

bật nguồn

Thiết lập tác nhân ghép nối

đại lý trên

tác nhân mặc định

Làm cho RPi của bạn có thể khám phá được

có thể khám phá trên

  • Bây giờ từ thiết bị bluetooth của bạn, hãy tìm kiếm RPi và kết nối với nó.
  • Xác nhận việc ghép nối trên cả hai thiết bị, nhập 'có' vào miếng dán của bạn.
  • Cho phép dịch vụ A2DP, gõ lại 'yes'.
  • Sau khi hoàn thành việc này, chúng tôi có thể tin tưởng vào thiết bị của mình, vì vậy chúng tôi không cần phải thực hiện tất cả việc này mỗi khi chúng tôi muốn kết nối

tin cậy XX: XX: XX: XX: XX: XX (Địa chỉ mac bluetooth của bạn từ thiết bị nguồn của chúng tôi)

Nếu bạn muốn RPi của mình tiếp tục có thể phát hiện được, đó là lựa chọn của riêng bạn, nhưng tôi muốn tắt lại tính năng này để mọi người không thể cố gắng kết nối với hộp của bạn

có thể khám phá tắt

Sau đó, chúng ta có thể thoát khỏi giao diện bluetooth của mình

lối ra

Và cuối cùng là định tuyến âm thanh của chúng tôi: thiết bị nguồn của chúng tôi chuyển tiếp tới RPi của chúng tôi

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

Bây giờ thiết bị của chúng tôi đã được kết nối hoàn toàn với Raspberry của chúng tôi và bạn sẽ có thể phát phương tiện từ thiết bị nguồn của mình trên loa Pi.

Bước 7: Viết chương trình phụ trợ hoàn chỉnh

Vì vậy, bây giờ thiết lập đã xong, cuối cùng chúng ta có thể bắt đầu viết chương trình phụ trợ của mình!

Tôi đã sử dụng PyCharm cho toàn bộ chương trình phụ trợ của mình, bạn chỉ cần đảm bảo rằng dự án PyCharm của bạn được kết nối với Raspberry Pi của bạn, điều này có nghĩa là đường dẫn Triển khai của bạn được thiết lập trong cài đặt của bạn và bạn đã cài đặt tất cả các gói chúng tôi cần, sẽ được thực hiện ở bước 4.

Tôi đã sử dụng các lớp học của riêng mình và những lớp này cũng được đưa vào GitHub của tôi. Liên kết nằm trong phần giới thiệu trong trường hợp bạn bỏ lỡ nó;)

Trong tệp phụ trợ của mình, tôi đã sử dụng các lớp phân luồng, vì vậy mọi thứ có thể chạy cùng một lúc và nó sẽ không làm gián đoạn lẫn nhau. Và ở phía dưới, bạn đã có tất cả các tuyến đường để chúng tôi có thể dễ dàng lấy dữ liệu trong giao diện người dùng của mình.

Bước 8: Viết giao diện người dùng (HTML, CSS & JavaScript)

Bây giờ phần phụ trợ đã hoàn thành, chúng ta có thể bắt đầu viết giao diện người dùng đầy đủ.

HTML & CSS được thực hiện khá dễ dàng, hãy thử làm việc trên thiết bị di động trước hết mức có thể, vì hầu hết chúng ta đều kết nối với Bluetooth từ thiết bị di động, sẽ dễ dàng kiểm soát hơn từ trang tổng quan trên thiết bị di động.

Bạn có thể thiết kế bảng điều khiển của mình theo bất kỳ cách nào bạn muốn, tôi sẽ chỉ để lại mã và thiết kế của tôi ở đây, bạn có thể làm bất cứ điều gì bạn thích!

Và Javascript không khó như vậy, đã làm việc với một số GET từ các tuyến phụ trợ của tôi, hàng tấn trình nghe sự kiện và một số cấu trúc socketio.

Bước 9: Xây dựng trường hợp của tôi và kết hợp tất cả lại với nhau

Xây dựng trường hợp của tôi và đặt tất cả lại với nhau
Xây dựng trường hợp của tôi và đặt tất cả lại với nhau
Xây dựng trường hợp của tôi và đặt tất cả lại với nhau
Xây dựng trường hợp của tôi và đặt tất cả lại với nhau
Xây dựng trường hợp của tôi và đặt tất cả lại với nhau
Xây dựng trường hợp của tôi và đặt tất cả lại với nhau

Đầu tiên tôi bắt đầu với một số bản phác thảo về cách tôi muốn vỏ máy trông như thế nào, điều quan trọng là nó phải đủ lớn để mọi thứ có thể vừa vặn, vì chúng tôi có một mạch lớn để đặt trong trường hợp.

Tôi làm vỏ máy bằng gỗ, tôi nghĩ đây là cách làm dễ dàng nhất khi bạn không có nhiều kinh nghiệm về xây dựng vỏ máy và bạn cũng có rất nhiều thứ có thể làm với nó.

Tôi bắt đầu từ một chiếc hộp đựng chai rượu và mới bắt đầu cưa gỗ. Khi tôi đã có chiếc vỏ cơ bản của mình, tôi chỉ cần khoan lỗ trên nó (rất nhiều ở mặt trước của chiếc vỏ, như bạn có thể thấy trên hình ảnh: P) và đặt một số đinh vào đó, đó là một chiếc hộp thực sự cơ bản, nhưng nó trông khá tuyệt và phù hợp hoàn hảo.

Và một khi trường hợp đã được hoàn thành, đã đến lúc kết hợp tất cả lại với nhau, như bạn có thể thấy trên hình cuối cùng! Nó hơi lộn xộn bên trong hộp, nhưng mọi thứ đều hoạt động và tôi không có nhiều không gian hơn, vì vậy tôi khuyên bạn có thể tạo một trường hợp lớn hơn nếu bạn đang tạo lại dự án của tôi.

Bước 10: Một số vấn đề tôi gặp phải trên con đường tạo loa Slimbox của mình…

Lỗi Bluetooth và bluealsa

Mỗi khi tôi muốn phát nhạc hoặc kết nối với bluetooth, tôi đều nhận được lỗi từ bluetooth và bluealsa. Tôi đã thực hiện một số nghiên cứu về nó và đây là giải pháp cho vấn đề của tôi. Vì vậy, vì lý do nào đó mà bluetooth của tôi bị chặn mềm, không chắc đây có phải là bị chặn mềm tiêu chuẩn hay không. Bạn có thể xem đó có phải là lệnh không bằng cách gõ lệnh sau vào Putty của bạn.

danh sách rfkill

Vì vậy, nếu nó là softblocked, chỉ cần sử dụng cái này:

rfkill bỏ chặn bluetooth

Và bạn có thể muốn khởi động lại sau đó, nguồn của tôi:

Sự cố kết nối nối tiếp

Vì vậy, một vấn đề lớn khác mà tôi gặp phải là tôi không thể thực hiện bất kỳ kết nối nào với Arduino của mình thông qua trình nâng cấp, sau một số tìm kiếm, tôi phát hiện ra rằng '/ dev / ttyS0' của tôi đã biến mất và điều này có thể là do bản cập nhật RPi của bạn. Cũng tìm thấy một giải pháp về điều này

Bạn sẽ phải bật lại bảng điều khiển nối tiếp với raspi-config, khởi động lại, sau đó xóa thủ công bit "console = serial0, 115200" khỏi '/boot/cmdline.txt'. Xác nhận rằng "enable_uart = 1" đang ở trong' /boot/config.txt 'và khởi động lại lần nữa, điều đó sẽ lấy lại cổng ttyS0 của bạn, cũng như liên kết mềm' / dev / serial0 'tới nó.

Nguồn:

Đề xuất: