แนะนำการใช้งาน Arm Mbed CLI 2#

เนื้อหาในส่วนนี้อธิบายขั้นตอนการติดตั้งและใช้งานซอฟต์แวร์ Mbed CLI 2 Tools ซึ่งเป็น Python package (และไม่ใช่ Mbed CLI v1 ดังนั้นรูปแบบของคำสั่งที่ใช้งานจึงต่างกัน) และจะทดลองใช้งานกับระบบปฎิบัติการ Linux เช่น Ubuntu / Debian / Raspbian OS หรือจะใช้ WSL2 / Ubuntu สำหรับ Windows ก็ได้เช่นกัน

รายละเอียดเกี่ยวกับขั้นตอนการติดตั้ง Mbed CLI 2 สามารถดูได้จาก "Mbed CLI 2 Install or Upgrade" และ "Mbed CLI 2 Usage" สำหรับตัวอย่างการใช้คำสั่ง


การติดตั้ง Mbed CLI 2 สำหรับ Linux#

ขั้นตอนแรกให้ผู้ใช้ติดตั้งโปรแกรมที่จำเป็นต้องใช้งานสำหรับ Mbed CLI 2 ตามลำดับต่อไปนี้

 

คำสั่งสำหรับ Bash Shell ในการติดตั้งโปรแกรมสำหรับ Linux / Ubuntu มีดังนี้

$ sudo apt install python3-dev
$ sudo apt install ninja-build cmake tree
$ sudo apt install gcc-arm-none-eabi

จากนั้นให้ลองตรวจสอบเวอร์ชันของโปรแกรม เช่น Python 3 / CMake / Ninja-Build / GNU Arm Embedded Toolchain - Cross Compiler ดังนี้

$ python3 -V
$ cmake --version
$ ninja --version
$ arm-none-eabi-gcc --version

 

ขั้นตอนถัดไปเป็นการคำสั่งเพื่อติดตั้ง Mbed CLI 2 Tools และตรวจสอบเวอร์ชันที่ได้ติดตั้งใช้งาน

$ sudo python3 -m pip install -U intelhex prettytable future
$ sudo python3 -m pip install -U mbed-tools
$ mbed-tools --version

 

ลองมาดูเวอร์ชันของโปรแกรมที่ได้ติดตั้งเพื่อทดลองใช้งาน คือ

  • python 3.8.10
  • cmake version 3.19.8
  • ninja version 1.10.2
  • arm-none-eabi-gcc 10.2.1 20201103
  • mbed-tools version 7.44.0

 

Ubuntu command lines

รูปภาพ: ตัวอย่างการทำคำสั่งใน Bash Shell ของ Ubuntu เพื่อตรวจสอบเวอร์ชันของโปรแกรม

Ubuntu command lines

รูปภาพ: ตัวอย่างการทำคำสั่งเพื่อติดตั้ง Mbed-CLI 2 Tools

 


การติดตั้ง Mbed CLI 2 สำหรับ Windows#

สำหรับผู้ใช้ Windows ถ้าไม่ใช้ Linux ด้วยวิธี WSL2 หรือ Virtual Machine (VM) อีกทางเลือกหนึ่งคือ การดาวน์โหลดและติดตั้งใช้งานซอฟต์แวร์ต่อไปนี้ และนำมาใช้งานร่วมกับ Git Bash / MINGW64

อย่าลืมตั้งค่า System Environment Variables เพื่อระบุ PATH สำหรับโปรแกรมเหล่านี้ เพื่อให้สามารถเรียกใช้งานแบบ Command Line ได้

 

XPack Tools Arm Embedded GCC Toolchain

รูปภาพ: รายการไฟล์สำหรับดาวน์โหลดเพื่อใช้งาน arm-none-eabi-gcc-xpack

 

รูปภาพ: ตัวอย่างการทำคำสั่งใน Git Bash Shell เพื่อตรวจสอบเวอร์ชันของโปรแกรม

 


