<< Go Back

การเขียนโปรแกรมสำหรับผู้เริ่มต้นใช้งานบอร์ด RPI พื้นฐานที่สำคัญ ก็คือ การฝึกหัดควบคุม Input – Output ของขา GPIO บนบอร์ด Raspberry Pi ซึ่งจะทำให้เราเรียนรู้และทราบถึงหน้าที่ของขา GPIO ในแต่ละขาบนบอร์ด RPI “มีหน้าที่อะไรบ้างและมีคุณสมบัติใดบ้าง” โดยขา GPIO บนบอร์ด Raspberry Pi จะมีทั้งหมด 40 ขา 20 คู่ ซึ่งจะมีหน้าที่และคุณสมบัติที่แตกต่างกันดังนี้ - 1 และ 17 คือ ขาแรงดันไฟฟ้า 3.3 V - 2 และ 4 คือ ขาแรงดันไฟฟ้า 5 V - 6, 9, 14, 20, 25, 30, 34, และ 39 คือขา Ground - 3, 5, 7, 8, 10, 11, 12, 13, 15, 16, 18, 19, 21, 22, 23, 26, 27, 28, 29, 31, 32, 33, 35, 36, 37, 38 และ 40 คือขา GPIO เป็นหมายเลข และสมบัติอื่นๆ ได้ดังนี้

ขา 3 คือ GPIO2 และเป็น (I Square C)
ขา 5 คือ GPIO3 และเป็น (I Square C)
ขา 7 คือ GPIO4
ขา 8 คือ GPIO14 และเป็น (Serial Port)
ขา 10 คือ GPIO15 และเป็น (Serial Port)
ขา 11 คือ GPIO17
ขา 13 คือ GPIO27
ขา 15 คือ GPIO22
ขา 16 คือ GPIO23
ขา 18 คือ GPIO24
ขา 19 คือ GPIO10 และเป็น (SPI)
ขา 21 คือ GPIO9 และเป็น (SPI)
ขา 22 คือ GPIO25
ขา 23 คือ GPIO11 และเป็น (SPI)
ขา 24 คือ GPIO8 และเป็น (SPI)
ขา 26 คือ GPIO7 และเป็น (SPI)
ขา 27 คือ GPIO, ID_SD (SDA.1 – SCL.1)
ขา 28 คือ GPIO, ID_SD (SDA.0 – SCL.0)
ขา 29 คือ GPIO5
ขา 31 คือ GPIO6
ขา 32 คือ GPIO12
ขา 33 คือ GPIO13
ขา 35 คือ GPIO19
ขา 36 คือ GPIO16
ขา 37 คือ GPIO26
ขา 38 คือ GPIO20
ขา 40 คือ GPIO21

สำหรับการเชื่อมต่อใช้งานขา GPIO จะใช้ Jumper Wires Cable “Female Cable” สวมเข้ากับขา GPIO เพื่อส่งและรับสัญญาณ Digital เช่นนั้น จะต้องมีการเขียนโปรแกรมเพื่อควบคุมขา GPIO เพื่อส่งและรับสัญญาณในคำสั่งต่าง ๆ โดยการเขียนโปรแกรมนั้น สำหรับผู้เริ่มเขียนโปรแกรม ควรใช้โปรแกรมที่ใช้งานง่ายไม่ซับซ้อน เพื่อฝึกหัดควบคุมขา GPIO บนบอร์ด RPI ซึ่งโปรแกรมการสร้างโปรแกรมควบคุมขา GPIO ก็คือโปรแกรม Python ที่มากับระบบปฏิบัติการ Raspbian

ตัวอย่างการเขียนโปรแกรมเบื้องต้นเพื่อควบคุม Input – Output ของขา GPIO ด้วยภาษา Python

1. เขียนโปรแกรมควบคุมไฟกระพริบ
อุปกรณ์

