PlatformIO สู่โลกไมโครคอนโทรลเลอร์

.

PlatformIO สู่โลกไมโครคอนโทรลเลอร์

โสรัตย์  อุนหะวรากร

 

                มาทำความรู้จักและทดลองใช้  PlatformIO เครื่องมือพัฒนาซอฟต์แวร์บนระบบสมองกลฝังตัว ที่เข้าใจง่ายแถมดาวน์โหลดมาใช้งานได้กันในบทความนี้กันได้เลย !!

ปัญหาที่อยู่คู่กับการพัฒนาซอฟต์แวร์ของระบบสมองกลฝังตัวมาตลอด มาจากการที่ไมโครคอนโทรลเลอร์แต่ละตระกูลต่างก็มีเครื่องมือเช่น Toolchain, IDE เฉพาะสำหรับตระกูลตัวเองในการใช้งาน ก็จะต้องใช้เวลาเรียนรู้วิธีการและปรับตัวกันอยู่พอสมควร และอาจต้องยุ่งกับการติดตั้งเครื่องมือที่ว่านี้อยู่บ้างบางครั้งเครื่องมือที่ว่าก็อาจจะไม่ฟรีหรืออาจต้องหาคอมพิวเตอร์และระบบปฏิบัติการ (OS) ที่ทำงานด้วยกันได้มาใช้งานหลายคนอาจเคยคิดบ่นในใจว่า “คงจะดีถ้าหากมีเครื่องมือที่ใช้งานได้ง่ายๆใช้ได้กับไมโครคอนโทรลเลอร์ทุกๆตระกูลและขอให้ฟรีด้วย …” นั่นก็บังเอิญเป็นเป้าหมายของโครงการ PlatformIO พอดีเลย (ไชโย)

PlatformIO คืออะไร?

PlatformIO เป็นโครงการโอเพนซอร์สที่มีเป้าหมายคือการสร้างเครื่องมือที่จะช่วยให้การพัฒนาซอฟต์แวร์สำหรับระบบสมองกลฝังตัวทำได้ง่ายและสะดวกขึ้นข้อดีหลักๆของเจ้า PlatformIO ก็คือทุกคนสามารถดาวน์โหลดมาใช้งานได้ฟรีและ PlatformIO ก็ยังสามารถรองรับแพลตฟอร์มและเฟรมเวิร์คยอดนิยมต่างๆเช่นArduino, CMSIS, ESP-IDF, mbed รวมทั้งรองรับไมโครคอนโทรลเลอร์และซิงเกิ้ลบอร์ดตระกูลต่างๆได้หลายร้อยรุ่น

รูปที่ 1

รูปที่1 PlatformIO ใช้งานได้กับแพลตฟอร์ม (Platforms) ซิงเกิ้ลบอร์ด (Boards) และไมโครคอนโทรลเลอร์จากผู้ผลิตรายหลักๆด้วยวิธีการที่ง่ายกว่าเดิม

โดยพื้นฐานแล้ว PlatformIO เป็น Console application ซึ่งสามารถรัน (run) ได้ทั้งบนระบบปฎิบัติการหลักๆอย่าง Mac OS, Linux, และ Windows รวมทั้งการนำไปรันบนคอมพิวเตอร์ชนิด ARM-base เช่น Raspberry Pi, Beaglebone, CubieBoard ก็ทำได้อย่างสบายๆไม่เพียงเท่านั้น PlatformIO ยังสามารถใช้งานกับ IDE หรือเอดิเตอร์ (Editor) ยอดนิยมไม่ว่าจะเป็น PlatformIO IDE for Atom, CLion, Eclipse, Emacs, NetBeans, Qt Creator, SublimeText, VIM, Visual studio code เป็นต้น

PlatformIO สามารถรันได้อย่างอิสระไม่ว่าบนเครื่องเดสก์ทอป/แลบทอปหรือแม้แต่เซิร์ฟเวอร์ที่ไม่มีระบบ X Window ก็ไม่มีปัญหาเนื่องจากสิ่งเดียวที่มันต้องการก็คือ Python จึงทำให้โปรเจคที่สร้างขึ้นด้วย PlatformIO (หรือเรียกแบบเป็นทางการว่า PlatformIO project) สามารถจะถูกย้ายจากคอมพิวเตอร์เครื่องหนึ่งไปทำต่อยังเครื่องอื่นๆได้ง่ายและยังช่วยให้การแบ่งปันไลบรารี (Library), ต่างๆรวมทั้งซอร์สโค้ดระหว่างนักพัฒนาก็พลอยง่ายตามไปด้วยนั่นเอง

แต่ถ้า PlatformIO แบบConsole application หรือ PlatformIO CLI ฟังดูเข้าใจยากเกินไป PlatformIO IDE ก็จะเข้ามาเป็นตัวช่วยได้โดยเจ้า PlatformIO IDE เป็นอีกหนึ่งเครื่องมือในโครงการ PlatformIO เช่นกันโดยเป็นการนำเอา Atom text editor ซึ่งเป็นโครงการโอเพนซอร์สของ GitHub มาเสริมด้วยส่วนปลั๊กอินสำหรับ PlatformIO เข้าไปก็จะช่วยให้ผู้ใช้สามารถทำงานต่างๆผ่านทางส่วนติดต่อกับผู้ใช้ (UI) ที่เข้าใจง่ายและสะดวกยิ่งขึ้น

ข้อดีที่จะได้ตามมาอย่างอัตโนมัติอีกหลายอย่างก็คือความเก่งต่างๆของ Atom text editor เช่น C/C++ Intelligent Code Completion, Code Linter, Cross-Platform build system, Built-in terminal, Serial Port Monitor เป็นต้นโดย PlatformIO IDE สามารถติดตั้งได้ทั้งบน MacOS, Linux และ Windows และสามารถจะดาวน์โหลดมาใช้ได้ฟรีอีกเช่นเคย

รูปที่ 2

รูปที่ 2 รูปร่างหน้าตาของ PlatformIO IDE ที่อยู่บนAtom text editor ของ GitHub

เกริ่นเกี่ยวกับที่มาและความสามารถต่างๆของ PlatformIO กันมาพอสมควรในหัวข้อต่อไปเราจะมาลองติดตั้ง PlatformIO, PlatformIO IDE และทำการทดลองอย่างง่ายๆกันดูบ้างโดยในที่นี้จะเป็นการยกตัวอย่างเฉพาะการติดตั้งบนระบบปฎิบัติการWindows 64-bitเท่านั้น

ติดตั้ง PlatformIO Core

การติดตั้ง PlatformIO Core ลงบนระบบปฏิบัติการ Windows (รวมทั้งบนระบบปฎิบัติการอื่นๆด้วย) นั้นไม่ยุ่งยากเลยครับ

ขั้นแรก ที่จะต้องทำก่อนก็คือติดตั้งPython 2.7.x (เวอร์ชั่นปัจจุบันคือ2.7.13) เนื่องจาก PlatformIO Core ถูกพัฒนาขึ้นจากPython การทำงานของ PlatformIO จึงจำเป็นต้องมีPython 2.7.x ติดตั้งไว้ในคอมพิวเตอร์ด้วยโดยสามารถจะดาวน์โหลดPython 2.7.x ได้จากเว็บไซต์ https://www.python.org/downloads วิธีการติดตั้ง Python ก็ไม่ยากเลยเพียงแต่ค่อยๆอ่านแล้วทำตามคำแนะนำที่จะแสดงขึ้นบนหน้าต่างติดตั้ง (Setup) เท่านั้นจะมีจุดที่สำคัญก็คือตอนที่ติดตั้ง Python อย่าลืมเลือก Add python.exe to Path ด้วย(ดังรูปที่3) เพื่อให้ PlatformIO ทำงานได้ถูกต้องไม่อย่างนั้นก็จะต้องมาจัดการขั้นตอนนี้เองภายหลังหลีกเลี่ยงการปวดหัวแบบไม่จำเป็น

รูปที่ 3

รูปที่3 ในตอนที่ติดตั้งPython อย่าลืมเลือกAdd python.exe to Path ด้วย

