Thanapon Tapala

Backend Developer

Embedded Developer

Smart Farmer

Maker

Thanapon Tapala

Backend Developer

Embedded Developer

Smart Farmer

Maker

Blog Post

[Arduino] สร้าง Custom Library เองใน PlatformIO แบบกากๆ

December 30, 2020 arduino, PlatformIO
[Arduino] สร้าง Custom Library เองใน PlatformIO แบบกากๆ

สวัสดีครับ หลังจากที่ไม่ได้เขียน blog มาประมาณ 2 เดือน พอดีได้ลองไปศึกษาสไตล์การเขียนโปรแกรมมานิดหน่อย ก็เลยอยากจะมาแชร์วิธีการทำ custom library ใน PlatformIO เพื่อให้ project ของเรามีความเป็นระเบียบเรียบร้อยและสวยหรู


โม้ PlatformIO หน่อย

สำหรับท่านใดที่ไม่เคยใช้ PlatformIO หรือยังไม่รู้ว่าคืออะไรไม่ต้องตกใจจะครับ ตัว PlatformIO จริงๆเป็นแค่ extension ตัวหนึ่งใน Visual studio วิธีติดตั้งก็ง่ายมากครับแค่ไปค้นหา extension ใน Visual studio เอ๊งงง…..

ส่วน PlatformIO เป็น extension แต่ไม่ได้เป็น extension กระจอกๆ โดยตัวของมันเองเป็น tools สำหรับให้พวก developer สามารถพัฒนา embedded system ไม่ว่าจะเป็น coding, compile และ upload binary file ไปยังอุปกรณ์ ที่เราใช้ได้

ถ้าเราไปดูใน document ของเขาก็จะเห็นว่า PlatformIO สามารถรองรับ

  • 932 Board ไม่ว่าจะเป็นบอร์ดตระกูล AVR, ARM, ESP
  • 10690 Library ที่จำเป็นๆ มีหมดเช่น Adafruit และต่างๆ

ซึ่งถือว่าพร้อมใช้งานมากครับ ถ้าเทียบกับ ArduinoIDE เพราะเราจำเป็นต้องลง library เยอะแยะ ถ้าหากว่าเราย้ายที่ทำงานบ่อยๆ แต่ปัญหาจะหมดไปเมื่อใช้ PlatformIO เราก็แค่กำหนด lib_deps [Library dependencies] ใน platformio.ini แล้วจากนั้นก็จะสามารถใช้งานได้อย่างไม่ต้องกังวลเรื่องการย้ายเครื่องบ่อยๆ เพราะ PlatformIO จะทำการ sync library เองอัตโนมัติ

อีกทั้ง Visual studio code นั้นจะมี Git version control เพิ่มเข้ามาทำให้สะดวกใช้งานและเทียบการเปลี่ยนแปลงของโค๊ดเราได้และไม่ต้องกลัวโค๊ดหายอีกต่อไปครับ

เริ่มสร้าง Library ของเราดีกว่า

เบื้องต้นหลังจากที่เราทำการสร้าง Project จาก PlatformIO แล้ว Project structure จะได้เป็น

Project structure

เริ่มต้นเราจะต้องเข้าไปสร้าง Library ของเราใน [lib] โดยผมจะตั้งชื่อ folder ว่า calculator หลังจากนั้นทำการสร้างไฟล์ .cpp และ .h ขึ้นมา

โดยภายในไฟล์ calculator.h นั้นเราจะทำการเพิ่มในส่วนของ header และจะสร้าง class ในส่วนของ content นะครับ ซึ่ง Class ของเครื่องคิดเลขที่ผมสร้างก็จะมี method แค่ บวก กับลบแค่นั้นนะครับ ตามสไตล์ library กากๆ

#ifndef CALCULATOR_H
#define CALCULATOR_H
#include <Arduino.h>
class Calculator
{
public:
    Calculator() {}
    int add(int a, int b);
    int minus(int a, int b);
};
#endif

หลังจากเราสร้างไฟล์ header สำหรับให้ไฟล์ main เรียกใช้แล้ว ต่อมาให้เราสร้างไฟล์ source code ของ class ที่เราประกาศไปก่อนหน้านี้ครับ

#include <calculator.h>
int Calculator ::add(int a, int b)
{
    return a + b;
}
int Calculator ::minus(int a, int b)
{
    return a - b;
}

สำหรับการสร้าง library เครื่องคิดเลขสไตล์กากๆ ก็เสร็จแล้วครับส่วนการใช้งานเราก็ต้องกลับมายังไฟล์ main.cpp ซึ่งจะอยู่ใน src/main.cpp โดยจะต้อง include header ของ library เราเข้ามาในไฟล์ main ก่อน แล้วหลังจากนั้น declare class ของ Calculator ซึ่งเราจะสามารถเรียกใช้ method Add กับ Minus ได้นะครับ

#include <Arduino.h>
#include <calculator.h>

Calculator calculator;

void setup()
{
  // put your setup code here, to run once:
  calculator.add(1, 2);
  calculator.minus(2, 1);
}

void loop()
{
  // put your main code here, to run repeatedly:
}

จากนั้นทดสอบ build โปรเจคดูนะครับ ถ้าไม่มี error แสดงว่าผ่านครับโผมมม

เป็นอันว่าจบการสร้าง custom library ฉบับสไตล์กากๆของผมนะครับ สำหรับวันนี้ขอบคุณและสวัสดีปีใหม่ 2021 ครับผม 😉


PlatformIO is a cross-platform, cross-architecture, multiple framework, professional tool for….

https://platformio.org/

PlatformIO Project Structure: Github

https://github.com/toygame/platformio-example.git

Taggs: