Mục lục:

Disco-pi: 8 bước (có hình ảnh)
Disco-pi: 8 bước (có hình ảnh)

Video: Disco-pi: 8 bước (có hình ảnh)

Video: Disco-pi: 8 bước (có hình ảnh)
Video: Nhảy Tập Thể - DISCO 8 BƯỚC !!! 2024, Tháng bảy
Anonim
Disco-pi
Disco-pi

Tài liệu hướng dẫn này cho biết cách sử dụng Raspberry Pi để điều khiển dải đèn LED màu, dựa trên nhạc được phát từ trình duyệt web.

Nó chỉ ra cách tạo một trang web cơ bản bằng Node.js qua HTTPS và sử dụng socket.io qua WSS (Secure Websocket).

Trang web có một trang duy nhất có bố cục rất cơ bản. Trang web điền vào một danh sách thả xuống với các tệp nhạc nằm trong thư mục công cộng / âm thanh trên máy chủ. Chọn một tùy chọn trong danh sách sẽ phát tệp nhạc trong trang web bằng phần tử âm thanh HTML 5. Trong khi phát tệp nhạc, trang web sử dụng giao diện AudioContext để phân tích nhạc, sau đó được gửi đến máy chủ qua kết nối websocket an toàn.

Máy chủ chạy trên Raspberry Pi sử dụng thư viện Node RPI WS281x Native (gói thư viện WS281X của Jeremy Garff) để thay đổi màu sắc của đèn LED trên dải LED WS2811, dựa trên dữ liệu được gửi qua websocket.

Mã ví dụ có thể được tìm thấy ở đây: disco-pi

Bước 1: Thiết bị

  1. Raspberry Pi - Tôi đã sử dụng Raspberry Pi 2B mà tôi đã đặt xung quanh, nhưng bạn có thể nhận được Bộ khởi động Raspberry Pi 3 với giá khoảng 100 CAD
  2. WS2811 LED Strip - Tôi đang chơi với ALITOVE 16,4ft 150 Pixels WS2811. Điều này đi kèm với một bộ điều khiển và một bộ nguồn với giá khoảng 45-50 CAD
  3. Đầu nối Jack thùng - Tôi đã mua một cái từ cửa hàng điện tử gần nhà, một cái như thế này. Chỉ cần đảm bảo nếu phù hợp với nguồn điện của bạn
  4. Đầu nối Jumper / Dây - Tôi đã có một số cáp kết nối Nữ đến Nam và một số dây 22 Gauge Solid hook up nằm xung quanh

Bước 2: Thiết lập Raspberry Pi

Hệ điều hành

Tôi thường sử dụng bản dựng Raspbian mới nhất. Tải xuống hình ảnh và ghi nó vào thẻ SD. Nếu bạn đang sử dụng máy tính Windows, bạn có thể sử dụng Win32 Disk Imager để ghi hình ảnh vào thẻ SD.

Node.js

Cài đặt phiên bản mới nhất của Node.js. Tại thời điểm viết bài, tôi đang sử dụng 8.9.1

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -

sudo apt-get install nodejs

Cài đặt git

sudo apt-get install git

Bước 3: Thiết lập mã mẫu

Sao chép mã ví dụ

1. Thiết lập một thư mục cơ sở để cài đặt vào

cd / opt

sudo mkdir com.jonhaydock sudo chown pi: pi com.jonhaydockcd com.jonhaydock

2. Sao chép kho lưu trữ git ví dụ

git clone https://github.com/haydockjp/disco-pi.git"

hoặc

git clone [email protected]: haydockjp / disco-pi.git

3. Cài đặt các phụ thuộc

cd disco-pi

cài đặt npm

Quá trình này có thể mất 2-3 phút

Bước 4: Tạo chứng chỉ SSL tự ký

1. Tạo tệp khóa riêng tư

cd /opt/com.jonhaydock/disco-pi/certs

openssl genrsa -out disco-pi-key.pem 2048

2. Tạo CSR (Yêu cầu ký chứng chỉ)

openssl req -new -key disco-pi-key.pem -out disco-pi-csr.pem

Tại thời điểm này, bạn sẽ được nhắc cung cấp một số thông tin cho yêu cầu chứng chỉ. Vì đây là chứng chỉ tự ký nên bạn điền thông tin chi tiết chính xác đến mức nào. Đây là một ví dụ

Tên quốc gia (mã 2 chữ cái) [AU]: CA

Tên tiểu bang hoặc tỉnh (tên đầy đủ) [Một số tiểu bang]: Tên địa phương British Columbia (ví dụ: thành phố) : Tên tổ chức Vancouver (ví dụ: công ty) [Internet Widgits Pty Ltd]: Tên đơn vị tổ chức Disco Pi (ví dụ: phần) : Tên thông dụng (ví dụ: máy chủ FQDN hoặc tên BẠN) : disco-pi Địa chỉ email : [email protected] Mật khẩu thử thách : Tên công ty tùy chọn :

Trong ví dụ này, chỉ cần nhấn quay lại để trống mật khẩu thử thách

3. Tạo chứng chỉ

