วันศุกร์ที่ 4 มีนาคม พ.ศ. 2559

เพิ่มรีโมทให้กับ Volumio

Volumio เป็นระบบเล่นไฟล์เสียงที่ทำให้ Raspberry Pi กลายเป็นเครื่องเล่น MP3 หลายคนอาจสงสัยว่า ทำไมถึงเล่นจาก RPi ทั้งๆ ที่เดี๋ยวนี้เราสามารถเล่นเพลงจากโทรศัพท์ หรือเครื่องเล่น MP3 มากมายในท้องตลาด และมีราคาที่ถูกแสนถูก โดยเฉพาะของจีนที่แพร่ตามท้องตลาดบางตัวราคาไม่ถึง 100 บาท

สำหรับนักฟังเพลงทั้งหลายคงเข้าใจเหตุผล หากบอกว่า เราสามารถ DIY (Do It by Yourselves) เพราะเราสามารถทำอะไรหลายๆ อย่างได้ด้วยตนเอง แต่ก็ไม่ง่าย และไม่ยากหากสนใจ

Volumio สามารถดาวน์โหลดได้ที่ https://volumio.org/ จะได้ไฟล์ .img วิธีการลงให้ดูจาก https://volumio.org/get-started หรือมีหลายเว็บลองค้นหาจาก google กันก่อนนะครับ

หลังจากที่ติดตั้งแล้ว บูตขึ้นมาแล้วให้เสียบสายแลนไว้เลย ให้ใช้โปรแกรม Putty เชื่อมต่อไปยัง Volumio โดยไม่ต้องสนใจ IP โดยเชื่อมไปที่ volumio.local

หน้าจอเมื่อเรียก volumio.local/
หน้าจอ ssh ให้เชื่อมไปที่ volumio.local

ที่หน้าจอล็อกอินให้ป้อนรหัสผู้ใช้และรหัสผ่านดังนี้

User Name: pi
Password: raspberry

การติดตั้งครั้งแรกนั้นเราต้องอัพเดทระบบต่างๆ ให้เรียบร้อยด้วยคำสั่ง
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-update

และที่สำคัญให้อัพเดทเฟิร์มแวร์ด้วย (ถึงแม้บางที่จะไม่แนะนำ แต่สำหรับผู้เขียนเคยเจอปัญหาของ OpenElec และ Volumio ติดตั้งระบบบางอย่างไม่ได้พอ update firmware ก็ใช้ได้)
sudo rpi-update
คำสั่งเหล่านี้ต้องใช้เวลาพอสมควร และระหว่างอัพเดทถ้าระบบถามให้เปลี่ยนแปลงให้เลือก default ไว้ก่อน ไม่ต้องเปลี่ยนใหม่ให้เลือกคอนฟิกเดิมไว้ก่อน

และจะมีหน้าจอให้เลือกลบ locale ให้เลือกเอาภาษาที่ไม่เกี่ยวข้องออกให้หมด ให้เหลือเฉพาะ en. และ th. เหลือเฉพาะภาษาไทยและภาษาอังกฤษเท่านั้น

*** รายละเอียดจะแยกทำขั้นตอนไว้ในบทความหน้า รอบนี้ถือว่าทุกคนสามารถติดตั้งและดำเนินการปรับแต่งได้บ้างแล้ว

การเพิ่มรีโมทโดยใช้ Infared Sensor

IR, Infared sensor เป็นตัวรับที่จะรับค่าจากรีโมทที่จะกล่าวถึงในบทความนี้เป็นเบอร์ TSOP38238 ซื้อมาพร้อมกับ Sparkfun Remote Kit มีรีโมทให้เรียบร้อย พร้อมกับ R 10k อีกหลายตัว (ราคาก็แพงด้วย)

ผู้อ่านสามารถใช้ ตัวรับอินฟาเรดที่มีขายทั่วไปได้ (ปกติแล้วจะเป็นความถี่ 38kHz)

