บทความการพัฒนาโปรแกรมบน Raspberry Pi ด้วย Qt

บทความการพัฒนาโปรแกรมบน Raspberry Pi ด้วย Qt

            บทความนี้จะแนะนำให้รู้จักกับ Raspberry Pi บอร์ด Embedded OS ที่กำลังได้รับความนิยมอย่างมาก ตั้งแต่ส่วนประกอบจนถึงการติดตั้งระบบปฏิบัติการ Linux เพื่อเริ่มต้นเรียนรู้และใช้งานกับบอร์ด จากนั้นกล่าวถึงการติดตั้งและใช้งาน Qt ซึ่งเป็นเฟรมเวิร์คสำหรับการพัฒนาแอพพลิเคชั่นติดต่อผู้ใช้งาน และเชื่อมต่อกับฮาร์ดแวร์ของบอร์ดผ่านไลบรารี่ Wiring Pi พร้อมตัวอย่างการเขียนโปรแกรมติดต่อกับอินพุต-เอาท์พุต (GPIO) และการสื่อสารผ่านพอร์ตอนุกรม (Serial Port) ทั้งแบบ UART I2C และ SPI

โดยเนื้อหาหลักๆ จะประกอบด้วยหัวข้อดังนี้

ตอนที่ 1 รู้จักกับบอร์ด Raspberry Pi

พร้อมเรียนรู้วิธีการติดตั้งระบบปฏิบัติการ Linux ให้กับ Respberry Pi

Raspberry Pi คืออะไร?

         บอร์ดคอมพิวเตอร์ขนาดเล็กที่สามารถเชื่อมต่อกับจอมอนิเตอร์ คีย์บอร์ด และเมาส์ได้ สามารถนำมาประยุกต์ใช้ในการทำโครงงานทางด้านอิเล็กทรอนิกส์ การเขียนโปรแกรม หรือเป็นเครื่องคอมพิวเตอร์ตั้งโต๊ะขนาดเล็ก ไม่ว่าจะเป็นการทำงาน Spreadsheet Word Processing ท่องอินเทอร์เน็ต ส่งอีเมล หรือเล่นเกมส์ อีกทั้งยังสามารถเล่นไฟล์วีดีโอความละเอียดสูง (High-Definition) ได้อีกด้วย
         บอร์ด Raspberry Pi รองรับระบบปฏิบัติการลินุกซ์ (Linux Operating System) ได้หลายระบบ เช่น Raspbian (Debian) Pidora (Fedora) และ Arch Linux เป็นต้น โดยติดตั้งบน SD Card บอร์ด Raspberry Pi นี้ถูกออกแบบมาให้มี CPU GPU และ RAM อยู่ภายในชิปเดียวกัน มีจุดเชื่อมต่อ GPIO ให้ผู้ใช้สามารถนำไปใช้ร่วมกับอุปกรณ์อิเล็กทรอนิกส์อื่นๆ ได้อีกด้วย
คุณสมบัติทางเทคนิคของบอร์ด 
บอร์ด Raspberry Pi ปัจจุบันมีด้วยกัน 2 โมเดล คือ โมเดล A และ โมเดล B ซึ่งทั้ง 2 โมเดลมีคุณสมบัติทางเทคนิคที่ใกล้เคียงกัน แตกต่างกันเพียงบางส่วน รายละเอียดดังตาราง

 โมเดล Aโมเดล B (Revision 2)