openssl x509 -req -days 1095 -in disco-pi-csr.pem -signkey disco-pi-key.pem -out disco-pi-cert.pem

4. Để tăng cường bảo mật, chúng tôi cũng sẽ tạo tệp Diffie Hellman Parameters

openssl dhparam -out dh_2048.pem 2048

Quá trình này có thể mất 15-20 phút

Bước 5: Kết nối phần cứng

Kết nối phần cứng
Kết nối phần cứng
Kết nối phần cứng
Kết nối phần cứng
Kết nối phần cứng
Kết nối phần cứng
Kết nối phần cứng
Kết nối phần cứng

Cấp nguồn cho dải đèn LED

Dải đèn LED được cung cấp năng lượng bởi 12 volt. Raspberry Pi chỉ có khả năng xuất ra 3,3v hoặc 5v và không có khả năng xuất ở bất kỳ đâu gần các ampe cần thiết để điều khiển nhiều đèn LED như vậy.

Điều quan trọng là không kết nối nguồn điện 12 volt với Raspberry Pi.

Dải của tôi cũng có dây nguồn bổ sung được kết nối với dải ở hai đầu. Tôi đề nghị bạn nên băng những thứ này lại để chúng không tiếp xúc với bất kỳ thiết bị nào khác của bạn.

Thực hiện các bước tiếp theo tự chịu rủi ro. Tôi không chịu trách nhiệm về bất cứ điều gì có thể xảy ra sai sót.

Dải đèn LED

Dải đèn LED của tôi có ba dây:

ĐỎ - +12 Volts

ĐEN - Mặt đất

XANH - Dữ liệu

LƯU Ý: có một Din và một Dout - Dữ liệu vào và Dữ liệu ra. Đảm bảo rằng bạn đang làm việc với phần cuối của dải đèn LED có chữ Din.

Đảm bảo rằng Jack thùng không được kết nối với nguồn điện

1. Kết nối dây Màu đỏ từ dải đèn LED với + bên của Giắc cắm thùng.

Tôi đã sử dụng một dây trắng 22 gauge hook up.

Đặt dây vào khe + trong giắc cắm thùng và vặn cố định.

Đẩy đầu dây còn lại vào ổ cắm trên đèn LED. Đảm bảo bạn đang kết nối với dây màu đỏ.

2. Kết nối dây Đen từ dải đèn LED với - bên hông của Giắc cắm thùng.

Tôi đã sử dụng một dây móc 22 gauge màu đen.

Đặt dây vào khe - trong giắc cắm thùng. Tại thời điểm này, cũng đặt đầu đực của một trong các cáp kết nối (dây màu nâu trong ảnh) vào cùng một lỗ và vặn cả hai vào đúng vị trí.

Đẩy đầu còn lại của dây đen vào ổ cắm trên đèn LED.

Đảm bảo bạn đang kết nối với dây đen.

3. Kết nối dây màu xanh lá cây từ dải đèn LED

Đi một trong các cáp kết nối cái với đầu đực. Trong ảnh của tôi, đây là dây màu xanh lá cây.

Đặt đầu đực vào ổ cắm LED với dây màu xanh lá cây.

Đây là cáp dữ liệu.

Raspberry Pi

1. Lấy cáp kết nối màu xanh lá cây và kết nối nó với Raspberry Pi GPIO.

Bạn cần kết nối nó với PCM_CLK (Pin 12 / GPIO 18)

2. Lấy cáp kết nối màu đen và kết nối nó với Raspberry Pi GPIO.

Bạn cần kết nối nó với một trong những cơ sở. Tôi khuyên bạn nên sử dụng pin 14, nhưng bạn cũng có thể sử dụng pin 6, 9, 20, 25, 30, 34 hoặc 39.

LƯU Ý: để nguồn điện LED hoạt động và Raspberry Pi phải có điểm chung. Cũng lưu ý rằng bạn không được kết nối 12 Volt + (dây Đỏ) với Raspberry Pi.

Nguồn LED

Bạn sẽ không thể kết nối nguồn điện 12 volt của mình với giắc cắm thùng

Tất cả các đèn LED trên dải đèn LED của bạn bây giờ sẽ sáng TRẮNG

Bước 6: Mã phía máy chủ

Chạy mã phía máy chủ

cd /opt/com.jonhaydock/disco-pi

sudo npm bắt đầu

Thao tác này sẽ khởi động máy chủ web và bắt đầu lắng nghe các yêu cầu HTTPS và WSS.

Cổng mặc định là 443, nhưng bạn có thể ghi đè điều này bằng cách đặt một biến môi trường trước khi bắt đầu mã. Ví dụ

xuất DISCO_PI_PORT = 1443

Dải đèn LED của tôi có 150 đèn LED. Chúng được kiểm soát trong các nhóm ba người. Điều này có nghĩa là tôi không thể điều khiển từng đèn LED riêng lẻ và tôi cần gửi đủ thông tin để điều khiển 50.

Nếu đèn LED của bạn có nhiều hơn hoặc ít hơn, bạn có thể ghi đè số lượng đèn LED mà bạn đang kiểm soát bằng cách chuyển một tham số vào phần khởi động. Ví dụ: nếu bạn chỉ có thể điều khiển 10 đèn LED