การสร้างโปรเจกต์ใหม่โดยใช้ Mbed CLI 2#

ถัดไปเป็นตัวอย่างการทำคำสั่งเพื่อสร้างโปรเจกต์ใหม่ โดยตั้งชื่อว่า mbed-os-demo และสาธิตการเขียนโค้ดเพื่อทำให้วงจร LED บนบอร์ดไมโครคอนโทรลเลอร์ เช่น STM32 NUCLEO กระพริบได้

$ mbed-tools new "mbed-os-demo"

คำสั่งนี้จะสร้างไดเรกทอรีใหม่ตามชื่อโปรเจกต์ และจะดาวน์โหลดไฟล์ Mbed repository มาจาก Github ดังนั้นคอมพิวเตอร์ของผู้ใช้จะต้องเชื่อมต่ออินเทอร์เน็ต

เมื่อได้ดาวน์โหลดไฟล์และสร้างโปรเจกต์ใหม่ในไดเรกทอรี mbed-os-demo ได้แล้ว ให้ลองทำคำสั่ง tree เพื่อดูโครงสร้างและรายการไฟล์ (แสดงรายการเฉพาะสองระดับแรก) ภายในไดเรกทอรีดังกล่าว

$ cd mbed-os-demo
$ tree -L 2

Ubuntu command lines

รูปภาพ: ตัวอย่างการทำคำสั่งเพื่อสร้างโปรเจกต์ใหม่ mbed-os-demo

ตัวอย่างข้อความเอาต์พุตจากการทำคำสั่ง tree -L 2 มีดังนี้

.
├── CMakeLists.txt
├── main.cpp
├── mbed-os
│   ├── CMakeLists.txt
│   ├── CONTRIBUTING.md
│   ├── DOXYGEN_FRONTPAGE.md
│   ├── Jenkinsfile
│   ├── LICENSE-apache-2.0.txt
│   ├── LICENSE.md
│   ├── README.md
│   ├── TESTS
│   ├── UNITTESTS
│   ├── cmsis
│   ├── connectivity
│   ├── docker_images
│   ├── docs
│   ├── doxyfile_options
│   ├── doxygen_options.json
│   ├── drivers
│   ├── events
│   ├── extern
│   ├── features
│   ├── hal
│   ├── logo.png
│   ├── mbed.h
│   ├── platform
│   ├── requirements.txt
│   ├── rtos
│   ├── storage
│   ├── targets
│   └── tools
├── mbed-os.lib
└── mbed_app.json

17 directories, 16 files

 

จากรายการไฟล์ จะเห็นได้ว่า มีไฟล์ main.cpp ได้ถูกสร้างมาให้แล้วโดยอัตโนมัติ และให้เปิดไฟล์เขียนโค้ดตามตัวอย่าง โดยจะเลือกใช้บอร์ด STM32 Nucleo เป็นบอร์ดเป้าหมาย เช่น

  • NUCLEO-F446RE
  • NUCLEO-L476RG
  • NUCLEO-L432KC

ข้อดีของบอร์ด STM32 Nucleo คือ การรองรับการอัปโหลดไฟล์แบบ Drag & Drop Device Programming เมื่อเชื่อมต่อบอร์ดกับคอมพิวเตอร์ของผู้ใช้จะมองเห็นเป็น USB Flash Drive

 

#include "mbed.h"
#include "platform/mbed_version.h"

// Note: The LED1 pin on the NUCLEO-L476RG board is PA_5.
DigitalOut led( LED1 ); // use on-board LED (LED1)
// see: https://os.mbed.com/docs/mbed-os/latest/apis/digitalout.html

int main() {
   printf( "Hello, Mbed OS!\n" );
   printf( "Mbed version: %d.%d.%d\n",
            MBED_MAJOR_VERSION,
            MBED_MINOR_VERSION,
            MBED_PATCH_VERSION );
   while (1) {
      led  = !led; // toggle the LED output
      printf( "LED: %d\n", (int)led.read() ); // read LED state
      ThisThread::sleep_for( 500ms ); // sleep for 500 msec
   }
   return 0;
}

 