System on a chip (SoC)Broadcom BCM2835(CPU, GPU, DSP, SDRAMandSingle USB Port)
CPU700MHz ARM1176JZF-S core(ARM11 family, ARMv6 instruction set)
GPUBroadcom VideoCore IV @ 250 MHzOpenGL ES 2.0 (24 GFLOPS)MPEG-2 and VC-1, 1080p 30 h.264/MPEG-4 AVC high-profile decoder andencoder 
Memory (SDRAM)256 MB (Shared with GPU)512 MB (Shared with GPU)
USB 2.0 Ports 1(direct form BCM2835)2 (via the build in integrated 3-port USB hub)
Video InputA CSI input connector allows for the connection of RPF designed camera module (ออกแบบมาให้เชื่อมต่อกับ Raspberry Pi Camera Module โดยเฉพาะ) 
Video OutputsComposite RCA (PAL and NTSC), HDMI (rev 1.3 & 1.4), raw LCD Panels via DSI 14 HDMI resolutions from 640×350 to 1920×1200 plus various PAL and NTSC standards.(มีทั้งสองแบบ คือ แบบ RCA และแบบ HDMI) 
Audio Outputs3.5 mm jack, HDMI, and as of revision 2 boards, I2S audio (also potentially for audio input) 
Onboard storageSD/ MMC/ SDIO card slot (3.3V card power support only) 
Onboard networkNone10/100 Ethernet (8P8C) USB adapter on the third port of the USB hub
Low-level peripheralsLow-level peripherals8 x GPIO, UART, I2C Bus, SPI Bus with two chip selects, I2S audio +3.3V, +5V, Ground 
Power ratings300 mA (1.5 W)700 mA (3.5 W)
Power source5 Volt via Micro USB or GPIO header 
Size85.60 mm x 53. Mm (3.370 inch x 2.125 inch) 
Weight45 g. (1.6 oz.)

ตัวอย่างโครงสร้างบอร์ด Raspberry Pi ทั้ง 2 โมเดล

แหล่งที่มา: http://www.hackthings.com/raspberry-pi-model-a-and-b/

ส่วนประกอบของบอร์ด Raspberry Pi (Model B)

1. พอร์ต GPIO ซึ่งในโมเดล A และ B (Revision 1) ทุก Pin จะเหมือนกัน แต่โมเดล B (Revision 2) จะแตกต่างกัน รายละเอียดดังรูป

Raspberry Pi Model A & B (Revision 1)                        

Raspberry Pi Model B (Revision 2)

แหล่งที่มา: http://www.hobbytronics.co.uk/raspberry-pi-gpio-pinout

2. พอร์ตเชื่อมต่อสัญญาณภาพออกแบบ RCA ตัวอย่างของสายที่เชื่อมต่อแสดงดังรูป

แหล่งที่มา: https://www.crazypi.com/raspberry-pi-starter-kit

3. จุดเชื่อมต่อสัญญาณเสียงขนาด 3.5 มิลลิเมตร
4. LED แสดงสถานะของบอร์ด อยู่ภายในบริเวณกรอบสีแดง ดังภาพ

แหล่งที่มา: http://www.rpiblog.com/2012/12/raspberry-pi-status-indicator-led-info.html

  • ACT คือ ไฟสถานะ SD Card Access (สีเขียว)
  • PWR คือ ไฟสถานะ 3.3V Power (สีแดง)
  • FDX คือ ไฟสถานะ Full Duplex LAN Model B (สีเขียว)
  • LNK คือ ไฟสถานะ Link/Activity LAN Model B (สีเขียว)
  • 100 คือ ไฟสถานะ 10/100Mbps LAN Model B (สีเหลือง) 

5. ชิปควบคุม LAN (LAN Controller)

6. พอร์ต USB 2.0 จำนวน 2 พอร์ต
7. พอร์ต RJ-45 Ethernet LAN 10/100Mbps
8. พอร์ต CSI (Camera Serial Interface) สำหรับเชื่อมต่อโมดูลกล้องดังภาพ แสดงตัวอย่างโมดูลกล้อง

Raspberry PI Camera Module 

9. พอร์ต HDMI สำหรับเชื่อมต่อสัญญาณภาพและเสียง ตัวอย่างสาย HDMI และตัวแปลง HDMI to VGA แสดงดังรูปด้านล่าง

สาย HDMI 

HDMI to VGA

10. ชิพ Broadcom BCM2835 ARM11 700MHz

11. พอร์ต Micro USB Power สำหรับเป็นไฟเลี้ยงวงจรบอร์ด Raspberry Pi
12. พอร์ต DSI (Display Serial Interface) ใช้สำหรับต่อจอแสดงผล เช่น จอแสดงผลแบบ TFT Touch Screen เป็นต้น
13. ช่องเสียบ SD Card อยู่บริเวณด้านล่างของบอร์ด

ติดตั้งระบบปฏิบัติการ Linux ให้กับ Raspberry Pi