1. บอร์ด Raspberry Pi 2. บอร์ดทดลอง (Breadboard)
3. ไดโอดเปล่งแสง (Diode LED) 4. ตัวต้านทาน (Resistor) 330 โอห์ม
5. สาย Jumper  
 

ขั้นตอนการต่อวงจร
1. เสียบขา LED (ไดโอดเปล่งแสง) ก่อนอื่นจะต้องหาขาขั้วบวก (+) ของ LED โดยการหาว่าขา LED ข้างใดยาวกว่า ขานั้น คือ ขั้วบวก (+) ส่วนขา LED ที่สั้นกว่า คือ ขั้วลบ (-)

2. นำตัวต้านทาน (Resistor) 330 โอห์ม เสียบเข้ากับขาบวก (+) ของ LED

3. ต่อ Ground ให้กับวงจรไฟกะพริบ โดยใช้ Male Cable (หัวเสียบ) ต่อเข้ากับขาลบ (-) ของ LED

4. นำ Female Cable (หัวสวม) เสียบเข้าที่ขา PIN6 (GROUND) ของขา GPIO

5. ป้อนสัญญาณ Output (สัญญาณดิจิตอล ค่า 0 หรือ 1) โดยใช้ Female Cable สวมเข้ากับขา PIN3 (GPIO2)

6. เสียบ Male Cable ที่เชื่อมต่อขา PIN3 (GPIO2) ต่อเข้ากับขาตัวต้านทาน 330 โอห์ม ถือว่าครบวงจรไฟกะพริบ

ขั้นตอนการเขียนโปรแกรมด้วยภาษา Python
เมื่อเปิดระบบปฏิบัติการ Raspbian ของบอร์ด Raspberry Pi แล้ว ให้คลิกที่ Pi --> Programming --> Thonny Python IDE ซึ่งเป็นโปรแกรมสำหรับเขียนโค้ดคำสั่งด้วยภาษา Python

ระบบจะเปิดหน้าต่าง Thonny Python IDE ขึ้นมาให้เราป้อนคำสั่งหรือพิมพ์ Code เพื่อสร้างโปรแกรมควบคุมวงจร

เริ่มต้นเขียนโปรแกรมเพื่อควบคุมขา GPIO โดยจะต้องทำการเรียกใช้ Library GPIO ก่อน โดยพิมพ์คำสั่ง import RPi.GPIO as GPIO

จากนั้นให้เรียกใช้ Library time เพื่อใช้ในการหน่วงเวลา โดยให้พิมพ์คำสั่ง import time

ตั้งค่าโหมดสำหรับการเรียกใช้งาน PIN ของ GPIO โดยสามารถเรียกใช้งานตามลำดับของขา (PIN) ที่อยู่ในบอร์ด RPI (GPIO.BOARD) หรือเรียกใช้งานตามชื่อของเขานั้นๆ (GPIO.BCM) แต่ในที่นี้จะเรียกใช้งานตามลำดับของขา GPIO (GPIO.BOARD) ซึ่งเป็นวิธีที่ง่ายกว่าและเหมาะสมกับผู้เริ่มต้นใช้งานอีกด้วย โดยพิมพ์คำสั่ง GPIO.setmode(GPIO.BOARD) แต่ถ้าจะใช้วิธีเรียกใช้ตามชื่อของขา GPIO ก็เพียงเปลี่ยนจากคำว่า BOARD เป็น BCM  

            ขั้นตอนต่อไปเป็นการเลือกขาที่จะใช้เป็น Digital Output โดยพิมพ์คำสั่ง GPIO.setup(3GPIO.OUT)
            โดย 3 หมายถึง ขา PIN3 ที่เราได้เชื่อมต่อกับตัวต้านทาน (Resistor) และ GPIO.OUT หมายถึง ให้ขา PIN3 ทำหน้าที่เป็น Digital Output เพื่อส่งสัญญาณดิจิตอลไปยังวงจรไฟกะพริบ