ขั้นที่สอง ดาวน์โหลดไฟล์ติดตั้งของ Atom text editor มาก่อนโดยสามารถดูดาวน์โหลดได้จากเว็บไซต์ http://platformio.org/platformio-ide ให้เลือกไฟล์ติดตั้งตามระบบปฏิบัติการที่ใช้งานอยู่แน่นอนว่าในที่นี้ก็คือ Windows 64-bit หลังจากที่ได้ไฟล์ติดตั้งมาแล้วก็ทำการติดตั้งต่อไปได้เลย

เมื่อตอนที่ติดตั้งถ้ามีหน้าต่างข้อความแปลกๆว่า Clang is not installed in your system! แสดงขึ้นบนจอภาพสาเหตุนั้นเกิดจากในการทำงานของ Atom text editor และ PlatformIO IDE จำเป็นต้องใช้เครื่องมือที่ชื่อว่า Clang สำหรับการทำงานของ Intelligent Code Auto-completion ในการทำงานด้วยจึงต้องติดตั้งClang ตามระบบปฎิบัติการที่ใช้อีกเช่นกันก็ให้เลือกคลิกเลือกที่ปุ่มติดตั้ง Clang ซึ่งก็จะพาเราไปยังเว็บไซต์ที่มีคำแนะนำและไฟล์สำหรับติดตั้งClang โดยไฟล์ที่เราจะต้องดาวน์โหลดก็คือ Clang for Windows (64-bit) 

รูปที่ 4

รูปที่4 ในการติดตั้ง Clang for Windows ที่หน้าต่าง Install Options อย่าลืมเลือกที่ตัวเลือก Add LLVM to the system PATH for all users ด้วย

ข้อที่สำคัญในการติดตั้ง Clang for Windows ก็คือที่หน้าต่างInstall Options ให้เลือก Add LLVM to the system PATH for all users (ดังรูปที่4)แล้วรอจนการติดตั้ง Clang เสร็จซึ่งใช้เวลาไม่นานเท่านั้นทุกอย่างก็พร้อมสำหรับใช้งานได้แล้วสำหรับClang ส่วนการติดตั้งAtom text editor หลักๆก็เพียงทำตามคำแนะนำบนหน้าต่างติดตั้งซอฟต์แวร์เท่านั้นเองซึ่งไม่ได้มีจุดที่ยุ่งยากยากดังนั้นจึงจะขอข้ามการอธิบายในส่วนที่ว่านี้ไปเลย

หลังจากติดตั้งเสร็จแล้วให้เปิด Atom text editor ขั้นต่อไปก็เป็นการติดตั้งแพ็คเกจเสริม (package) ของ PlatformIO IDE โดยให้คลิกเลือก Help > Welcome Guide > Install a Package > Open Installer เพื่อเปิดส่วน Package Manager แล้วให้ติดตั้งแพคเก็จ (package) ที่มีชื่อว่า platformio-ide เท่านั้น(ดังรูปที่5) แล้ว PlatformIO IDE ก็จะถูกติดตั้งให้ทันทีที่กดปุ่ม Install

รูปที่ 5

รูปที่ 5 หน้าต่าง Package Manager ของ Atom ให้ติดตั้งแพคเก็จชื่อว่า platformio-ide

รูปที่ 6

รูปที่ 6 รูปร่างหน้าตาของ PlatformIO IDE หลังจากติดตั้งเสร็จเรียบร้อย

ไปทดลองกันต่อเลย !!

หลังจากติดตั้งซอฟต์แวร์ต่างๆกันจนเสร็จเรียบร้อยแล้ว ขั้นต่อไปก็เป็นการทดลองกับฮาร์ดแวร์จริงๆกันบ้าง โดยในบทความนี้เราจะทดลองกับบอร์ดNano32ที่ผลิตขึ้นจากความร่วมมือของ MakerAsia และGravitech Thailand ซึ่งเป็นฮาร์ดแวร์อีกรุ่นที่PlatformIO สามารถรองรับการทำงานด้วย