ภาพแสดงการต่อขา IR เข้ากับขาของ Raspberry Pi
ส่วนด้านของฮาร์ดแวร์ก็มีเพียงแค่นี้ ที่เหลือก็เป็นเรื่องของซอฟท์แวร์ล้วนๆ และการตั้งค่าต่างๆ ต้องอยู่ใน user ชื่อ pi เท่านั้นถึงจะง่าย ถ้าเป็นผู้ใช้ root บางจุดจะไม่สามารถตั้งค่าได้ในบางจุด

ติดตั้งโปรแกรม lirc

สำหรับเฟิร์มแวร์ที่ใหม่กว่า 3.18 ให้แก้ไขแก้ไข Boot config เสียก่อนดังนี้

sudo nano /boot/config.txt

เพิ่มข้อความท้ายสุดดังนี้

dtooverlay=lirc-rpi,gpio_in_pin=18


พิมพ์ cd แล้วกดปุ่ม Enter เพื่อกลับไปหน้าหลักของ pi
sudo apt-get install lirc

เพิ่มโมดูลลงใน /etc/modules ดังนี้

lirc_devlirc_rpi gpio_in_pin=18

เปลี่ยนแปลงค่าใน /etc/lirc/hardware.conf ดังนี้
LIRCD_ARGS="--uinput"
DRIVER="default"
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"
จากนั้นให้หยุดการทำงานของโปรแกรม lirc ก่อน ด้วยคำสั่ง

sudo /etc/init.d/lirc stop

เมื่อปิดเสร็จแล้วต่อไปก็เป็นการบันทึกค่าปุ่มต่างๆ ของรีโมท

irrecord -n -d  /dev/lirc0  lircd.conf

หน้าจอเมื่อรันคำสั่ง irrecod

แล้วทำตามขั้นตอนที่บอกในหน้าจอ (ภาษาอังกฤษเต็มไปหมดเลยอ่านถือว่าฝึกภาษาอังกฤษไปในตัว :D ) ดูจากรูปแล้วมีขั้นตอนตามลำดับตัวเลขดังนี้

  1. กดปุ่ม Enter 2 ครั้งจนหน้าจอให้เริ่มบันทึก ให้กดปุ่มใดปุ่มหนึ่งบนรีโมทค้าง จะมีจุดขึ้นมา ให้กดเรื่อยๆ จนกว่าจะมีข้อความการอ่านค่าจากรีโมทขึ้นมา และมีข้อความบอกให้กดปุ่มซ้ำอีกครั้งหนึ่ง (ขั้นตอนนี้เป็นการเรียนรู้ของรีโมท โดยจะอ่านค่าการกดไปเก็บไว้แล้วค่อยประมวลผล)
  2. กดปุ่มเดิมรอบนี้รีโมทบางตัวอาจจะกดค้างไม่ได้ต้อง กด-ปล่อย ไปเรื่อยๆ จนกว่าจะมีหน้าจอขึ้นมาให้ป้อนชื่อปุ่ม
  3. ป้อนชื่อปุ่มที่เราจะกำหนด เช่น vol_up สำหรับปุ่มเร่งเสียง vol_down สำหรับลดเสียง เมื่อป้อนแล้วและกดปุ่ม Enter หน้าจะจะให้กดปุ่มที่จะใช้เป็นปุ่ม vol_up กดค้างนิดหนึ่งก็จะมีข้อความบอกให้สร้างปุ่มต่อไป
  4. พิมพ์ชื่อปุ่มอื่นๆ ตามที่ต้องการ (ในตัวอย่างนี้สร้างเพียง 2 ปุ่มเท่านั้น)

ตัวอย่างไฟล์ lircd.conf ที่ได้
begin remote

  name  /home/pi/lircd.conf
  bits  16
  flags SPACE_ENC|CONST_LENGTH
  eps    30
  aeps  100

  header       9038  4410
  one           611  1613
  zero          611   511
  ptrail        612
  repeat       9038  2198
  pre_data_bits   16
  pre_data       0x10EF
  gap            107279
  toggle_bit_mask   0x0

      begin codes
          vol_up    0xA05F
          vol_down  0x00FF
          KEY_POWER 0x....
      end codes