หากต้องการให้วงจรไฟกะพริบทำงานในลักษณะติดและดับวนไปเรื่อยๆ   จะต้องป้อนคำสั่งในการวนลูปไปเรื่อยๆ โดยพิมพ์คำสั่ง while(1) :  หรือ while 1 : หรือ while True :

ภายในคำสั่ง while จะพิมพ์คำสั่งว่า GPIO.output(3,GPIO.HIGH) เพื่อสั่งให้ไฟ LED ติด

จากนั้นพิมพ์คำสั่งหน่วงเวลาเพื่อให้ไฟติดเป็นระยะเวลากี่วินาที โดยพิมพ์คำสั่งว่า time.sleep(1) ตัวเลขในวงเล็บ คือจำนวนวินาทีที่หน่วงเวลา

ต่อไปจะพิมพ์คำสั่งให้ไฟดับ โดยพิมพ์คำสั่งว่า GPIO.output (3,GPIO.LOW)

และหน่วงเวลาให้ไฟดับกี่วินาที โดยพิมพ์คำสั่งว่า time.sleep(1) ให้หน่วงเวลา 1 วินาที

เมื่อพิมพ์คำสั่งเสร็จแล้วให้ทำการ Save โดยเลือกที่ File --> Save แล้วทำการตั้งชื่อไฟล์ในช่อง File Name :  จากนั้นคลิกปุ่ม Save โดยไฟล์ที่บันทึกจะอยู่ในโฟลเดอร์ /home/pi

เมื่อการเขียนโปรแกรมเสร็จเรียบร้อยแล้ว ต่อไปจะเป็นการ Run โปรแกรมเพื่อควบคุมการทำงานวงจรไฟกระพริบ โดยคลิกปุ่ม Run

ผลลัพธ์ที่ได้
ไดโอดเปล่งแสง LED จะติดเป็นเวลา 1 วินาที และดับเป็นเวลา 1 วินาที สลับกันไปเรื่อย ๆ จะเห็นได้ว่าอุปกรณ์ OUTPUT ในที่นี้คือหลอดไฟ LED ซึ่งจะส่งค่า HIGH (ไฟติด) และ LOW (ไฟดับ)

 

2. โปรแกรมเปิดและปิดหลอดไฟ LED ด้วยปุ่ม Push Button
อุปกรณ์

1. บอร์ด Raspberry Pi 2. บอร์ดทดลอง (Breadboard)
3. ไดโอดเปล่งแสง (Diode LED) 4. ตัวต้านทาน (Resistor) 330 โอห์ม
5. สาย Jumper 6. Push Button

การต่อวงจร
1. เสียบ LED บน Breadboard
2. ขา – (สั้น) ของหลอดไฟ LED เสียบเข้ากับช่อง PIN6 (GROUND) ของขา GPIO
3. ขา + ของ LED ต่อเข้ากับตัวต้านทาน 330 โอห์ม
4. ขาอีกข้างของตัวต้านทาน 330 โอห์มเสียบเข้ากับช่อง PIN7 (GPIO4) ของขา GPIO

2. เสียบ Pushbutton บน Breadboard

3. เสียบสาย Jumper ที่ขาข้างหนึ่งของ Pushbutton ต่อเข้ากับขา PIN14 (GROUND) ของขา GPIO
4. เสียบสาย Jumper ที่ขาอีกข้างหนึ่งของ Pushbutton ต่อเข้ากับขา PIN11 (GPIO17) ของขา GPIO

การเขียนโค้ดคำสั่ง

ผลลัพธ์
เมื่อกดปุ่ม Pushbutton ไฟ LED จะติด (HIGH) แต่ถ้าไม่กดปุ่ม Pushbutton ไฟ LED จะดับ (LOW) ซึ่งอุปกรณ์ที่เป็น INPUT คือ  Pushbutton และอุปกรณ์ที่เป็น OUTPUT คือ หลอดไฟ LED

 