เริ่มต้นการติดตั้งระบบปฏิบัติการ
           ก่อนเริ่มต้นการใช้งานบอร์ด Raspberry Pi จำเป็นที่จะต้องติดตั้งระบบปฏิบัติการให้กับบอร์ดก่อนเนื่องจากบอร์ดไม่มีหน่วยความจำแบบแฟลชเมมโมรี่มาบนบอร์ดด้วย ดังนั้น จำเป็นที่จะต้องเตรียมอุปกรณ์ต่างๆ ให้พร้อมเพื่อให้สามารถใช้งานบอร์ดได้ ซึ่งมีรายละเอียดอุปกรณ์ดังนี้
1. บอร์ด Raspberry Pi
2. SD Card สำหรับติดตั้งระบบปฏิบัติการ Linux ต้องมีความจุมากกว่า 2GB ขึ้นไป แต่แนะนำให้ใช้ ขนาด 4GB หรือมากกว่า สำหรับคู่มือฉบับนี้จะใช้ขนาด 8GB ควรเลือกใช้การ์ดที่มีความเร็วสูงอย่าง Class 10 เพื่อประสิทธิภาพการทำงานของระบบโดยรวม

Sandisk Micro SD Ultra 8GB 30MB/s Class10 with Adapter 

3. เมาส์และคีย์บอร์ดแบบ USB

4. สาย Micro USB เพื่อจ่ายไฟเลี้ยงวงจร สามารถเลือกใช้แหล่งจ่ายไฟจากพอร์ต USB ของเครื่องคอมพิวเตอร์ได้

5. สาย HDMI เพื่อเชื่อมต่อกับจอแสดงผล หากเลือกใช้จอ Monitor ที่ไม่มีพอร์ต HDMI รองรับต้องใช้ตัวแปลง HDMI to VGA ด้วย หรือเชื่อมต่อสายวีดีโอ RCA ก็ได้เช่นเดียวกัน (เลือกอย่างใดอย่างหนึ่ง)

เตรียม Software สำหรับติดตั้งระบบปฏิบัติการ Linux ลงบนบอร์ด Raspberry Pi

คู่มือฉบับนี้จะจัดเตรียมซอฟต์แวร์ที่รองรับระบบปฏิบัติการ Windows 7 เป็นหลัก และต้องติดตั้งลงบนเครื่องคอมพิวเตอร์ดังนี้
1. โปรแกรม SD Formatter 4.0 ใช้สำหรับ Format Disk สามารถดาวน์โหลดได้จากลิงค์https://www.sdcard.org/downloads/formatter_4/eula_windows/

ตัวอย่างหน้าต่างโปรแกรม SD Formatter Version 4.0

2. โปรแกรม Win32 Disk Imager ใช้สำหรับเขียนไฟล์ระบบปฏิบัติการที่เป็นไฟล์ Image (*.img) ลงบน SD Card สามารถดาวน์โหลดได้จากลิงค์ http://sourceforge.net/projects/win32diskimager/

ตัวอย่างโปรแกรม Win32 Disk Imager

3. ไฟล์ระบบปฏิบัติการ คู่มือนี้ติดตั้งระบบปฏิบัติการ Raspbian เป็นระบบปฏิบัติการ Debian Wheezy ที่ถูกปรับแต่งให้ใช้สำหรับบอร์ด Raspberry Pi โดยเฉพาะ เป็น Linux ที่ให้ใช้งานได้ฟรี สามารถดาวน์โหลดได้จากลิงค์http://www.raspberrypi.org/downloads

ขั้นตอนการติดตั้งระบบปฏิบัติการ Raspbian ให้กับบอร์ด Raspberry Pi
1. หากมีข้อมูลอยู่ใน SD Card ให้ทำการ Format ด้วยโปรแกรม SD Formatter 4.0 หรือโปรแกรมอื่นๆ ก็ได้ ถ้าหาก Format แล้วให้ข้ามขั้นตอนนี้ได้เลย
2. เมื่อดาวน์โหลดไฟล์ระบบปฏิบัติการ Raspbian มาแล้วจะได้เป็นไฟล์ Zip ให้แตกไฟล์จะได้เป็นไฟล์ Image (*img) มาแสดงดังรูป

3. เมื่อดาวน์โหลดโปรแกรม Win32 Disk Imager มาแล้วจะได้เป็นไฟล์ Zip ให้แตกไฟล์และรันโปรแกรมแสดงดังรูป

    รันไฟล์ Win32DiskImager                     หลังจากรันโปรแกรมจะปรากฏหน้าต่างโปรแกรม

4. ให้ Browse ไฟล์ Image ระบบปฏิบัติการ Raspbain (*img) และเลือก Device ให้ถูกต้อง แล้วคลิกปุ่ม Write แสดงดังรูป และจะปรากฏหน้าต่างยืนยัน ให้คลิกปุ่ม Yes 

5. รอจนกว่า Progress Bar ครบ 100% และปรากฏหน้าต่างแสดงดังรูป แล้วให้กดปุ่ม OK และ Exit 

6. หากเชื่อมต่อบอร์ด Raspberry Pi กับจอคอมพิวเตอร์ผ่านอุปกรณ์แปลง HDMI-to-VGA ให้แก้ไขไฟล์ config.txt ตามเอกสารในลิงค์

7. จากนั้นถอด SD Card ออกจากเครื่องคอมพิวเตอร์ แล้วนำไปเสียบที่บอร์ด Raspberry Pi

แหล่งที่มา: http://robotics.keckist.edu.np/category/raspberry-pi

8. หลังจากเสียบ SD Card เรียบร้อยแล้ว ให้เสียบเมาส์ คีย์บอร์ด สายต่อจอแสดงผล HDMI หรือ RCA สายไฟเลี้ยงวงจรบอร์ด Micro USB และอื่นๆ

9. หลังจากนั้นบอร์ด Raspberry Pi ก็จะเริ่มทำงาน และเริ่ม Boot ระบบดังรูป

10. หลังจากระบบปฏิบัติการ Boot เสร็จเรียบร้อยจะปรากฏหน้าต่างแสดงดังรูป ให้เลือกเมนู 1 Expand Filesystem เพื่อขยายพื้นที่บน SD Card ให้ใช้งานได้เต็มความจุ เลือกด้วยลูกศรขึ้นลงแล้วกด Enter

11. จะปรากฏหน้าต่างแสดงดังรูป ให้กด Enter อีกครั้ง

12. กำหนดรูปแบบการใช้งานระบบปฏิบัติการให้ใช้งานในโหมด Graphic ให้เลือกเมนู 3 Enable Boot to Desktop/Scratch แล้วกดแป้นพิมพ์ Enter

13. หลังจากนั้นจะปรากฏตัวเลือกมาทั้งหมด 3 ตัวเลือก ให้เลือก Desktop Log in as user ‘pi’ at the graphical desktop แล้วกดแป้นพิมพ์ Enter

14. หากต้องการใช้งานโมดูลกล้อง (Raspberry Pi Camera Module) ต้องเปิดฟังก์ชันการใช้งานนี้ด้วย โดยเลือกเมนู 5 Enable Camera แล้วกด Enter แต่ถ้าหากไม่ต้องการใช้ให้ข้ามขั้นตอนนี้ไป

15. หลังจากนั้นให้เลือก Enable แล้วกดแป้นพิมพ์ Enter

16. สุดท้ายให้เลื่อนไปที่ Finish แล้วกด Enter เพื่อจบการตั้งค่าระบบและ Reboot ระบบใหม่

17. ระบบจะถามย้ำอีกครั้งว่าต้องการจะ Reboot ระบบใหม่ตอนนี้เลยหรือไม่ เลือก Yes แล้วกด Enter ระบบก็จะ Reboot ใหม่ทันที

18. หลังจากที่ระบบ Reboot ใหม่เสร็จเรียบร้อยแล้ว จะแสดงหน้า Desktop ของ Raspbian ดังรูป

วิธีแก้ปัญหาคีย์บอร์ดพิมพ์ตัวอักขระหรือตัวอักษรไม่ตรง

– ให้ดับเบิลคลิกเปิดโปรแกรม LXTerminal ขึ้นมา

– พิมพ์คำสั่งใน LXTerminal ดังนี้ sudo nano /etc/default/keyboard แล้ว Enter

– จะปรากฏหน้าต่างของโปรแกรม nano ขึ้นมา

– แก้ข้อความจาก “gb” เป็น “us” ดังภาพ

– กด CTRL + X เพื่อบันทึก แล้วกด Y ตามด้วย Enter