sudo npm bắt đầu 10

Mã máy chủ chính có thể được tìm thấy trong tệp app.js. Tệp này khởi động máy chủ web HTTPS và cũng thêm vào socket.io để lắng nghe các yêu cầu websocket trên cùng một cổng.

Để truy cập trang web, bạn nên mở trình duyệt web trên máy tính chính của mình (tôi chỉ thử nghiệm điều này trong Chrome) và sử dụng địa chỉ IP của Raspberry Pi, ví dụ:

10.0.1.2/

Bạn có thể tìm ra địa chỉ IP của mình từ dòng lệnh Raspberry Pi.

ifconfig

Máy chủ web sẽ phục vụ bất kỳ nội dung nào trong thư mục chung. Nó mặc định hiển thị trang index.html.

Nó có một điểm cuối API - / api / audio. Điểm cuối này tìm kiếm bất kỳ tệp nào trong thư mục công khai / âm thanh và trả về danh sách. Ví dụ

["GYAKO.mp3", "Havana (feat. Young Thug).mp3", "Queen_Bohemian_Rhapsody.mp3", "Set It All Free.mp3", "This Is What You Came For (feat. Rihanna).mp3"]

Để thêm nhạc dưới dạng tùy chọn, hãy sao chép tệp vào thư mục này. Cá nhân tôi sử dụng Filezilla qua ssh. Thư mục mà bạn muốn thêm tệp vào là /opt/com.jonhaydock/disco-pi/public/audio

Bước 7: Mã trang web

Mã trang web
Mã trang web

Khi bạn truy cập vào trang web, bạn sẽ thấy một cái gì đó như thế này.

Nếu bạn nhìn thấy cảnh báo bảo mật, điều này là do chúng tôi đang sử dụng chứng chỉ SSL tự ký. Bạn có thể bỏ qua nó hoặc thêm nó như một ngoại lệ.

Khi chọn tên tệp, nguồn cho phần tử âm thanh HTML 5. sẽ được đặt thành tệp đó. Khi đã sẵn sàng, nhạc sẽ bắt đầu phát. Sau khi bài hát kết thúc, âm nhạc sẽ dừng lại.

Nếu bạn chọn tùy chọn Không có, nhạc sẽ ngừng phát.

Trong khi phát tệp nhạc, trang web sử dụng giao diện AudioContext để phân tích nhạc, sau đó được gửi đến máy chủ qua kết nối websocket an toàn.

Thông báo là loại socket.io trên máy chủ đã được thiết lập để lắng nghe "ws2811". Nó chứa một mảng gồm 50 phần tử, có giá trị từ 0 đến 255.

"ws2811", {"0": 251, "1": 252, "2": 241, "3": 217, "4": 193, "5": 164, "6": 148, "7": 139, "8": 110, "9": 96, "10": 81, "11": 67, "12": 72, "13": 66, "14": 60, "15": 60, "16": 63, "17": 54, "18": 37, "19": 30, "20": 31, "21": 26, "22": 13, "23": 3, " 24 ": 10," 25 ": 7," 26 ": 6," 27 ": 0," 28 ": 0," 29 ": 0," 30 ": 1," 31 ": 8," 32 ": 12, "33": 3, "34": 2, "35": 2, "36": 0, "37": 0, "38": 0, "39": 0, "40": 0, "41": 0, "42": 0, "43": 0, "44": 0, "45": 0, "46": 0, "47": 0, "48": 0, " 49 ": 0}

Máy chủ sử dụng thư viện Node RPI WS281x Native (gói thư viện WS281X của Jeremy Garff) để thay đổi màu sắc của đèn LED trên dải LED WS2811, dựa trên dữ liệu được gửi qua websocket.

Bước 8: Cuối cùng

Image
Image

Bạn sẽ thấy các đèn LED trên dải chuyển màu theo nhạc, dựa trên phân tích Fast Fourier Transform được thực hiện trên trang web.

Tôi hy vọng rằng bạn thích điều này. Hãy cho tôi biết bạn làm gì với nó!

LƯU Ý: Nếu bạn có bất kỳ vấn đề nào

Vì thư viện này và audioboth Raspberry Pi trên bo mạch sử dụng PWM nên chúng không thể được sử dụng cùng nhau.

Bạn có thể cần đưa vào danh sách đen mô-đun hạt nhân âm thanh Broadcom bằng cách tạo tệp /etc/modprobe.d/snd-blacklist.conf với

danh sách đen snd_bcm2835

Nếu thiết bị âm thanh vẫn đang tải sau khi đưa vào danh sách đen, bạn cũng có thể cần phải nhận xét thiết bị đó trong tệp / etc / modules. Trên các hệ thống không đầu, bạn cũng có thể cần buộc âm thanh qua hdmi

Chỉnh sửa config.txt và thêm:

hdmi_force_hotplug = 1

hdmi_force_edid_audio = 1

Cần phải khởi động lại để thay đổi này có hiệu lực

Đề xuất: