บทความ ESPino32 ตอนที่ 3 พื้นฐานการเขียนโปรเเกรม Arduino

สารบัญ บทความ ESPino32

บทความ ESPino32 ตอนที่ 3 พื้นฐานการเขียนโปรเเกรม Arduino

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

ESPino32 on Arduino Platform

ในบทความนี้ประกอบไปด้วยเนื้อหา 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

ตัวอย่าง Sketch Program ใน Arduino IDE

สำหรับโครงสร้างของโปรแกรม Arduino มีรายละเอียดดังนี้

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

Header

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

Setup function

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

Loop function

ตัวอย่างการอัพโหลดโปรแกรมลงบนบอร์ด ESPino32

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

เปิดตัวอย่างโปรแกรม

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

เลือกบอร์ด ThaiEasyElec’s ESPino32

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

เลือก Com Port ของบอร์ด ESPino32

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


อัพโหลดโปรแกรมสำเร็จ

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

ขอขอบคุณข้อมูลอ้างอิงจาก

– https://www.arduino.cc/reference/en/

สารบัญ บทความ ESPino32