บทความ ESPino32 ตอนที่ 3 พื้นฐานการเขียนโปรเเกรม Arduino
บทความ ESPino32 ตอนที่ 3 พื้นฐานการเขียนโปรเเกรม Arduino เป็นบทความที่มีเนื้อหาเกี่ยวกับการพัฒนาโปรแกรมของบอร์ด ESPino32 บนแพลตฟอร์ม Arduino สำหรับผู้เริ่มต้นที่สนใจต้องการทำโครงงานเกี่ยวกับบอร์ดไมโครคอนโทรเลอร์หรือบอร์ด ESPino32 ในบางเหตุการณ์ผู้ใช้งานอาจต้องเจอกับเหตุการณ์หรือโจทย์ต่างๆ เช่น มีแนวคิดที่อยากจะทำระบบเปิด-ปิดไฟอัติโนมัติโดยมีเงื่อนไขคือถ้าแสงสว่างน้อยให้เปิดไฟ แสงสว่างมากให้ปิดไฟ มีแนวคิดที่จะทำระบบสมาร์ทฟาร์มที่สามารถส่งข้อมูลจากเซ็นเซอร์ต่างๆไปยังคราวด์เซิร์ฟเวอร์เพื่อดูสถานะต่างๆที่ต้องการ เป็นต้น แต่ยังไม่สามารถระบุได้ว่าจะเริ่มส่วนไหนก่อนดี ควรมีพื้นฐานด้านใดบ้าง ภายในบทความนี้จึงกล่าวถึงสิ่งที่สมควรรู้เบื้องต้นเพื่อใช้เป็นพื้นฐานสำหรับการพัฒนาโครงงาน

ในบทความนี้ประกอบไปด้วยเนื้อหา 4 ส่วน ประกอบด้วย
– ขั้นตอนการเขียนโปรแกรม
– ภาษา C สำหรับ Arduino
– โครงสร้างของโปรแกรมในการเขียนโปรแกรม Arduino
– ตัวอย่างการอัพโหลดโปรแกรมลงบนบอร์ด ESPino32
*เนื้อหาภายในบทความนี้เป็นเพียงเบื้องต้นเท่านั้น ดังนั้นควรศึกษารายละเอียดของแต่ละขั้นตอนเพิ่มเติม*
ขั้นตอนการเขียนโปรแกรม
สำหรับการเริ่มต้นทำโครงงานอย่างใดอย่างหนึ่ง หากทำเกี่ยวข้องกับการใช้งานบอร์ดไมโครคอนโทรเลอร์หรือบอร์ด ESPino32 สิ่งที่หลีกเลี่ยงไม่ได้คือการเขียนโปรแกรม ไม่ว่าจะเป็นภาษาคอมพิวเตอร์ใดๆ จะมีขั้นตอนมาตรฐานสำหรับการเขียนโปรแกรม ดังนี้

1) กำหนดและวิเคราะห์ปัญหา
ขั้นตอนกำหนดและวิเคราะห์ปัญหาเป็นขั้นตอนของการวิเคราะห์หาวัตถุประสงค์ของโครงงานที่เราสนใจ สำหรับแบ่งออก 2 ส่วน คือ
1.1) ส่วนของโปรแกรม
– กำหนดขอบเขตของโปรแกรม (กำหนดฟังก์ชัน, หาตัวแปรที่ใช้)
– กำหนดอินพุตและเอาต์พุตของโปรแกรม
– กำหนดขั้นตอนการทำงานของโปรแกรม
1.2) ส่วนของอุปกรณ์ฮาร์ดแวร์
– กำหนดอุปกรณ์ที่จำเป็นต้องใช้ (เซ็นเซอร์ วงจร และบอร์ดไมโครคอนโทรเลอร์)
– กำหนดบรรจุภัณฑ์สำหรับใส่ชิ้นงาน
– กำหนดแหล่งจ่ายพลังงานที่เหมาะสม
– กำหนดการติดตั้งและการดูแลรักษา
2) การเขียนผังงานของโปรแกรม
การเขียนผังงานของโปรแกรมเป็นที่ขั้นตอนที่แสดงแผนผังการทำงานของระบบโครงงานที่เราสนใจ หรือแสดงขั้นตอนการทำงานของโปรแกรมโดยมีสัญลักษณ์พื้นฐานคอยกำกับกระบวนการต่างๆ