ตัวอย่างการเขียนโปรแกรมเบื้องต้นเพื่อควบคุม Input – Output ของขา GPIO ด้วยภาษา Scratch

1. การเปิดหลอด LED

อุปกรณ์

1. บอร์ด Raspberry Pi 2. บอร์ดทดลอง (Breadboard)
3. ไดโอดเปล่งแสง (Diode LED) 4. ตัวต้านทาน (Resistor) 330 โอห์ม
5. สาย Jumper  
 

ขั้นตอนการต่อวงจร

1. นำหลอด LED มาเสียบเข้าที่ Breadboard โดยขั้วบวกขั้วลบจะอยู่คนละแถว เราจะสังเกตได้จาก ถ้าขายาวจะเป็นขั้วบวก ขาสั้นจะเป็นขั้วลบ

2. นำตัวต้านทานมาเสียบเข้าแถวเดียวกับขั้วบวก (ขายาว) ของหลอดไฟ LED

3. นำสาย Jumper ตัวผู้-ตัวเมีย โดยเอาด้านตัวผู้มาเสียบเข้าที่ช่องแถวเดียวกับขั้วลบของหลอด LED จากนั้นเอาด้านตัวเมียเสียบเข้าขา PIN6 (Ground) ของบอร์ด Raspberry Pi

4. นำสาย Jumper ตัวผู้-ตัวเมีย โดยเอาด้านตัวผู้เสียบเข้าช่องแถวเดียวกับตัวต้านทานเพื่อรับกระแสไฟเข้าสู่หลอดไฟ LED แล้วเอาด้านตัวเมียเสียบเข้าที่ช่อง GPIO Input/Output ในที่นี้จะเสียบเข้ากับขา PIN29 (GPIO5)

การเขียนโค้ดคำสั่ง

1. เข้าสู่โปรแกรม Scratch 2 โดยไปที่ RasPi => Programming => Scratch 2

จะได้เข้าสู่หน้าต่างโปรแกรม Scratch 2 ดังรูป

2. เรียกใช้ไลบรารี GPIO ไปที่แท็บ Scripts => More Blocks => Add an Extension

เลือก Pi GPIO แล้วกดปุ่ม OK

 

จะได้ คำสั่ง GPIO ขึ้นมาดังภาพ

3. เพิ่ม Sprites เพื่อสร้างปุ่มกด โดยไปที่ New Sprite

เลือกรูปปุ่มที่ต้องการ แล้วกด OK

จะได้ Sprites เพิ่มขึ้นมา 1 ตัวละคร

4. เลือก Sprites button1 เพื่อเขียนคำสั่งเข้าไป

เขียนคำสั่งโดยลากบล็อก

5. เลือก Sprites Cat1 เพื่อเขียนคำสั่งเข้าไป

6. เขียนคำสั่งโดยลากบล็อก

ผลลัพธ์

เมื่อคลิกปุ่ม Button1 ตัวละครจะเดินหน้า 10 ก้าว หลอดไฟ LED ก็จะติด หลังจากนั้นทำการหน่วงเวลา 10 วินาที หลอดไฟ LED ก็จะดับ ถ้ามีการคลิกเมาส์ ตัวละครจะกลับไปยังตำแหน่ง x = -185, y = -70


2. การทำสัญญาณไฟจราจร

อุปกรณ์

1. บอร์ด Raspberry Pi 2. บอร์ดทดลอง (Breadboard)
3. ไดโอดเปล่งแสง (Diode LED) 4. ตัวต้านทาน (Resistor) 330 โอห์ม
5. สาย Jumper  
 

ขั้นตอนการต่อวงจร

1. นำหลอด LED สีแดง สีเหลือง และสีเขียว อย่างละ 1 หลอดมาเสียบเข้าที่ Breadboard โดยให้ขั้วบวกและขั้วลบอยู่คนละแถวกัน (ขายาวจะเป็นขั้วบวก ขาสั้นจะเป็นขั้วลบ)