โดยเราสามารถจะตรวจสอบได้ว่าบอร์ด (Boards) หรือแพลตฟอร์ม (Platforms) ใดบ้างที่ปัจจุบัน PlatformIO รองรับการทำงานโดยให้เปิดหน้าต่าง PlatformIO Home  จากนั้นคลิกที่ปุ่ม Boards หรือ Platforms แล้วพิมพ์ชื่อของบอร์ดหรือแพลตฟอร์มที่ต้องการตรวจสอบลงไปได้เลย(ดังรูปที่8) ส่วนวิธีการต่อบอร์ดNano32 เข้ากับคอมพิวเตอร์เพื่อทดลองก็มีวิธีการง่ายๆอยู่ในรูปที่ 7

รูปที่ 7

รูปที่ 7 การต่อบอร์ด Nano32 เข้ากับคอมพิวเตอร์เพื่ออัพโหลดโปรแกรมและทดลองการทำงาน

รูปที่ 8

รูปที่ 8 สามารถจะตรวจสอบรุ่นของฮาร์ดแวร์ที่PlatformIO สามารถทำงานด้วยได้โดยในรูปจะเห็นได้Nano32เป็นฮาร์ดแวร์อีกรุ่นหนึ่งที่PlatformIO รองรับการทำงาน

สำหรับวิธีการเขียนโปรแกรมโดยใช้ PlatformIO IDE ขั้นแรกให้คลิกที่ปุ่มNew Project บนหน้าต่าง PlatformIO Home (หรือคลิกที่เมนู PlatformIO > Initialize or Update PlatformIO project ก็จะให้ผลเหมือนกัน) จากนั้นให้เลือกชนิดหรือรุ่นของฮาร์ดแวร์ที่ใช้ (Selected board) ในที่นี้ก็จะเลือกเป็น MakerAsia Nano32 แล้วจึงเลือกโฟลเดอร์ที่จะใช้เก็บไฟล์ทั้งหมดในโปรเจค (Choose the directory) แล้วคลิกปุ่ม Process (ดังรูปที่9)

จากนั้น PlatformIO จะจัดการดาวน์โหลดไฟล์ต่างๆที่จำเป็นในการสร้างโปรเจคสำหรับฮาร์ดแวร์ที่เรากำลังใช้อยู่มาไว้ยังคอมพิวเตอร์ให้อย่างอัตโนมัติ (การทำงานในขั้นตอนนี้ของ PlatformIO จำเป็นต้องเชื่อมต่อกับอินเทอร์เน็ตไว้ด้วย)

รูปที่ 9

รูปที่ 9 วิธีการสร้างPlatformIO Project ขั้นแรกให้เลือกรุ่นหรือตระกูลของบอร์ด (choose a board) ก่อนจากนั้นกำหนดตำแหน่งของโฟลเดอร์ที่จะใช้เก็บไฟล์และซอร์สโค้ดต่างๆในโปรเจค (Choose the directory)

หลังจากนั้นให้คลิกขวาที่ตรงโฟลเดอร์srcบนหน้าต่างของ PlatformIO (ดังรูปที่10) เลือกnew fileเพื่อสร้างไฟล์ใหม่โดยเราจะให้ชื่อกับไฟล์นี้ว่า main.cpp ซึ่งจะเป็นซอร์สโค้ดหลักที่ใช้ในการทดลองนี้เนื้อหาของซอร์สโค้ดทั้งหมด อยู่ในตารางที่1โปรแกรมนี้จะสั่งการให้LED ซึ่งอยู่บนบอร์ดNano32 ติดสว่างและดับสลับกันไปในทุกๆ 1 วินาทีพร้อมกับมีการพิมพ์ข้อความออกมาที่พอร์ตอนุกรม (serial port)


/*

* Blink Nano32

* Turns on an LED on for one second,

* then off for one second, repeatedly.

*/

#include <Arduino.h>

#define LED_BUILTIN (16)

void setup()

{

// initialize LED digital pin as an output.

pinMode(LED_BUILTIN, OUTPUT);

Serial.begin(115200);

}

void loop()

{

// turn the LED on (HIGH is the voltage level)

digitalWrite(LED_BUILTIN, HIGH);

// wait for a second

delay(1000);

// turn the LED off by making the voltage LOW

digitalWrite(LED_BUILTIN, LOW);

// wait for a second

delay(1000);

Serial.println(“Hello world :-D”);

}


 

ตารางที่ 1 ซอร์สโค้ดหลักในการทดลองนี้