end remote

ตัวอักษรสีแดง คือ ปุ่มและค่าที่เรากำหนดไว้ ซึ่งจะใช้ในการสร้างผังในขั้นตอนต่อไป

ลำดับต่อไปให้คัดลอกไฟล์ lircd.conf ที่ได้ไปไว้ที่ /etc/lirc/ ด้วยคำสั่ง

sudo mv lircd.conf /etc/lirc/lircd.conf

เมื่อบันทึกและคัดลอกไฟล์คอนฟิกของรีโมทไปเก็บไว้แล้วให้สั่งรัน lircd อีกครั้งหนึ่งด้วยคำสั่ง

sudo /etc/init.d/lirc start

แล้วลองรีโมทด้วยคำสั่ง 

irw 

จากนั้นให้ลองกดปุ่มรีโมท หากไม่มีข้อผิดพลาดใดๆ จะได้ข้อความตอบกลับว่ากดปุ่มไหนบ้าง ตรงนี้จบขั้นตอนการติดตั้งรีโมทแล้ว ต่อไปจะกล่าวถึงการแม็พปุ่มกับโปรแกรม mpc

สร้างผังปุ่มกดกับโปรแกรม mpc

บอร์ดสามารถอ่านการกดปุ่มรีโมทได้แล้ว แต่ไม่สามารถใช้งานได้ทันที ไม่เหมือนใน OpenElec หากต่อรีโมทได้ก็สามารถใช้งานได้เลย ขั้นตอนการสร้างความสัมพันธ์ของปุ่มกดกับโปรแกรมให้สร้างไฟล์ .lircrc ไว้ใน /home/pi เน้นว่าต้องเป็น /home/pi เท่านั้น 

nano /home/pi/.lircrc

begin
  prog = irexec
  button = vol_up
  config = mpc volume +5
end
begin
  prog = irexec
  button = vol_down
  config = mpc volume -5
end
begin
  prog = irexec
  button = play
  config = mpc play
end
begin
  prog = irexec
  button = pause
  config = mpc toggle
end
begin
  prog = irexec
  button = nextsong
  config = mpc next;mpc play
end
begin
  prog = irexec
  button = prevsong
  config = mpc prev;mpc play
end
begin
  prog = irexec
  button = stop
  config = mpc stop
end

เพิ่มเติมปุ่ม Power ให้ปิดเครื่อง

begin
  prog = irexec
  button = KEY_POWER
  config = sudo /sbin/shutdown -h now
endi


เมื่อบันทึกไฟล์แล้วให้รันคำสั่ง 

irexec -d 

แล้วลองกดปุ่มดู... ถ้าไม่ผิดพลาดอะไรเมื่อกดปุ่ม Play ต้องได้ยินเสียงเพลงแน่นอน

*** mpc เป็นโปรแกรมสำหรับเล่นไฟล์เสียง สามารถจัดการผ่านคอมมานด์ไลน์ได้ทันที จะเขียนถึงภายหลัง


ตั้งค่าให้เรียกโปรแกรมตอนเปิดเครื่อง

เราต้องรันคำสั่ง irexec ในตอนเริ่มต้นระบบ โดยให้เพิ่มคำสั่งใน /etc/rc.local โดยให้พิมพ์เหนือบรรทัด exit 0 ดังนี้

(sleep 3;sudo -u pi irexec -d)&

เสร็จแล้วรีสตาร์ทครั้งหนึ่งด้วยคำสั่ง sudo restart แล้วลองเปิดเพลงและลองใช้งานดูครับ ได้ไม่ได้อย่างไรลองคอมเม้นท์ไว้ได้ครับ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น

Gtk4 ตอนที่ 6 Defining a Child object

Defining a Child object A Very Simple Editor ในบทความที่ผ่านมาเราสร้างโปรแกรมอ่านไฟล์ชนิดข้อความ และในบทความนี้ก็จะมาปรับแต่งโปรแกรมกันสักหน...