2. นำตัวต้านทานมาเสียบเข้าแถวเดียวกันกับขั้วบวกของหลอด LED

3. นำสาย Jumper ตัวผู้-ตัวเมีย โดยเอาด้านตัวผู้มาเสียบเข้าที่ช่องแถวเดียวกับขั้วลบ (ขาสั้น) ของหลอด LED จากนั้นเอาด้านตัวเมียเสียบเข้าขา GPIO Input/Output (ในที่นี้จะเสียบเข้ากับขา PIN11 (GPIO17), PIN13 (GPIO27), PIN15 (GPIO22) ตามลำดับ)

คลิกที่ Sprite แล้วลากบล็อกคำสั่ง ดังรูป

ผลลัพธ์

เมื่อคลิกรูปธงเขียว หลอดไฟ LED สีเขียวจะติดเป็นเวลา 1 วินาที หลังจากนั้นหลอดไฟ LED สีแดงจะติดเป็นเวลา 1 วินาที และหลอดไฟ LED สีเหลืองจะติดเป็นเวลา 1 วินาที วนไปเรื่อยๆ

 

3. การสร้างเกมลิงเก็บกล้วย

อุปกรณ์

1. บอร์ด Raspberry Pi 2. บอร์ดทดลอง (Breadboard)
3. 5. ปุ่มกด Pushbutton 4. ตัวต้านทาน (Resistor) 330 โอห์ม
5. สาย Jumper  
 

ขั้นตอนการต่อวงจร

1. นำปุ่มกด Pushbutton 2 ปุ่มมาเสียบเข้าใน Breadboard

2. ใช้สาย Jumper แบบตัวผู้-ตัวเมีย 1 เส้น เสียบจาก PIN6 (Ground) ของบอร์ด Raspberry Pi มายังช่องใดก็ได้ในแถว – ของ Breadboard

3. ใช้สาย Jumper แบบตัวผู้-ตัวผู้ เสียบจากขาด้านหนึ่งของปุ่ม Push Button ไปยังช่องใดก็ได้ในแถว – ของ Breadboard (ทำเหมือนกันทั้ง 2 ปุ่ม)

4. นำสาย Jumper ตัวผู้+ตัวเมีย มาเสียบแถวเดียวกับปุ่มกด Pushbutton อีกขาที่ยังว่างอยู่ เชื่อมต่อไปยังขา PIN3 (GPIO2) และ PIN5 (GPIO3) ของบอร์ด Raspberry Pi ตามลำดับ

การเขียนโค้ดคำสั่ง

1. สร้างฉากพื้นหลังให้กับเกม โดยไปที่ Stage แล้วคลิกที่ปุ่ม Choose backdrop from library

เลือกพื้นหลังที่ต้องการ แล้วกด OK

จะได้พื้นหลังที่เลือกมา ดังรูป

2. สร้างตัวละครใหม่ โดยคลิกที่ New sprite

เลือกตัวละครที่เป็นรูปลิงที่ชื่อว่า Monkey2 แล้วกด OK

จะได้ตัวละครเพิ่มขึ้นมา จากนั้นให้ลบตัวละคร Cat1 ทิ้งไป

3. สร้างตัวละครขึ้นมาอีก 1 ตัว โดยไปที่ New sprite

เลือกตัวละครที่เป็นรูปกล้วย แล้วกด OK

จะได้ตัวละคร 2 ตัว ดังรูป

4. สร้างฉากพื้นหลังใหม่ขึ้นมาอีก 1 ฉาก เพื่อสร้างเป็นฉากจบเกม โดยไปที่ Stage แล้วคลิกที่ปุ่ม Choose backdrop from library แล้วเลือกภาพพื้นหลังที่ต้องการ