3) การเขียนโปรแกรม
การเขียนโปรแกรม เป็นขั้นตอนที่ใช้งานชุดคำสั่งต่างๆของภาษาคอมพิวเตอร์ เพื่อใช้ในการกำหนดการทำงานตามขั้นตอนการทำงานของโปรแกรม
4) การทดสอบและแก้ไข
การทดสอบและแก้ไขเป็นขั้นตอนสำหรับแก้ไขข้อผิดพลาดของโปรแกรมที่มาจาก Syntax ของภาษาคอมพิวเตอร์หรือมาจากข้อผิดพลาดทางตรรกกะ
5) การจัดทำเอกสารประกอบ และการบำรุงรักษาโปรแกรม
การจัดทำเอกสารประกอบ และการบำรุงรักษาโปรแกรม เป็นขั้นตอนสุดท้ายสำหรับการพัฒนาโปรแกรมที่ทำให้โปรแกรมสามารถใช้งานได้อย่างมีประสิทธิภาพ สามารถแบ่งออกเป็น 2 แบบคือ คู่มือการใช้ และ คู่มือสำหรับผู้พัฒนาโปรแกรม
ภาษา C สำหรับ Arduino
การเขียนโปรแกรมในแพลตฟอร์ม Arduino จะใช้ภาษาที่มีโครงสร้างใกล้เคียงกับภาษา C มาตรฐาน และมีคำสั่งเฉพาะสำหรับใช้งานบอร์ดที่อยู่ในแพลตฟอร์ม Arduino เพื่อให้ผู้เขียนโปรแกรมเข้าใจได้ง่ายขึ้น สิ่งที่ควรทราบโดยเบื้องต้นมีดังนี้
ตัวแปร
ตัวแปร หมายถึง กลุ่มของตัวเลข ตัวอักษร หรือเครื่องหมายอื่นๆที่ใช้สำหรับเป็นตัวแทนของค่าข้อมูลต่างๆที่จะอ้างอิงในโปรแกรม ชนิดของตัวแปรที่นิยมใช้งาน ได้แก่
– char ใช้สำหรับเก็บข้อมูลที่เป็นตัวอักษร
ตัวอย่าง
char c; // ประกาศตัวแปร c ชนิด character char c = 'a'; // ประกาศตัวแปร c char ให้มีค่าเท่ากับ 'a' char foo(char bar) // character ฟังก์ชัน { return bar; }
– int ใช้สำหรับเก็บข้อมูลที่เป็นตัวเลขจำนวนเต็ม
ตัวอย่าง
int number; // ประกาศตัวแปร number ชนิด integer int number = 20; // ประกาศตัวแปร number ชนิด integer ให้มีค่าเท่ากับ 20 int foo(int bar) // integer ฟังก์ชัน { return bar; }
– float ใช้สำหรับเก็บข้อมูลที่เป็นเลขทศนิยม
ตัวอย่าง
float number; // ประกาศตัวแปร number ชนิด floating point float number = 11.12; // ประกาศตัวแปร number ชนิด floating point ให้มีค่าเท่ากับ 11.12 float foo(float bar) // float ฟังก์ชัน { return bar; }
– Boolean ใช้สำหรับเก็บข้อมูลที่เป็นตรรกกะ
ตัวอย่าง
bool flag; // ประกาศตัวแปร flag ชนิด Boolean bool flag = true; // ประกาศตัวแปร flag ชนิด Boolean ให้มีค่าเท่ากับ true bool foo(bool bar) // Boolean ฟังก์ชัน { return bar; }
– String ใช้สำหรับเก็บชุดข้อมูลตัวอักษร
ตัวอย่าง
String text; // ประกาศตัวแปร text ชนิด String String text = "Hello"; // ประกาศตัวแปร text ชนิด String ให้มีค่าเท่ากับ "Hello" String foo(String bar) // String ฟังก์ชัน { return bar; }
– อื่นๆ
การตรวจสอบเงื่อนไข
การตรวจสอบเงื่อนไข คือการกำหนดเงื่อนไขให้กับโปรแกรมให้ทำงานตามที่เราต้องการ ตัวอย่างเงื่อนไขที่นิยม ได้แก่
– if ใช้สำหรับตรวจสอบเงื่อนไข เพื่อให้โปรแกรมเลือกทำงานหากเงื่อนไขนั้นเป็นจริง

– if…else ใช้สำหรับตรวจสอบเงื่อนไข เพื่อให้โปรแกรมเลือกทำงานหากเงื่อนไขนั้นเป็นจริง หากเงื่อนไขแรกไม่เป็นจริงให้ตรวจสอบเงื่อนไขถัดไป

– for ใช้สำหรับคำสั่งที่ต้องการวนรอบการทำงานของโปรแกรมหลายๆรอบ โดยที่ผู้ใช้สามารถกำหนดจำนวนรอบการทำงานได้

– while ใช้สำหรับคำสั่งที่ต้องการวนรอบการทำงาน หากเงื่อนไขนั้นเป็นจริง

