Nếu bạn có một loạt phim, chương trình hoặc các tệp video cục bộ khác và không thể quyết định xem cái nào, bạn có thể để Raspberry Pi chọn cho mình chỉ bằng một nút bấm. Công bằng mà nói, có nhiều cách dễ dàng hơn để phát một video ngẫu nhiên, từ các tệp cục bộ hoặc trên web, nhưng chúng không thú vị bằng dự án này. Vì vậy, hãy lấy bỏng ngô và bắt đầu xây dựng và mã hóa trình phát video ngẫu nhiên Raspberry Pi của riêng chúng tôi!
Phần cứng
Xây dựng mạch cho dự án này rất đơn giản. Chúng tôi chỉ yêu cầu ba nút, được kết nối với GPIO tại các chân 2,3,4 và mỗi nút này cũng cần được kết nối với GND, để làm điều này, chúng tôi có thể sử dụng một chân GND duy nhất trên Pi và một dây jumper từ nữ sang nam . Được kết nối với thanh ray của bảng mạch điện tử có nghĩa là chúng ta có nhiều kết nối GND có thể được kết nối thông qua hai dây jumper nam và nam. Xem sơ đồ trong bản tải xuống cho dự án này để biết thêm thông tin. Khi phần cứng được tạo, hãy gắn tất cả các phụ kiện cần thiết cho Pi của bạn và khởi động vào máy tính để bàn Raspbian.
Phần mềm
Như với hầu hết các dự án Pi, trước khi làm bất cứ điều gì khác, bạn sẽ cần thiết lập Raspberry Piwith một bản sao hiện tại của hệ điều hành Raspbian. Nếu không muốn sử dụng bàn phím và chuột chuyên dụng, bạn có thể tạo Raspberry Pi không đầu mà bạn truy cập từ máy tính khác thông qua VNC.
Trước khi có thể viết bất kỳ mã Python nào, chúng ta cần cài đặt hai thư viện sẽ giúp chúng ta tạo dự án. Mở Terminal và nhập dòng sau, nhớ nhấn Enter ở cuối mỗi dòng.
$ sudo pip3 install keyboard $ sudo pip3 install
Chúng ta sẽ nói thêm về chúng sau. Bây giờ, hãy mở trình chỉnh sửa Python 3, được tìm thấy trong menu Lập trình và nhấp vào Tệp >> Mới để tạo một tệp trống mới. Nhấp ngay vào Tệp >> Lưu trong cửa sổ mới. Lưu mã dưới dạng VideoPlayer.py và nhớ lưu thường xuyên!
Vì vậy, bây giờ chúng ta bắt đầu viết mã và hành động đầu tiên của chúng ta là nhập các thư viện mà chúng ta yêu cầu. Ba thư viện đầu tiên được sử dụng để phát hiện các lần nhấn nút (GPIO Zero), dừng chạy mã một lần và thoát (tạm dừng) và để chọn một video ngẫu nhiên (lựa chọn.)
từ gpiozero nhập Nút từ tạm dừng nhập tín hiệu từ lựa chọn nhập ngẫu nhiên
Ba lần nhập cuối cùng là một thư viện mà chúng ta sẽ sử dụng để liệt kê nội dung của một thư mục (global), chạy các lệnh đầu cuối (quy trình con) và cuối cùng là một thư viện để mô phỏng bàn phím (keyboard.)
nhập bàn phím tiểu xử lý globimport
Tiếp theo, chúng tôi tạo ra ba hàm, các khối mã mà sau này chúng tôi có thể sử dụng lại bằng cách gọi tên của chúng. Hàm đầu tiên được gọi là “play_video” và trước tiên nó tạo một danh sách (một đối tượng lưu trữ dữ liệu) được gọi là “video”.
def play_video (): video = []
Để điền thông tin vào danh sách, cụ thể là danh sách tất cả các video chúng tôi có thể phát, chúng tôi sử dụng vòng lặp for, vòng lặp này sẽ lặp lại mọi tệp trong một thư mục, miễn là đó là tệp video mp4. Đối với điều này, chúng tôi sử dụng “cầu” để truy cập thư mục “/ media / pi / Videos”, đây thực sự là một thẻ USB có tên là “Videos” chứa đầy các tệp mp4. Thay đổi tùy chọn này để khớp với tên của thư mục chứa đầy video mà bạn đã chọn. Mỗi khi tìm thấy mp4, nó sẽ được thêm vào danh sách “video” mà chúng tôi vừa tạo.
dành cho tệp trong global.glob (“/ media / pi / Videos / *. mp4”): videos.append (tệp)
Vì vậy, bây giờ hãy kiểm tra xem danh sách đã được điền tên tệp chưa bằng cách in nội dung của danh sách vào trình bao Python.
in (video)
Sau đó, chúng tôi sẽ chọn một video ngẫu nhiên từ danh sách và lưu trữ nó trong một biến được gọi là “đã chọn”, một lần nữa chúng tôi in nó vào trình bao Python.
Sau đó, chúng tôi sẽ chọn một video ngẫu nhiên từ danh sách và lưu trữ nó trong một biến được gọi là “đã chọn”, một lần nữa chúng tôi in nó vào trình bao Python select = choice (video) print (selected) print (selected)
Dòng cuối cùng trong hàm này sử dụng lớp Popen từ thư viện quy trình con để chạy một lệnh như thể chúng ta đang ngồi ở thiết bị đầu cuối và lệnh này là mở trình phát đa phương tiện omxplayer, sau đó phát video đã chọn.
subprocess.Popen ([‘omxplayer’, (đã chọn)])
Chức năng tiếp theo được gọi là “stop_video” và như bạn có thể đoán nó sẽ dừng video hiện đang phát. Đối với điều này, chúng tôi sử dụng thư viện bàn phím, cụ thể là chức năng “press_and_release” để mô phỏng việc nhấn phím “q”.
def stop_video (): keyboard.press_and_release (‘q’)
Chức năng cuối cùng được gọi là “pause_video” và nó mô phỏng việc nhấn phím cách trên bàn phím, đó là cách omxplayer tạm dừng video.
def pause_video (): keyboard.press_and_release (‘khoảng trắng’)
Với các chức năng đã tạo, tiếp theo, chúng ta cần cho mã của mình biết nơi các nút của chúng ta được kết nối. Chúng tôi có ba nút được kết nối, ngẫu nhiên (phát), dừng và nút tạm dừng. Các nút này được kết nối với GPIO tại các chân 2, 3 và 4 tương ứng.
randomiser = Nút (2) dừng = Nút (3) pause_button = Nút (4)
Ok, tiếp tục đến phần cuối cùng, và đây là phần tìm khi nào một nút được nhấn và phản ứng tương ứng. Nhưng trước tiên, chúng tôi gói phần này trong một trình xử lý ngoại lệ. Nó sẽ cố gắng chạy mã, nhưng nếu người dùng nhấn CTRL + C thì mã sẽ thoát. Vì vậy, đối với phần thử, đầu tiên mã của chúng tôi sẽ in ba dòng ra shell, đây là các hướng dẫn cho người dùng. Bạn sẽ nhận thấy chữ “n” giữa mỗi màu. Đây là cách viết tắt của Python để chèn một dòng mới giữa mỗi hướng dẫn.
try: print (“Nhấn nút XANH để bắt đầu VÀNG để tạm dừng để dừng”)
Ba nút của chúng tôi đang chờ được nhấn và sử dụng thư viện GPIO Zero, chúng tôi gọi là lớp “when_pressed” để phát hiện khi mỗi nút được nhấn. Khi điều này xảy ra, chức năng tương ứng được chạy. Vì vậy, khi chúng ta nhấn nút Green ngẫu nhiên (phát), nó sẽ chọn ngẫu nhiên một video từ thẻ USB và phát video đó. Bạn sẽ nhận thấy rằng các hàm không có () ở cuối tên hàm. Điều này là do nếu họ làm như vậy, thì mã sẽ chạy tự động. Ngay bây giờ họ đã sẵn sàng để chạy theo yêu cầu.
randomiser.when_pressed = play_video stop.when_pressed = stop_video pause_button.when_pressed = pause_video
Dòng cuối cùng trong phần này là một dấu tạm dừng đơn giản () và điều này được sử dụng để giữ cho mã chạy, và không chỉ thoát ra sau khi chạy một lần.
tạm ngừng()
Nhưng điều gì sẽ xảy ra nếu người dùng nhấn CTRL + C? Đây là một “Ngắt bàn phím” và nếu điều đó xảy ra, chúng tôi chỉ cần in một dòng trống sau đó “Thoát” trên màn hình.
ngoại trừ KeyboardInterrupt: print (“nEXIT”)
Vì vậy, bây giờ hãy lưu mã của bạn và mở một Terminal vào thư mục mà bạn đã lưu mã. Để sử dụng mã, chúng ta cần chạy nó với sudo (quyền hạn gốc) vì thư viện bàn phím được sử dụng trong dự án chỉ có thể được sử dụng dưới dạng root / sudo.
Để chạy loại mã:
$ sudo python3 VideoPlayer.py
Khi đã sẵn sàng, nhấn nút Xanh để phát video được chọn ngẫu nhiên, để tạm dừng, nhấn Vàng, và để dừng nhấn Đỏ. Hãy tận hưởng buổi tối của bạn và đừng làm đổ bỏng ngô!
Bạn có thể nhúng dự án vào một chiếc hộp cứng, để đôi tay nhỏ bé không làm hỏng thiết bị điện tử. Bạn cũng có thể sử dụng các nút kiểu arcade mạnh mẽ hơn và ít bị hỏng hơn.
Mã hoàn chỉnh
Nếu bạn chỉ muốn sao chép và dán nội dung vào tệp VideoPlayer.py, đây là:
from gpiozero import Nút từ tạm dừng nhập tín hiệu từ lựa chọn nhập ngẫu nhiên nhập globimport subprocessimport keyboarddef play_video (): videos = [] cho tệp trong global.glob (“/ media / pi / Videos / *. mp4”): videos.append (file) print ( video) đã chọn = lựa chọn (video) in (đã chọn) in (đã chọn) quy trình con.Popen ([‘omxplayer’, (được chọn)]) def stop_video () keyboard.press_and_release (‘q’) def pause_video () keyboard.press_and_release ( ‘space’) randomiser – Nút (2) dừng = Nút (3) pause_button = Nút (4) thử: print (“Nhấn nút XANH để bắt đầu VÀNG để tạm dừng RED để dừng”) randomiser.when_pressed = play_videostop.when_pressed = stop_videopause_button.when_pressed = pause_video pause () ngoại trừ KeyboardInterrupt: print (“nEXIT”) Thư viện Bàn phím và Quyền riêng tư
Trong dự án này, chúng tôi đã sử dụng thư viện Bàn phím Python để mô phỏng bàn phím chỉ bằng các nút nhấn điều khiển phát, tạm dừng và dừng phát lại video. Thư viện Bàn phím khá mạnh mẽ và nó có thể được sử dụng để nhấn bất kỳ phím nào, vì vậy chúng tôi có thể tự động nhấn nhiều phím từ một nút nhấn (thuận tiện cho việc thoát vim.) Thư viện cũng có thể được sử dụng để viết văn bản lên màn hình, trong một tương tự như cảnh “theo dõi con thỏ trắng” của Neo trong The Matrix. Nhưng chức năng nguy hiểm nhất của thư viện này là nó có thể được sử dụng để ghi lại mọi lần nhấn phím trên máy mục tiêu.
Các phím bấm này có thể được ghi vào danh sách, sau đó được lưu vào một tập tin và sau đó được sử dụng cho các mục đích bất chính. Vì vậy, chúng ta hãy là những đứa trẻ rõ ràng, những người lớn. Ghi lại các lần nhấn phím của người dùng mà không có sự đồng ý của họ là bất hợp pháp và có thể khiến bạn gặp rất nhiều rắc rối với trường học / cơ quan / chính quyền. Vì vậy, không làm điều đó! Như đã nói, nó có thể được sử dụng như một công cụ mạnh mẽ khi gỡ lỗi cách người dùng tương tác với mã của bạn, vì vậy để kiểm tra phần mềm (dưới sự đồng ý của công chúng và những người kiểm tra nội bộ), bạn có thể xem họ đã nhấn phím nào ngay trước mã. bị nhốt / đi theo nhiệt hạch!
Thư viện Bàn phím hoạt động với Linux và Windows và rất thú vị khi chơi cùng. Để đọc thêm một chút về thư viện này, hãy truy cập bài đăng trên blog này https://bigl.es/tuesday-tooling-record-replay-keystrokes-with-python/ và xem một vài ví dụ về cách nó có thể được sử dụng.
Bài viết này ban đầu xuất hiện trên Tạp chí Định dạng Linux.