เมื่อทดลองเขียนเสร็จแล้วก็มาคอมไพล์ (Compile) แล้วทดสอบ

ขั้นต่อไปก็เป็นการคอมไพล์ซอร์สโค้ดหลักให้คลิกที่ไอคอน build  PlatformIO จะทำการคอมไพล์ซอร์สโค้ดภายในโปรเจคซึ่งถ้าหากไม่ติดข้อผิดพลาดอะไรเราก็จะได้ไฟล์นามสกุลbin และelf ออกมาซึ่งเป็นไฟล์ที่ใช้อัพโหลดไปยังบอร์ดNano32

เมื่อผ่านขั้นตอน build มาได้โดยไม่ติดข้อผิดพลาดแล้วถ้าคลิกที่ไอคอน Upload จะเป็นการสั่ง PlatformIO ให้อัพโหลดไฟล์bin ที่ได้มานี้ไปยังบอร์ด Nano32 ในทันที (โดย PlatformIO จะค้นหาให้เองอย่างอัตโนมัติว่า Nano32 ถูกต่ออยู่กับพอร์ตใดของคอมพิวเตอร์และจัดการอัพโหลดไฟล์ให้จนเสร็จ) หลังจากการอัพโหลดเสร็จสิ้นโปรแกรมก็จะเริ่มการทำงานให้เราได้เห็นทันทีโดยในตอนนี้ LED บนบอร์ด Nano32 จะกระพริบติดและดับสลับกันขึ้นมาแล้ว

คราวนี้ถ้าลองคลิกที่ไอคอน Serial Monitor  กำหนดค่า Baud rate ให้ตรงกับในซอร์สโค้ด (115200bps) เราก็จะได้เห็นข้อมูลที่ถูกส่งออกมาจาก Nano32 เป็นข้อความ “Hello world 😀” แสดงขึ้นบนจอภาพทุกๆ1 วินาทีตามซอร์สโค้ดหลักของเรานั่นเอง

รูปที่ 10

รูปที่ 10 สร้างไฟล์ main.cpp ซึ่งจะเป็นซอร์สโค้ดหลักของการทดลองนี้โดยให้คลิกขวาที่โฟลเดอร์ src แล้วเลือก new file จากนั้นให้คัดลอกซอร์สโค้ดในตารางที่ 1 มาวางลงไปในไฟล์ที่สร้างขึ้นนี้

รูปที่ 11

รูปที่ 11 ทดลองใช้ Serial Monitor อ่านค่าข้อมูลที่ถูกส่งออกมาจาก Nano32 (ตามกลไกที่ถูกเขียนไว้ในซอร์สโค้ดหลักนั่นเอง)

นอกจากนั้น PlatformIO ก็ยังมีฟังก์ชั่นพิเศษอื่นๆที่เรียกว่า PlatformIO Plus เช่น PIO Unified debugger, PIO Remote, Cloud IDE และ Local & Remote Unit Test ซึ่งเบื้องต้นสามารถลงทะเบียนเพื่อใช้งานแบบจำกัดเวลาได้นาน30 วันและถ้าต้องการใช้บริการต่อก็จะต้องจ่ายค่าบริการบ้างสำหรับคุณผู้อ่านที่สนใจก็สามารถจะดูรายละเอียดเกี่ยวกับบริการเหล่านี้ได้จากเว็บไซต์ https://pioplus.com/pricing.html ครับ

จากการทดลองที่ได้นำมาเล่าสู่กันทั้งหมดนี้โดยส่วนตัวผู้เขียนเห็นว่า PlatformIO และ PlatformIO IDE เป็นอีกหนึ่งเครื่องมือที่น่าใช้มากทีเดียวและน่าจะช่วยให้คุณผู้อ่านสามารถเขียนโปรแกรมทดลองสร้างโครงงานได้ง่ายและสนุกมากขึ้นสำหรับคุณผู้อ่านที่เริ่มรู้สึกคันไม้คันมือก็อย่ารอช้าครับลงมือสร้างโครงงานเสร็จเมื่อไรก็อย่าลืมเอามาเล่าสู่กันฟังในวารสารเซมิฯบ้างล่ะครับ .

Leave a Comment