– อื่นๆ
ฟังก์ชัน
ฟังก์ชันคือ โปรแกรมที่เขียนขึ้นมาเพื่อกระทำการอย่างใดอย่างหนึ่งซึ่งอาจจะเป็นฟังก์ชันที่มีอยู่ในภาษา Cฟังก์ชันที่มี Arduino หรือฟังก์ชันที่ผู้ใช้งานกำหนดขึ้นมาเอง
ตัวอย่างฟังก์ชันใน Arduino นิยมได้แก่
* Digital I/O
– digitalRead()
– digitalWrite()
– pinMode()
* Analog I/O
– analogRead()
– analogWrite()
* Time
– delay()
– delayMicroseconds()
– micros()
– millis()
* ฟังก์ชันอื่นๆ (ดูเพิ่มเติมได้จาก arduino.cc)
คีย์เวิร์ดภาษา C
คีย์เวิร์ดภาษา C หรือ คำสงวนในภาษา C คือชุดคำสั่งต่างๆที่มีอยู่แล้วในภาษา C ผู้ใช้งานไม่สามารถตั้งชื่อตัวแปรหรือฟังก์ชันให้ตรงกับคำสงวนเหล่านี้ คำสงวนในที่นี้ได้แก่
คําสงวนที่เป็น Constant ของ Arduino
HIGH LOW INPUT OUTPUT SERIAL DISPLAY PI
HALF_PI TWO_PI LSBFIRST MSBFIRST CHANGE FALLING
RISING false true null
คําสงวนที่เป็น Port Variables & Constants ของ Arduino
DDRB PINB PORTB PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7
DDRC PINC PORTC PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7
DDRD PIND PORTD PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7
คําสงวนที่เป็น Datatypes ของ Arduino
boolean byte char class default do double int long
private protected public return short signed static switch throw
try unsigned void
คําสงวนที่เป็นคําสั่ง ของ Arduino
abs acos += + [] asin =
atan atan2 &| boolean byte case ceil
char class , // ?: sin cos
{} — default delay delayMicroseconds
/ /** . else == exp false
float floor for < <= if ++
!= int << log && ! |
loop max millis min – % /*
* new null () PI return >>
; Serial Setup sq sqrt -= switch
tan this true void while begin read
print println constrain digitalWrite digitalRead
analogRead analogWrite attachInterrupts detachInterrupts
beginSerial serialWrite serialRead serialAvailable printString
printInteger printByte printHex printOctal printBinary
printNewline pulseIn shiftOut available write writeln
โครงสร้างของโปรแกรมในการเขียนโปรแกรม Arduino
โครงสร้างของโปรแกรมในการเขียนโปรแกรม Arduino สามารถแบ่งออกเป็น 3 ส่วน ได้แก่ Header, setup() และ loop() ดังรูป ตัวอย่าง Sketch Program ใน Arduino IDE

สำหรับโครงสร้างของโปรแกรม Arduino มีรายละเอียดดังนี้
– Header เป็นส่วนแรกของโปรแกรมที่ถูกเรียกใช้งานจึงเป็นส่วนของโปรแกรมที่ใช้สำหรับเรียกใช้งานไลบรารี่ ประกาศตัวแปร กำหนดค่าของตัวแปร เป็นต้น

– setup() เป็นฟังก์ชันบังคับสำหรับโปรแกรมที่พัฒนาด้วย Arduino IDE ฟังก์ชันนี้จะทำงานหลังจากทำงานในส่วนของการประกาศตัวแปร หรือเรียกใช้ไลบรารี่ในส่วน Header สำเร็จ ฟังก์ชันนี้จะทำงานเพียงครั้งเดียวจนกว่าจะมีการรีเซ็ตหรือจ่ายไฟให้บอร์ดใหม่อีกครั้ง ดังนั้นส่วนใหญ่จึงใช้สำหรับกำหนดโหมดการทำงานของขา GPIO กำหนดอัตราเร็ว Baud rate สำหรับสื่อสารกับอุปกรณ์อื่นๆ เป็นต้น

– loop() เป็นฟังก์ชันบังคับสำหรับโปรแกรมที่พัฒนาด้วย Arduino IDE ฟังก์ชันนี้จะทำงานหลังจากฟังก์ชัน setup() ฟังก์ชันนี้จะวนรอบทำงานแบบไม่รู้จบ ตัวอย่างการใช้งานเช่น วนรอบตรวจสอบการกดสวิตซ์วนรอบนับจำนวนจากการอ่านค่าเซ็นเซอร์นับจำนวน วนรอบสั่งงานสถานะขา GPIO ของบอร์ด ESPino32 เป็นต้น

ตัวอย่างการอัพโหลดโปรแกรมลงบนบอร์ด ESPino32
1. เปิดตัวอย่างโปรแกรมไฟกระพริบ File > Example > 01.Basics > Blink

2. เลือกบอร์ดที่ใช้โดยกด Tools > Board > ThaiEasyElec’s ESPino32

3. เลือก Com Port ที่ต่อกับบอร์ด ESPino32 โดยกด Tools > Port > COMXXX

4. กดปุ่ม Upload แล้วรอจนอัพโหลดโปรแกรมสำเร็จ

อัพโหลดโปรแกรมสำเร็จ
สำหรับบทความ ESPino32 ในตอนที่ 3 พื้นฐานการเขียนโปรแกรม Arduino เป็นบทความที่นำเสนอพื้นฐานต่างๆ ที่ควรรู้สำหรับผู้เริ่มต้น ซึ่งนอกจากพื้นฐานเบื้องต้นจากที่ได้ระบุในบทความแล้ว ผู้ใช้งานควรมีพื้นฐานการต่อวงจรไฟฟ้าเบื้องต้น เพื่อประยุกต์การเขียนโปรแกรมบนบอร์ด ESPino32 ให้สามารถใช้งานร่วมกับอุปกรณ์ภายนอกหรือเซ็นเซอร์อื่นๆ ต่อไป
ขอขอบคุณข้อมูลอ้างอิงจาก
– https://www.arduino.cc/reference/en/