การใช้งาน Arduino CLI#
Keywords: Arduino, Arduino CLI
▷ Arduino CLI#
บทความนี้นำเสนอตัวอย่างการใช้โปรแกรม Arduino CLI (Command-Line Interface) โดยปรกติแล้ว การเขียนโปรแกรม Arduino Sketch ผู้ใช้ส่วนใหญ่ ก็จะเลือกใช้ซอฟต์แวร์ Arduino IDE ทั้งแบบ Desktop (offline) และ Cloud-based (online) หรือ VS Code IDE + PlatformIO extension เป็นต้น
Arduino CLI เป็นโปรแกรมอีกตัวเลือกหนึ่ง ที่มีลักษณะการใช้งานแบบ Command-Line Tool สามารถนำมาใช้เพื่อสร้างโปรเจกต์ใหม่ คอมไพล์โค้ดและอัปโหลดไฟล์ไบนารีไปยังบอร์ดไมโครคอนโทรลเลอร์ได้ สามารถค้นหาหรือติดตั้ง Arduino Cores และโปรแกรมต่าง ๆ ที่เกี่ยวข้อง รวมถึงค้นหาและติดตั้งไลบรารีสำหรับ Arduino เป็นต้น
โปรแกรมนี้ใช้ได้กับระบบปฏิบัติการ เช่น Windows, Linux และ Mac OSX เป็นต้น การใช้งานโปรแกรมนี้ ไม่มี GUI และเหมาะสำหรับการเรียกใช้งานใน Terminal หรือ Console หรือแบบรีโมท เช่น ผ่าน Secure Shell หรือเรียกใช้งานแบบ Scripting เพื่อให้ทำงานแบบอัตโนมัติ เมื่อเรียกใช้ไฟล์สคริปต์ที่เกี่ยวข้อง
▷ การติดตั้งและใช้งาน Arduino CLI#
ขั้นตอนการติดตั้งและใช้งาน Arduino CLI สามารถศึกษาได้จาก
https://arduino.github.io/arduino-cli/latest/installation/
สำหรับผู้ใช้ Linux / Ubuntu มีขั้นตอนดังนี้ (ทดลองใช้ Arduino CLI เวอร์ชัน v0.30)
# Install from github
$ curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh
# Update the $PATH variable
$ export PATH="$PATH:`pwd`/bin"
# Show the version of Arduino CLI
$ arduino-cli version
arduino-cli Version: 0.30.0 Commit: 83700ca2
ถ้าต้องการดู Help Messages หรือข้อความแสดงรูปแบบการใช้คำสั่งและตัวเลือกของโปรแแกรม ก็มีตัวอย่างดังนี้
# Show help messages
$ arduino-cli help core
ถ้าใช้ Windows ก็สามารถดาวน์โหลดไฟล์ไบนารี (.exe) มาใช้งานได้ง่าย โดยดาวน์โหลดมาจากไฟล์ .zip
เช่น arduino-cli_latest_Windows_64bit.zip
เมื่อดาวน์โหลดไฟล์ .zip มาแล้วแตกไฟล์ เช่น สร้างเป็นไดเรกทอรีใหม่ชื่อ C:\Tools\arduino_cli-0.30.0
ซึ่งภายในมีไฟล์ arduino_cli.exe
จากนั้นก็ให้ทำคำสั่งใน Windows PowerShell เพื่อเพิ่มรายการไดเรกทอรีสำหรับไฟล์ไบนารี arduino_cli.exe
ตามตัวอย่างดังนี้
$env:Path += ";C:\Tools\arduino-cli_0.30.0"
$env:Path -split ';'
แล้วทำคำสั่งเพื่อเรียกใช้โปรแกรม
▷ ไฟล์สำหรับการตั้งค่าเพื่อใช้งาน#
ก่อนเริ่มต้นใช้งาน แนะนำให้สร้างไฟล์สำหรับตั้งค่าใช้งาน (Configuration File)
ซึ่งเป็นไฟล์แบบ YAML ( "YAML Ain't Markup Language")
ถ้าเป็น Ubuntu Linux ไฟล์นี้จะถูกสร้างขึ้นและเก็บไว้ในไดเรกทอรี $HOME/.arduino15/
ภายใต้ไดเรกทอรีของผู้ใช้ (User's Home Directory)
# Create a config file written to $HOME/.arduino15/arduino-cli.yaml
$ arduino-cli config init
แต่ถ้าเป็น Windows จะได้ไฟล์ "$($env:UserProfile)\AppData\Local\Arduino15\arduino-cli.yaml"
เมื่อทำคำสั่งแล้ว จะได้ไฟล์ใหม่ที่มีชื่อว่า arduino-cli.yaml
และลองแสดงตัวอย่างข้อความในไฟล์ดังกล่าว
(แสดงเฉพาะสองบรรทัดแรก)
# Show the first two lines of $HOME/.arduino15/arduino-cli.yaml
$ cat $HOME/.arduino15/arduino-cli.yaml | head -n 2
board_manager:
additional_urls: []
ถ้าต้องการจะเพิ่มรายการ Arduino Cores เช่น สำหรับบอร์ดไมโครคอนโทรลเลอร์
ESP8266 และ ESP32 มีดังนี้ โดยเพิ่มในส่วนที่มีชื่อว่า
board_manager:
ในห้วข้อย่อย additional_urls:
# Add 3rd party cores
$ nano $HOME/.arduino15/arduino-cli.yaml
board_manager:
additional_urls:
- https://arduino.esp8266.com/stable/package_esp8266com_index.json
- https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
- https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
บันทึกการเปลี่ยนแปลงลงไฟล์ โดยกด Ctrl+o
กด Enter
แล้วกด Ctrl+x
เพื่อจบการทำงานของ nano
จากนั้นให้ทำคำสั่งต่อไปนี้ เพื่ออัปเดตไฟล์ package_xxx_index.json
สำหรับ Ardino Cores
(ไฟล์ที่เกี่ยวข้องจะถูกดาวน์โหลดมาจากอินเทอร์เน็ต ซึ่งดูได้จากข้อความเอาต์พุตเมื่อทำคำสั่ง)
# Update the index files of Arduino cores
$ arduino-cli core update-index
Downloading index: package_index.tar.bz2 downloaded
Downloading index: package_esp8266com_index.json downloaded
Downloading index: package_esp32_index.json downloaded
Downloading index: package_rp2040_index.json downloaded
...
▷ การค้นหาและติดตั้ง Arduino Cores#
ถ้าต้องการดูรายชื่อของ Arduino Cores (พร้อมเวอร์ชันล่าสุด) ที่สามารถเลือกติดตั้งและใช้งานได้ ก็ทำคำสั่งดังนี้
# Search Arduino cores in Boards Managers
$ arduino-cli core search
ID Version Name
arduino:avr 1.8.6 Arduino AVR Boards
arduino:mbed_edge 3.5.4 Arduino Mbed OS Edge Boards
arduino:mbed_nano 3.5.4 Arduino Mbed OS Nano Boards
arduino:mbed_nicla 3.5.5 Arduino Mbed OS Nicla Boards
arduino:mbed_opta 3.5.4 Arduino Mbed OS Opta Boards
arduino:mbed_portenta 3.5.4 Arduino Mbed OS Portenta Boards
arduino:mbed_rp2040 3.5.4 Arduino Mbed OS RP2040 Boards
arduino:megaavr 1.8.8 Arduino megaAVR Boards
arduino:nrf52 1.0.2 Arduino nRF52 Boards
arduino:sam 1.6.12 Arduino SAM Boards (32-bits ARM Cortex-M3)
arduino:samd 1.8.13 Arduino SAMD Boards (32-bits ARM Cortex-M0+)
emoro:avr 3.2.2 EMORO 2560
esp32:esp32 2.0.6 esp32
esp8266:esp8266 3.1.1 esp8266
....
หรือจะใช้คำสั่งเพื่อค้นหาและแสดงรายการตามชื่อของ Arduino Core แบบเจาะจง เช่น
# Search Arduino core for AVR
$ arduino-cli core search arduino:avr
ID Version Name
arduino:avr 1.8.6 Arduino AVR Boards
$ arduino-cli core search arduino:megaavr
ID Version Name
arduino:megaavr 1.8.8 Arduino megaAVR Boards
# Search Arduino core for ESP8266
$ arduino-cli core search esp8266
ID Version Name
esp8266:esp8266 3.1.1 esp8266
# Search Arduino core for ESP32
$ arduino-cli core search esp32
ID Version Name
esp32:esp32 2.0.6 esp32
ถ้าต้องการติดตั้ง Arduino Core และโปรแกรมต่าง ๆ ที่เกี่ยวข้อง
ก็ให้ทำคำสั่ง arduino-cli core install <core>
โดยที่ <core>
หมายถึง ชื่อของ Arduino Core
ตัวอย่างการติดตั้งสำหรับบอร์ด AVR มีดังนี้ (และตัวอย่างข้อความเอาต์พุตเมื่อทำคำสั่ง)
# Install Arduino cores for AVR and corresponding tool dependencies.
$ arduino-cli core install arduino:avr
Downloading packages...
arduino:avr-gcc@7.3.0-atmel3.6.1-arduino7 downloaded
arduino:avrdude@6.3.0-arduino17 downloaded
arduino:arduinoOTA@1.3.0 downloaded
arduino:avr@1.8.6 downloaded
Installing arduino:avr-gcc@7.3.0-atmel3.6.1-arduino7...
arduino:avr-gcc@7.3.0-atmel3.6.1-arduino7 installed
Installing arduino:avrdude@6.3.0-arduino17...
arduino:avrdude@6.3.0-arduino17 installed
Installing arduino:arduinoOTA@1.3.0...
arduino:arduinoOTA@1.3.0 installed
Installing platform arduino:avr@1.8.6...
Configuring platform....
Platform arduino:avr@1.8.6 installed
สำหรับบอร์ด ESP8266 และ ESP32
# Install Arduino cores for ESP32 and ESP8266
$ arduino-cli core install esp32:esp32
$ arduino-cli core install esp8266:esp8266
สำหรับบอร์ด RP2040 (Arduino-Pico core)
$ arduino-cli core install rp2040:rp2040
ถ้าต้องการอัปเดต Arduino Cores ที่ได้ติดตั้งไว้แล้ว ให้เป็นเวอร์ชันล่าสุด ให้ทำคำสั่งต่อไปนี้
# Upgrade one or all installed Arduino cores to the latest version.
$ arduino-cli core upgrade
หรือจะอัปเดตเฉพาะบางรายการ เช่น สำหรับ Arduino Core for ESP32
$ arduino-cli core upgrade esp32:esp32
เมื่อได้ติดตั้ง Arduino Cores ที่ได้เลือกใช้งานแล้ว ถัดไปก็เป็นคำสั่งเพื่อดูรายการบอร์ดไมโครคอนโทรลเลอร์
ที่สามารถเลือกใช้ได้ โดยใช้คำสั่ง
arduino-cli board listall <board>
โดยที่ <board>
หมายถึง ชื่อบอร์ด
และ Arduino จะใช้ชื่อในรูปแบบที่เรียกว่า FQBN (Fully Qualified Board Name)
# List supported Arduino boards and their FQBN strings
$ arduino-cli board listall arduino
หรือเจาะจงเฉพาะบอร์ด arduino:avr
# List only Arduino-AVR boards
$ arduino-cli board listall arduino:avr
Board Name FQBN
Arduino Leonardo arduino:avr:leonardo
Arduino Mega or Mega 2560 arduino:avr:mega
Arduino Micro arduino:avr:micro
Arduino Mini arduino:avr:mini
Arduino Nano arduino:avr:nano
Arduino Pro or Pro Mini arduino:avr:pro
Arduino Uno arduino:avr:uno
Arduino Uno Mini arduino:avr:unomini
Arduino Uno WiFi arduino:avr:unowifi
...
$ arduino-cli board listall arduino:megaavr
Board Name FQBN
Arduino Nano Every arduino:megaavr:nona4809
Arduino Uno WiFi Rev2 arduino:megaavr:uno2018
แสดงรายการบอร์ดไมโครคอนโทรลเลอร์ที่ใช้ชิป ESP32 ของ WeMos Lolin
$ arduino-cli board listall esp32:esp32:lolin
▷ การค้นหาและติดตั้ง Arduino Libraries#
คำสั่งสำหรับค้นหาไลบรารี ตามชื่อที่ระบุ สามารถทำได้ตามตัวอย่างดังนี้ เช่น ค้นหาและแสดงรายการที่มีชื่อเริ่มต้นด้วย
Adafruit
$ arduino-cli lib search --names | grep -P "^Name: \"Adafruit.+\""
Name: "Adafruit 10DOF"
Name: "Adafruit 9DOF"
Name: "Adafruit ADS1X15"
Name: "Adafruit ADT7410 Library"
Name: "Adafruit ADXL343"
Name: "Adafruit ADXL345"
Name: "Adafruit ADXL375"
...
ถ้าจะติดตั้งไลบรารี ก็ให้ทำคำสั่งในลักษณะนี้
arduino-cli lib install <lib>
โดยที่ <lib>
เป็นชื่อไลบรารี
เช่น ติดตั้งไลบรารี Adafruit NeoPixel
▷ การสร้างและคอมไพล์ Arduino Sketch#
เริ่มต้นด้วยการสร้างโปรเจกต์สำหรับ Arduino Sketch เช่น ใช้ชื่อว่า esp32_blink
ซึ่งจะได้ไฟล์ชื่อ ./esp32_blink/esp32_blink.ino
# Set Arduino sketch name
$ SKETCH_NAME=esp32_blink
# Create a new Arduino sketch with the specified name
$ arduino-cli sketch new $SKETCH_NAME
จากนั้นเขียนโค้ดลงในไฟล์ ./esp32_blink/esp32_blink.ino
เช่น
#include <Arduino.h>
void setup() {
Serial.begin( 115200 );
pinMode( LED_BUILTIN, OUTPUT );
}
void loop() {
static uint32_t state = 0;
digitalWrite( LED_BUILTIN, state ^= 1 );
Serial.printf( "LED state: %d", state );
delay(500);
}
แล้วคอมไพล์โค้ด โดยเลือกบอร์ดไมโครคอนโทรลเลอร์เป็น esp32:esp32:lolin32
และให้ไดเรกทอรี build
สำหรับเก็บไฟล์เอาต์พุตที่ได้จากการคอมไพล์โค้ด
$ arduino-cli compile --fqbn esp32:esp32:lolin32 \
--build-path $SKETCH_NAME/build $SKETCH_NAME
เมื่อคอมไพล์ได้สำเร็จแล้ว ลองดูไฟล์เอาต์พุตที่ได้
$ tree -L 2 $SKETCH_NAME/
esp32_blink/
├── build
│ ├── build_opt.h
│ ├── build.options.json
│ ├── compile_commands.json
│ ├── core
│ ├── esp32_blink.ino.bin
│ ├── esp32_blink.ino.bootloader.bin
│ ├── esp32_blink.ino.elf
│ ├── esp32_blink.ino.map
│ ├── esp32_blink.ino.partitions.bin
│ ├── includes.cache
│ ├── libraries
│ ├── libraries.cache
│ ├── partitions.csv
│ ├── preproc
│ └── sketch
├── debug.cfg
├── debug_custom.json
├── esp32_blink.ino
└── esp32.svd
5 directories, 15 files
ถ้าจะอัปโหลดไฟล์เฟิร์มแวร์ไปยังบอร์ด ก็ทำคำสั่งในลักษณะนี้
(ในตัวอย่างได้เลือกใช้พอร์ตหมายเลข /dev/ttyUSB0
ที่เชื่อมต่อกับบอร์ด ESP32)
$ arduino-cli upload -p /dev/ttyUSB0 \
--fqbn esp32:esp32:lolin32 \
--input-dir $SKETCH_NAME/build $SKETCH_NAME
ถ้าใช้ Window PowerShell ก็มีรูปแบบการทำคำสั่งดังนี้
(ในตัวอย่างได้เลือกใช้พอร์ตหมายเลข COM6
ที่เชื่อมต่อกับบอร์ด ESP32)
# Set a variable for the Sketch name
$SKETCH_NAME = "esp32_blink"
# Create a new sketch (but not overwrite)
arduino-cli sketch new $SKETCH_NAME
# Edit the Sketch file (.ino) with notepad.exe
notepad.exe "$SKETCH_NAME/$SKETCH_NAME.ino"
# Compile the sketch
arduino-cli compile --fqbn esp32:esp32:lolin32 `
--build-path $SKETCH_NAME/build $SKETCH_NAME
# Upload the firmware file to the target board
arduino-cli upload -p COM6 `
--fqbn esp32:esp32:lolin32 `
--input-dir $SKETCH_NAME/build $SKETCH_NAME
▷ กล่าวสรุป#
บทความนี้นำเสนอ ตัวอย่างการใช้คำสั่งของ Arduino CLI ในเบื้องต้น สำหรับ Ubuntu Linux และ Windows PowerShell
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
Created: 2023-02-15 | Last Updated: 2023-02-20