5. พิมพ์ข้อความเข้าไปในฉากพื้นหลังตอนจบว่า “Game over” โดยไปที่เครื่องมือ Text

6. เลื่อนตำแหน่งข้อความมาไว้ตรงกลางฉาก โดยคลิกที่เครื่องมือ Select แล้วเลือกกล่องข้อความ

7. เริ่มเขียนโปรแกรม โดยเรียกใช้ไลบรารี GPIO ขึ้นมาใช้งาน โดยไปที่ Scripts => More Blocks => Add an Extension

เลือก Pi GPIO แล้วกดปุ่ม OK

จะได้ คำสั่ง GPIO ขึ้นมาดังภาพ

9. คลิกที่ตัวละคร Monkey2 แล้วลากบล็อกคำสั่ง ดังรูป

จากบล็อกคำสั่ง เป็นการเขียนคำสั่งเชื่อมต่อกับขา GPIO กับบอร์ด Raspberry Pi เพื่อรับค่าจากปุ่ม pushbutton 2 ปุ่ม คือ ปุ่มที่ 1 คือ GPIO2 ปุ่มที่ 2 คือ GPIO3 ถ้ากดปุ่มที่เชื่อมต่อกับ GPIO2 จะเคลื่อนที่ไปทางซ้าย ถ้ากดปุ่มที่เชื่อมต่อกับ GPIO3 จะวิ่งไปทางขวา โดยจะเคลื่อนที่วนไปเรื่อยๆ เมื่อมีการกดปุ่ม

10. คลิกที่ตัวละคร Bananas แล้วลากบล็อกคำสั่ง ดังรูป

จากบล็อกคำสั่ง เป็นการเขียนคำสั่ง โดยเมื่อเรากดธงเขียวเพื่อเริ่มเกมจะให้ใช้ฉากพื้นหลัง Blue sky จากนั้นสร้างตัวแปร 2 ตัว ตัวแรก Score เพื่อเก็บคะแนนโดยให้เริ่มจาก 0 คะแนน อีกหนึ่งตัวแปรชื่อ life เพื่อเก็บค่าชีวิตและกำหนดค่าชีวิตเท่ากับ 3 จากนั้นทำการซ่อนตัวละครก่อน ถัดมาเราจะกำหนดตำแหน่งให้กับตัวละครโดยกำหนดให้ตัวละครนั้นสุ่มค่าในแกน x ระหว่าง -210 ถึง 210 ในแกน y กำหนดตำแหน่งที่ y = 200 แล้วให้ตัวละครทำการโคลนนิ่งตัวเองซึ่งก่อนที่ตัวละครจะโคลนนิ่งนั้นให้รอ และสุ่มเวลาในการรอ ประมาณ 0.5 ถึง 1.5 วินาที โดยให้ทำงานวนซ้ำตลอด หลังจากที่ตัวละครโคลนนิ่งแล้วให้แสดงตัวละคร และให้ตัวละครเปลี่ยนตำแหน่ง y ทีละ -10 เพื่อให้ตัวละครเลื่อนลงมาเรื่อยๆตามแกน y หลังจากนั้นเราจะสร้างเงื่อนไข 3 เงื่อนไข เงื่อนไขที่หนึ่งคือ ถ้าตัวละครกล้วยสัมผัสกับตัวละครลิง ให้เปลี่ยนค่า score ทีละ 1 แล้วลบตัวเองทิ้ง เงื่อนไขที่สอง คือถ้าตัวละครกล้วยไม่สัมผัสตัวละครลิงแล้วเลื่อนลงมาจนถึงตำแหน่งที่ y < -120 ให้ลดค่า life ลงทีละ 1 แล้วลบตัวเองทิ้ง เงื่อนไขที่สาม คือ ถ้าค่า life = 0 ให้สลับฉากหลังเป็น Blue sky2 แล้วหยุดการทำงานทั้งหมด

<< Go Back