ถัดไปให้ตรวจสอบเวอร์ชันของ CMake ที่ใช้งานจริง กับเวอร์ชันต่ำสุดที่มีการระบุไว้ในไฟล์ ./CMakeLists.txt และ ./mbed-os/CMakeLists.txt ภายในไดเรกทอรีของโปรเจกต์
ตัวอย่างเช่น มีการระบุเวอร์ชันขั้นต่ำสุดเป็ 3.19.0

cmake_minimum_required(VERSION 3.19.0)

ให้กำหนดค่า Baud Rate สำหรับการรับส่งข้อมูลทาง Serial ให้ตรงกับ 115200 (จากเดิมที่มีค่า Default เป็น 9600) ในไฟล์ ./mbed_app.json ดังนี้

{
    "target_overrides": {
        "*": {
            "platform.stdio-baud-rate": 115200,
            "platform.stdio-convert-newlines": true,
            "target.printf_lib": "std"
        }
    }
}

จากนั้นทำขั้นตอน Build Project และจะต้องกำหนดบอร์ดหรือแพลตฟอร์มเป้าหมาย (TARGET) ถ้าเลือกใช้บอร์ด NUCLEO-L476RG | NUCLEO_F446RE | NUCLEO_L432KC ก็ทำคำสั่งตามรูปแบบต่อไปนี้

$ mbed-tools compile -m NUCLEO_L476RG -t GCC_ARM
$ mbed-tools compile -m NUCLEO_F446RE -t GCC_ARM
$ mbed-tools compile -m NUCLEO_L432KC -t GCC_ARM

ไดเรกทอรีที่เป็นเอาต์พุต ซึ่งมีไฟล์ .bin และ .hex สำหรับบอร์ดเป้าหมายคือ ./cmake_build/<TARGET>/develop/GCC_ARM/

แต่ถ้าต้องการคอมไพล์โปรเจกต์ใหม่ทั้งหมด (force rebuild) ให้เพิ่ม --clean ต่อท้ายคำสั่ง

เมื่อได้ไฟล์ .bin แล้ว ก็สามารถนำไปใช้กับบอร์ด STM32 NUCLEO ได้ง่าย โดยสำเนาไฟล์ .bin หรือคลิก Drag & Drop ไปยังไดรฟ์ของบอร์ดดังกล่าวเมื่อเสียบสาย USB เชื่อมต่อกับคอมพิวเตอร์

ในกรณีที่ใช้บอร์ด NUCLEO_F446RE จะมองเห็น USB Flash Drive ตรงกับชื่อ NODE_F446RE

Ubuntu command lines

รูปภาพ: ตัวอย่างการทำคำสั่งคอมไพล์โค้ดในโปรเจกต์ mbed-os-demo

 

ถ้าลองทำคำสั่ง mbed-tools detect (ใน Git Bash for Windows) จะพบว่า มีรายการบอร์ด เช่น NUCLEO-F446RE และหมายเลขพอร์ตที่เชื่อมต่ออยู่

ถ้าทดสอบการทำงานของโปรแกรมที่ได้ แล้วรับข้อความจากบอร์ด NUCLEO (ผ่านทางวงจร ST-LINK/V2 ที่อยู่บนบอร์ด) เช่น ใช้โปรแกรม Arduino IDE - Serial Monitor เปิดรับข้อความจาก Serial COM port (baudrate: 115200) ก็จะมองเห็นข้อความตามตัวอย่างนี้

Ubuntu command lines

รูปภาพ: ตัวอย่างข้อความเอาต์พุตจากบอร์ดไมโครคอนโทรลเลอร์

Ubuntu command lines

รูปภาพ: บอร์ด NUCLEO-F446RE สำหรับการทดลองเขียนโปรแกรม

 


การดาวน์โหลด mbed-os แยกจากโปรเจกต์#

คำแนะนำสำหรับการสร้างโปรเจกต์ใหม่

  • ให้ดาวน์โหลดไลบรารี mbed-os จาก Github (โดยทั่วไปก็เลือกเป็น master branch) มาเก็บไว้ก่อน เป็น local copy ซึ่งจะเก็บไว้ในไดเรกทอรีที่มีชื่อเหมือนกัน
  • สร้างโปรเจกต์ใหม่ในอีกไดเรกทอรี และภายใต้ไดเรกทอรีของโปรเจกต์นั้น ให้ทำคำสั่งเพื่อสร้าง soft-link ไปยัง mbed-os (local copy) จะได้ไม่ต้องดาวน์โหลดจาก URL ที่มีการระบุไว้ในไฟล์ mbed-os.lib (https://github.com/ARMmbed/mbed-os#master)
  • ลองทำคำสั่งเพื่อคอมไพล์โค้ดของโปรเจกต์ ระบุชื่อ Toolchain เช่น -t GCC_ARM และบอร์ดเป้าหมายที่ต้องการใช้งาน เช่น -m NUCLEO_F446RE สำหรับบอร์ด STM32 NUCLEO-F446RE เป็นตัวอย่าง

 

# clone the Github repository into 'mbed-os' (only once)
$ git clone https://github.com/ARMmbed/mbed-os

# create a new project without downloading the 'mbed-os' repository
$ mbed-tools new -c "mbed-led-blink"

# change to the project directory
$ cd "mbed-led-blink"

# create a softlink the local mbed-os repository 
$ ln -s ../mbed-os mbed-os

# compile the project using the specified target board
# and toolchain (e.g. NUCLEO-F446RE board and GCC_ARM)
$ mbed-tools compile -m NUCLEO_F446RE -t GCC_ARM

# upload firmware the target board attached to the host computer
$ mbed-tools compile -m NUCLEO_L432KC -t GCC_ARM --flash

 

Git bash command lines

รูปภาพ: ตัวอย่างการทำคำสั่ง mbed-tools ใน Git Bash Shell for Windows

Git bash command lines

รูปภาพ: ตัวอย่างการทำคำสั่ง mbed-tools ใน Git Bash Shell for Windows

 


การดาวน์โหลดและคอมไพล์โปรเจกต์ตัวอย่างจาก Github#

หากต้องการทดลองคอมไพล์โค้ดโปรเจกต์ตัวอย่างที่มีการใช้ไว้ใน Github เช่น mbed-os-example-blinky ก็ทำคำสั่งตามตัวอย่างดังนี้

$ git clone https://github.com/ARMmbed/mbed-os-example-blinky
$ cd ./mbed-os-example-blinky

# download the mbed-os library from github
$ mbed-tools deploy

ข้อสังเกต: คำสั่ง mbed-tools deploy เป็นการดาวน์โหลดไลบรารีต่าง ๆ และมีการระบุไว้ในไฟล์ .lib ภายในไดเรกทอรีของโปรเจกต์

หรือจะทำคำสั่งแบบนี้ ก็ได้เช่นกัน

$ mbed-tools import https://github.com/ARMmbed/mbed-os-example-blinky
$ cd ./mbed-os-example-blinky

# compile the project using the specified target board
# and toolchain (e.g. NUCLEO-F446RE board and GCC_ARM)
$ mbed-tools compile -m NUCLEO_F446RE -t GCC_ARM

 


กล่าวสรุป#

เราได้เห็นขั้นตอนการติดตั้งและใช้งาน Mbed CLI 2 และโปรแกรมต่าง ๆ ที่เกี่ยวข้อง เพื่อการทำคำสั่งแบบ Command Line เช่น การสร้างโปรเจกต์ใหม่ การคอมไพล์โค้ดในโปรเจกต์ เป็นต้น

 


This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Created: 2021-11-23 | Last Updated: 2021-11-29