หากคุณมีภาพยนตร์ รายการทีวี หรือไฟล์วิดีโออื่นๆ ในเครื่องจำนวนมาก และตัดสินใจไม่ได้ว่าจะดูรายการใด คุณสามารถให้ Raspberry Pi เลือกให้คุณเพียงแค่กดปุ่ม เพื่อความเป็นธรรม มีวิธีเล่นวิดีโอแบบสุ่มที่ง่ายกว่า ไม่ว่าจะจากไฟล์ในเครื่องหรือบนเว็บ แต่ก็ไม่สนุกเท่าโครงการนี้ คว้าป๊อปคอร์นแล้วมาเริ่มสร้างและเขียนโปรแกรมเล่นวิดีโอสุ่ม Raspberry Pi ของเรากันเถอะ!
ฮาร์ดแวร์
การสร้างวงจรสำหรับโครงการนี้เป็นเรื่องง่าย เราต้องการเพียงสามปุ่มเท่านั้น เชื่อมต่อกับ GPIO ที่พิน 2,3,4 และแต่ละปุ่มเหล่านี้ต้องเชื่อมต่อกับ GND ด้วย ด้วยเหตุนี้ เราจึงสามารถใช้พิน GND เดียวบน Pi และสายจัมเปอร์ตัวเมียกับตัวผู้ . การเชื่อมต่อกับราง – ของเขียงหั่นขนมหมายความว่าเรามีการเชื่อมต่อ GND หลายจุดที่สามารถเชื่อมต่อผ่านสายจัมเปอร์ตัวผู้ถึงตัวผู้สองตัว ดูไดอะแกรมในการดาวน์โหลดสำหรับโครงการนี้สำหรับข้อมูลเพิ่มเติม เมื่อสร้างฮาร์ดแวร์แล้ว ให้แนบอุปกรณ์เสริมทั้งหมดที่จำเป็นสำหรับ Pi ของคุณและบูตไปที่เดสก์ท็อป Raspbian
ซอฟต์แวร์
เช่นเดียวกับโปรเจ็กต์ Pi ส่วนใหญ่ ก่อนที่คุณจะดำเนินการใดๆ คุณจะต้องตั้งค่า Raspberry Pi ของคุณด้วยสำเนาปัจจุบันของระบบปฏิบัติการ Raspbian หากคุณไม่ต้องการใช้แป้นพิมพ์และเมาส์เฉพาะ คุณสามารถสร้าง Raspberry Pi แบบไม่มีหัวซึ่งคุณเข้าถึงจากคอมพิวเตอร์เครื่องอื่นผ่าน VNC ได้
ก่อนที่เราจะสามารถเขียนโค้ด Python ได้ เราต้องติดตั้งไลบรารี่สองตัวที่จะช่วยเราสร้างโครงการ เปิด Terminal แล้วพิมพ์ข้อความต่อไปนี้ อย่าลืมกด Enter ที่ท้ายแต่ละบรรทัด
$ sudo pip3 ติดตั้ง glob$ sudo pip3 ติดตั้งแป้นพิมพ์
เราจะพูดถึงพวกเขาเพิ่มเติมในภายหลัง ตอนนี้ให้เปิดตัวแก้ไข Python 3 ที่พบในเมนูการเขียนโปรแกรมและคลิกที่ไฟล์ >> ใหม่เพื่อสร้างไฟล์เปล่าใหม่ คลิกไฟล์ >> บันทึกทันทีในหน้าต่างใหม่ บันทึกรหัสเป็น VideoPlayer.py และอย่าลืมบันทึกบ่อยๆ!
ตอนนี้เราเริ่มเขียนโค้ดแล้ว สิ่งแรกที่เราทำคือนำเข้าไลบรารีที่เราต้องการ ไลบรารีสามรายการแรกใช้เพื่อตรวจจับการกดปุ่ม (GPIO Zero) หยุดโค้ดไม่ให้ทำงานเพียงครั้งเดียวและออก (หยุดชั่วคราว) และเลือกวิดีโอแบบสุ่ม (ตัวเลือก)
จากปุ่มนำเข้า gpiozero จากการนำเข้าสัญญาณหยุดชั่วคราวจากตัวเลือกการนำเข้าแบบสุ่ม
การนำเข้าสามรายการสุดท้ายคือไลบรารีที่เราจะใช้แสดงรายการเนื้อหาของไดเร็กทอรี (glob) เรียกใช้คำสั่งเทอร์มินัล (กระบวนการย่อย) และรายการสุดท้ายคือไลบรารีเพื่อจำลองแป้นพิมพ์ (แป้นพิมพ์)
นำเข้า globimport แป้นพิมพ์ย่อยนำเข้า
ต่อจากนี้ไป เราได้สร้างฟังก์ชันสามชุด บล็อกของรหัสที่เราสามารถนำมาใช้ใหม่ได้ในภายหลังโดยเรียกชื่อพวกมัน ฟังก์ชันแรกเรียกว่า “play_video” และขั้นแรกจะสร้างรายการ (วัตถุจัดเก็บข้อมูล) ที่เรียกว่า “วิดีโอ”
def play_video():วิดีโอ = []
ในการกรอกรายการด้วยข้อมูล โดยเฉพาะรายการวิดีโอทั้งหมดที่เราสามารถเล่นได้ เราใช้ for loop ซึ่งจะวนซ้ำทุกไฟล์ในไดเร็กทอรี ตราบใดที่มันเป็นไฟล์วิดีโอ mp4 สำหรับสิ่งนี้เราใช้ “glob” เพื่อเข้าถึงไดเร็กทอรี “/media/pi/Videos” ซึ่งเป็นแท่ง USB ที่เรียกว่า “วิดีโอ” ที่เต็มไปด้วยไฟล์ mp4 เปลี่ยนสิ่งนี้ให้ตรงกับชื่อไดเรกทอรีที่คุณเลือกซึ่งเต็มไปด้วยวิดีโอ ทุกครั้งที่พบ mp4 ไฟล์นั้นจะถูกผนวกเข้ากับรายการ “วิดีโอ” ที่เราเพิ่งสร้างขึ้น
สำหรับไฟล์ใน glob.glob(“/media/pi/Videos/*.mp4”): videos.append (ไฟล์)
ตอนนี้ ให้ตรวจสอบว่ารายการได้รับการเติมด้วยชื่อไฟล์โดยการพิมพ์เนื้อหาของรายการไปยัง Python shell
พิมพ์ (วิดีโอ)
จากนั้นเราจะเลือกวิดีโอแบบสุ่มจากรายการและเก็บไว้ในตัวแปรที่เรียกว่า “เลือก” แล้วเราจะพิมพ์สิ่งนี้ไปยัง Python shell อีกครั้ง
จากนั้นเราจะเลือกวิดีโอสุ่มจากรายการและเก็บไว้ในตัวแปรที่เรียกว่า “เลือก” อีกครั้งเราพิมพ์สิ่งนี้ไปยังเปลือก Python ที่เลือก = ตัวเลือก (วิดีโอ) พิมพ์ (เลือก) พิมพ์ (เลือก)
บรรทัดสุดท้ายในฟังก์ชันนี้ใช้คลาส Popen จากไลบรารีกระบวนการย่อยเพื่อเรียกใช้คำสั่งราวกับว่าเรานั่งอยู่ที่เทอร์มินัล และคำสั่งนี้คือเปิดโปรแกรมเล่นสื่อ omxplayer แล้วเล่นวิดีโอที่เลือก
subprocess.Popen([‘omxplayer’,(เลือก)])
ฟังก์ชันถัดไปเรียกว่า “stop_video” และอย่างที่คุณเดาได้ว่าจะหยุดวิดีโอที่กำลังเล่นอยู่ สำหรับสิ่งนี้ เราใช้ไลบรารีของแป้นพิมพ์ โดยเฉพาะฟังก์ชัน “press_and_release” เพื่อจำลองการกดปุ่ม “q”
def stop_video(): keyboard.press_and_release(‘q’)
ฟังก์ชันสุดท้ายเรียกว่า “pause_video” และจำลองการกดแป้นเว้นวรรคบนแป้นพิมพ์ ซึ่งเป็นวิธีที่ omxplayer หยุดวิดีโอชั่วคราว
def หยุดชั่วคราว_video(): keyboard.press_and_release(‘space’)
ด้วยฟังก์ชันที่สร้างขึ้น ต่อไปเราต้องบอกรหัสของเราว่าปุ่มของเราเชื่อมต่ออยู่ที่ใด เรามีปุ่มที่เชื่อมต่ออยู่สามปุ่ม ได้แก่ ตัวสุ่ม (เล่น) หยุดและหยุดชั่วคราว_button ปุ่มเหล่านี้เชื่อมต่อกับ GPIO ที่พิน 2, 3 และ 4 ตามลำดับ
Randomiser = ปุ่ม(2)หยุด = ปุ่ม(3)pause_button = ปุ่ม(4)
ตกลงไปยังส่วนสุดท้าย และนี่คือส่วนที่มองหาเมื่อกดปุ่มและตอบสนองตามนั้น แต่ก่อนอื่น เรารวมส่วนนี้ไว้ในตัวจัดการข้อยกเว้น จะพยายามเรียกใช้รหัส แต่ถ้าผู้ใช้กด CTRL + C รหัสก็จะออก ดังนั้นสำหรับส่วนลอง โค้ดของเราจะพิมพ์สามบรรทัดไปที่เชลล์ก่อน นี่คือคำแนะนำสำหรับผู้ใช้ คุณจะสังเกตเห็น “n” ระหว่างแต่ละสี นี่คือ Python ชวเลขเพื่อแทรกบรรทัดใหม่ระหว่างแต่ละคำสั่ง
ลอง: พิมพ์ (“กดปุ่มสีเขียวเพื่อเริ่มต้นnYELLOW เพื่อหยุดชั่วคราวRED เพื่อหยุด”)
สามปุ่มของเรากำลังรอการกด และใช้ไลบรารี GPIO Zero เราเรียกว่าคลาส “ when_pressed” เพื่อตรวจจับเมื่อกดปุ่มแต่ละปุ่ม เมื่อสิ่งนี้เกิดขึ้น ฟังก์ชันที่เกี่ยวข้องจะทำงาน ดังนั้นเมื่อเรากดปุ่มสุ่มสีเขียว (เล่น) มันจะสุ่มเลือกวิดีโอจากแท่ง USB และเล่น คุณจะสังเกตเห็นว่าฟังก์ชันไม่มี () ต่อท้ายชื่อฟังก์ชัน เนื่องจากถ้าเป็นเช่นนั้น รหัสจะทำงานโดยอัตโนมัติ ตอนนี้พวกเขาพร้อมที่จะทำงานตามต้องการแล้ว
randomiser. when_pressed = play_video หยุด. when_pressed = stop_video หยุดชั่วคราว_button. when_pressed = หยุดชั่วคราว
บรรทัดสุดท้ายในส่วนนี้คือการหยุดชั่วคราว () อย่างง่าย และใช้สำหรับให้โค้ดทำงานต่อไป ไม่ใช่แค่ออกจากการทำงานหลังจากเรียกใช้เพียงครั้งเดียว
หยุด()
แต่จะเกิดอะไรขึ้นถ้าผู้ใช้กด CTRL + C? นี่คือ “แป้นพิมพ์ขัดจังหวะ” และหากเป็นเช่นนั้นเราจะพิมพ์บรรทัดว่างแล้ว “ออก” บนหน้าจอ
ยกเว้น KeyboardInterrupt: print(“nEXIT”)
ตอนนี้ให้บันทึกโค้ดของคุณ และเปิด Terminal ไปที่ไดเร็กทอรีที่คุณได้บันทึกโค้ดไว้ เพื่อที่จะใช้โค้ด เราจำเป็นต้องรันมันด้วย sudo (root powers) เนื่องจากไลบรารีของคีย์บอร์ดที่ใช้ในโปรเจ็กต์นั้นสามารถใช้เป็น root / sudo ได้เท่านั้น
ในการรันประเภทรหัส:
$ sudo python3 VideoPlayer.py
เมื่อพร้อมแล้ว ให้กดปุ่มสีเขียวเพื่อเล่นวิดีโอที่เลือกแบบสุ่ม เพื่อหยุดชั่วคราวให้กดสีเหลือง และเพื่อหยุดให้กดสีแดง เพลิดเพลินกับยามเย็นของคุณและอย่าทำป๊อปคอร์นหก!
คุณสามารถฝังโปรเจ็กต์ลงในกล่องที่ทนทาน เพื่อไม่ให้มือเล็กๆ ของคุณพังอุปกรณ์อิเล็กทรอนิกส์ คุณยังสามารถใช้ปุ่มสไตล์อาร์เคดซึ่งแข็งแกร่งกว่ามากและมีโอกาสแตกน้อยกว่า
รหัสที่สมบูรณ์
หากคุณต้องการคัดลอกและวางเนื้อหาลงในไฟล์ VideoPlayer.py นี่คือ:
จากปุ่มนำเข้า gpiozero จากการนำเข้าสัญญาณหยุดชั่วคราวจากการนำเข้าแบบสุ่มตัวเลือกการนำเข้า globimport กระบวนการย่อยการนำเข้าคีย์บอร์ดdef play_video (): วิดีโอ = [] สำหรับไฟล์ใน glob.glob (“/media/pi/Videos/*.mp4”): videos.append (ไฟล์) พิมพ์ ( วิดีโอ)chosen = ตัวเลือก (วิดีโอ) พิมพ์ (เลือก) พิมพ์ (เลือก) subprocess.Popen ([‘omxplayer’, (chosen)]) def stop_video ()keyboard.press_and_release (‘q’)def หยุดชั่วคราว_video ()keyboard.press_and_release ( ‘space’)randomiser – Button(2)stop = Button(3)pause_button = Button(4)try:print(“กดปุ่ม GREEN เพื่อเริ่ม nYELLOW เพื่อหยุดชั่วคราวRED เพื่อหยุด”) Randomiser. when_pressed = play_videostop.when_pressed = stop_videopause_button. when_pressed = หยุดชั่วคราว () ยกเว้น KeyboardInterrupt: พิมพ์ (“nEXIT”) ไลบรารีแป้นพิมพ์และความเป็นส่วนตัว
ในโครงการนี้ เราใช้ไลบรารี Keyboard Python เพื่อจำลองคีย์บอร์ดโดยใช้เพียงปุ่มกดที่ควบคุมการเล่น การหยุดชั่วคราว และการหยุดการเล่นวิดีโอ ไลบรารีคีย์บอร์ดค่อนข้างทรงพลังและสามารถใช้ในการกดแป้นใดก็ได้ ดังนั้นเราจึงสามารถกดหลายปุ่มโดยอัตโนมัติจากปุ่มกดเดียว (สะดวกสำหรับการออกจาก vim) ไลบรารีนี้ยังสามารถใช้เพื่อเขียนข้อความไปยังหน้าจอใน ลักษณะคล้ายกับฉาก “ตามกระต่ายขาว” ของนีโอจากเดอะเมทริกซ์ แต่ฟังก์ชันที่อันตรายที่สุดของไลบรารีนี้คือสามารถใช้บันทึกทุกการกดแป้นบนเครื่องเป้าหมายได้
การกดปุ่มเหล่านี้สามารถบันทึกลงในรายการ จากนั้นบันทึกลงในไฟล์และนำไปใช้ในจุดประสงค์ที่ชั่วร้าย เอาเป็นว่า เด็ก ผู้ใหญ่ การบันทึกการกดปุ่มของผู้ใช้โดยไม่ได้รับความยินยอมถือเป็นสิ่งผิดกฎหมาย และอาจทำให้คุณมีปัญหากับโรงเรียน/ที่ทำงาน/หน่วยงานต่างๆ มากมาย ดังนั้นอย่าทำอย่างนั้น! จากที่กล่าวมา สามารถใช้เป็นเครื่องมือที่มีประสิทธิภาพในการดีบักวิธีที่ผู้ใช้โต้ตอบกับโค้ดของคุณ ดังนั้นสำหรับการทดสอบซอฟต์แวร์ (ภายใต้ความยินยอมของสาธารณชนทั่วไปและผู้ทดสอบภายใน) คุณสามารถดูได้ว่าคีย์ใดที่พวกเขากดอยู่ก่อนโค้ด ล็อค / ไปเทอร์โมนิวเคลียร์!
ไลบรารีคีย์บอร์ดใช้งานได้กับ Linux และ Windows และให้ความสนุกในการเล่นด้วย หากต้องการอ่านเพิ่มเติมเล็กน้อยเกี่ยวกับไลบรารีนี้ ให้ไปที่บล็อกโพสต์ https://bigl.es/tuesday-tooling-record-replay-keystrokes-with-python/ และดูตัวอย่างการใช้งาน
บทความนี้เดิมปรากฏในนิตยสารรูปแบบ Linux