Jika anda mempunyai banyak filem, rancangan atau fail video tempatan yang lain dan tidak dapat memutuskan yang mana satu untuk ditonton, anda boleh membuat Raspberry Pi memilih untuk anda, dengan menekan butang. Untuk bersikap adil, terdapat cara yang lebih mudah untuk memainkan video rawak, sama ada daripada fail tempatan atau di web, tetapi ia tidak seseronok projek ini. Jadi dapatkan popcorn dan mari mula membina dan mengekodkan pemain video rawak Raspberry Pi kita sendiri!
Perkakasan
Membina litar untuk projek ini adalah mudah. Kami hanya memerlukan tiga butang, disambungkan kepada GPIO pada pin 2,3,4 dan setiap butang ini juga perlu disambungkan kepada GND, untuk ini kami boleh menggunakan satu pin GND pada Pi, dan wayar pelompat perempuan ke lelaki . Disambungkan ke – rel papan roti bermakna kami mempunyai berbilang sambungan GND yang boleh disambungkan melalui dua wayar pelompat lelaki ke lelaki. Lihat gambar rajah dalam muat turun untuk projek ini untuk mendapatkan maklumat lanjut. Apabila perkakasan dibina, pasangkan semua aksesori yang diperlukan untuk Pi anda dan but pada desktop Raspbian.
Perisian
Seperti kebanyakan projek Pi, sebelum anda melakukan perkara lain, anda perlu menyediakan Raspberry Pi anda dengan salinan semasa sistem pengendalian Raspbian. Jika anda tidak mahu menggunakan papan kekunci dan tetikus khusus, anda boleh mencipta Raspberry Pi tanpa kepala yang anda akses daripada komputer lain melalui VNC.
Sebelum kami boleh menulis sebarang kod Python, kami perlu memasang dua perpustakaan yang akan membantu kami membuat projek. Buka Terminal, dan taip yang berikut, ingat untuk menekan Enter pada penghujung setiap baris.
$ sudo pip3 pasang glob$ sudo pip3 pasang papan kekunci
Kami akan bercakap lebih lanjut mengenai mereka kemudian. Buat masa ini buka editor Python 3, terdapat dalam menu Pengaturcaraan dan klik pada Fail >> Baru untuk mencipta fail kosong baharu. Segera klik Fail >> Simpan dalam tetingkap baharu. Simpan kod sebagai VideoPlayer.py dan ingat untuk menyimpan selalu!
Jadi sekarang kita mula menulis kod, dan tindakan pertama kita ialah mengimport perpustakaan yang kita perlukan. Tiga perpustakaan pertama digunakan untuk mengesan penekanan butang (GPIO Zero), menghentikan kod daripada berjalan sekali dan keluar (jeda) dan untuk memilih video rawak (pilihan.)
daripada import gpiozero Buttondaripada import isyarat jeda daripada pilihan import rawak
Tiga import terakhir ialah perpustakaan yang akan kami gunakan untuk menyenaraikan kandungan direktori (glob), jalankan arahan terminal (subproses) dan yang terakhir ialah perpustakaan untuk meniru papan kekunci (papan kekunci.)
import papan kekunci subprosesimport globimport
Seterusnya, kami mencipta tiga fungsi, blok kod yang kemudiannya boleh kami gunakan semula dengan memanggil namanya. Fungsi pertama dipanggil “play_video” dan ia mula-mula mencipta senarai (objek penyimpanan data) dipanggil “video”.
def play_video():videos = []
Untuk mengisi senarai dengan maklumat, khususnya senarai semua video yang boleh kami mainkan, kami menggunakan gelung for, yang akan berulang pada setiap fail dalam direktori, asalkan ia adalah fail video mp4. Untuk ini, kami menggunakan “glob” untuk mengakses direktori “/media/pi/Videos” yang sebenarnya merupakan kayu USB yang dipanggil “Video” penuh dengan fail mp4. Tukar ini supaya sepadan dengan nama direktori pilihan anda yang penuh dengan video. Setiap kali mp4 ditemui, ia dilampirkan pada senarai “video” yang baru kami buat.
untuk fail dalam glob.glob(“/media/pi/Videos/*.mp4”): videos.append(fail)
Jadi sekarang mari kita semak bahawa senarai itu telah diisi dengan nama fail dengan mencetak kandungan senarai ke cangkerang Python.
cetak(video)
Kemudian kami akan memilih video rawak daripada senarai dan menyimpannya dalam pembolehubah yang dipanggil “dipilih”, sekali lagi kami mencetaknya ke cangkerang Python.
Kemudian kita akan memilih video rawak daripada senarai dan menyimpannya dalam pembolehubah yang dipanggil “dipilih”, sekali lagi kita mencetak ini ke shell Python yang dipilih = pilihan(video) cetak(dipilih) cetak(dipilih)
Baris terakhir dalam fungsi ini menggunakan kelas Popen daripada perpustakaan subproses untuk menjalankan arahan seolah-olah kita sedang duduk di terminal, dan arahan ini adalah untuk membuka pemain media omxplayer, dan kemudian memainkan video yang dipilih.
subprocess.Popen([‘omxplayer’,(dipilih)])
Fungsi seterusnya dipanggil “stop_video” dan seperti yang anda boleh meneka ia akan menghentikan video yang sedang dimainkan. Untuk ini kami menggunakan perpustakaan papan kekunci, khususnya fungsi “press_and_release” untuk mensimulasikan menekan kekunci “q”.
def stop_video(): papan kekunci.press_and_release(‘q’)
Fungsi terakhir dipanggil “pause_video” dan ia meniru menekan bar ruang pada papan kekunci, iaitu cara omxplayer menjeda video.
def pause_video(): keyboard.press_and_release(‘space’)
Dengan fungsi yang dicipta, kami seterusnya perlu memberitahu kod kami di mana butang kami disambungkan. Kami mempunyai tiga butang yang disambungkan, rawak (main), berhenti dan pause_button. Butang ini disambungkan kepada GPIO pada pin 2, 3 dan 4 masing-masing.
rawak = Butang(2)berhenti = Butang(3)butang_jeda = Butang(4)
Ok seterusnya ke bahagian terakhir, dan ini adalah bahagian yang dicari apabila butang ditekan, dan bertindak balas dengan sewajarnya. Tetapi mula-mula kita bungkus bahagian ini dalam pengendali pengecualian. Ia akan cuba menjalankan kod, tetapi jika pengguna menekan CTRL + C maka kod akan keluar. Jadi untuk bahagian cuba kod kami akan mencetak tiga baris pada shell, ini adalah arahan kepada pengguna. Anda akan melihat “n” antara setiap warna. Ini ialah singkatan Python untuk memasukkan baris baharu antara setiap arahan.
cuba: print(“Tekan butang HIJAU untuk memulakannKUNING untuk menjeda MERAH untuk berhenti”)
Tiga butang kami sedang menunggu untuk ditekan, dan menggunakan perpustakaan GPIO Zero kami memanggil kelas “apabila_tekan” untuk mengesan apabila setiap butang ditekan. Apabila ini berlaku fungsi yang sepadan dijalankan. Oleh itu, apabila kita menekan butang Green randomiser (main) ia akan secara rawak memilih video daripada batang USB dan memainkannya. Anda akan perasan bahawa fungsi tidak mempunyai () pada penghujung nama fungsi. Ini kerana jika mereka melakukannya, maka kod akan berjalan secara automatik. Sekarang ini mereka bersedia untuk berjalan atas permintaan.
randomiser.when_pressed = play_video stop.when_pressed = stop_video pause_button.when_pressed = pause_video
Baris terakhir dalam bahagian ini ialah jeda ringkas(), dan ini digunakan untuk memastikan kod berjalan, dan bukan hanya keluar selepas berjalan sekali.
jeda()
Tetapi apa yang berlaku jika pengguna menekan CTRL + C? Nah, ini adalah “Gangguan Papan Kekunci” dan jika itu berlaku, kami hanya akan mencetak baris kosong kemudian “Keluar” pada skrin.
kecuali KeyboardInterrupt: print(“nEXIT”)
Jadi sekarang simpan kod anda, dan buka Terminal ke direktori tempat anda telah menyimpan kod tersebut. Untuk menggunakan kod tersebut, kami perlu menjalankannya dengan sudo (kuasa akar) kerana perpustakaan papan kekunci yang digunakan dalam projek hanya boleh digunakan sebagai root / sudo.
Untuk menjalankan jenis kod:
$ sudo python3 VideoPlayer.py
Apabila bersedia tekan butang Hijau untuk memainkan video yang dipilih secara rawak, untuk menjeda tekan Kuning, dan untuk menghentikan tekan Merah. Nikmati malam anda dan jangan tumpahkan popcorn!
Anda boleh membenamkan projek dalam kotak yang sukar, supaya tangan kecil tidak memecahkan elektronik. Anda juga boleh menggunakan butang gaya arked yang jauh lebih teguh dan kurang berkemungkinan rosak.
Kod Lengkap
Jika anda hanya mahu menyalin dan menampal kandungan ke dalam fail VideoPlayer.py, berikut ialah:
daripada import gpiozero Butangdaripada import isyarat jeda daripada pilihan import rawakimport globimport subproses papan kekunciimportdef play_video(): videos = [] untuk fail dalam glob.glob(“/media/pi/Videos/*.mp4”): videos.append(file)print( video)dipilih = pilihan(video) cetak(dipilih) cetak(dipilih)subproses.Popen([‘omxplayer’,(dipilih)]) def stop_video()keyboard.press_and_release(‘q’)def pause_video()keyboard.press_and_release( ‘ruang’)randomiser – Butang(2)stop = Butang(3)pause_button = Button(4)try:print(“Tekan butang HIJAU untuk memulakannKUNING untuk menjeda MERAH untuk berhenti”) randomiser.when_pressed = play_videostop.when_pressed = stop_videopause_button.when_pressed = pause_video pause()kecuali KeyboardInterrupt: print(“nEXIT”)Perpustakaan Papan Kekunci dan Privasi
Dalam projek ini kami menggunakan pustaka Keyboard Python untuk meniru papan kekunci menggunakan hanya butang tekan yang mengawal main, menjeda dan menghentikan main balik video. Pustaka Papan Kekunci agak berkuasa dan ia boleh digunakan untuk menekan mana-mana kekunci, jadi kami boleh mengautomasikan pelbagai penekanan kekunci semua daripada satu butang tekan (berguna untuk keluar dari vim.) Pustaka juga boleh digunakan untuk menulis teks ke skrin, dalam cara yang sama dengan adegan “ikut arnab putih” Neo dari The Matrix. Tetapi fungsi paling berbahaya perpustakaan ini ialah ia boleh digunakan untuk merakam setiap penekanan kekunci pada mesin sasaran.
Penekanan kekunci ini boleh direkodkan ke senarai, kemudian disimpan ke fail dan kemudian digunakan untuk tujuan jahat. Oleh itu, mari kita menjadi kanak-kanak yang jelas, orang dewasa. Merakam penekanan kekunci pengguna, tanpa persetujuan mereka adalah haram dan boleh menyebabkan anda menghadapi banyak masalah dengan sekolah / kerja / pihak berkuasa. Jadi jangan buat! Dengan itu, ia boleh digunakan sebagai alat yang berkuasa semasa menyahpepijat cara pengguna berinteraksi dengan kod anda, jadi untuk ujian perisian (di bawah persetujuan dengan orang awam dan penguji dalaman) anda boleh melihat kekunci yang mereka tekan tepat sebelum kod dikurung / pergi termonuklear!
Pustaka Papan Kekunci berfungsi dengan Linux dan Windows dan ia sangat menyeronokkan untuk dimainkan. Untuk membaca lebih lanjut mengenai perpustakaan ini pergi ke catatan blog ini https://bigl.es/tuesday-tooling-record-replay-keystrokes-with-python/ dan lihat beberapa contoh cara ia boleh digunakan.
Artikel ini pada asalnya muncul dalam Majalah Format Linux.