2014-08-25

Ubuntu 用指令編譯及上傳 Arduino 程式

阿舍一開漿是用 Arduino 官方提供的 Arduino IDE (整合開發環境) 來寫 Arduino 的程式碼的,不過,阿舍用的不是很順手,然後,雖然,聽說可以在編輯時改用其它編輯器,但是,阿舍懶得去調,所以,還是想要改回直接用 Vim 來寫後,直接自己下指令來編譯及上傳哩 ! 因此,阿舍查了一下.... 嗯 ! 果然是有方法,而且,幾個指令就搞定了哩 ! ... 呵 !

編譯成功的訊息

不過,在開始說明安裝和設定方式前,阿舍要先來講一下有關用指令編譯 Arduino 程式的方法哩 ! 就 Arduino 官方來說,在 Arduino IDE 1.5.x 之後,就會有命令列介面 (CLI) 來提供用指令編輯的方法,但是,目前還是開發版本,所以,阿舍就沒試了哩 ...

然後,在 Arduino 官網上有建議使用一套叫做「Ino」的工具,不過,這個 Ino 是阿舍這二天才看到的,還沒試,所以,阿舍要介紹的並不是這套 Ino,阿舍一直在用的,其實,是一套叫做「Arduino-MK」的工具,雖然,阿舍當初在選擇使用這個 Arduino-MK 的時候,就已經知道它沒在更新了,並且,有了新 fork 一個專案叫做「Arduino-Makefile」,但是,因為 Arduino-MK 安裝容易又阿舍用起來沒出過什麼問題,因此,阿舍就一直都用這個 Arduino-MK 來編譯囉 !

所以,如果你對於已經停止更新的軟體有疑慮的話,那阿舍就不建議安裝來使用哩 ! 但是,如果你和阿舍一樣懶,喔 ! 不 ! 是一樣勇敢的話,那就來試試吧 ! 不過,阿舍可是不掛保證的哩 ! ... ^^!!

首先,請先用下面第一行的指令來安裝 Arduino 的套件,接著,再打下面第二行的指令來安裝 ArduinoMK 套件。

sudo apt-get install arduino

sudo apt-get install arduino-mk

搞定上面這二行指令後,請用指令下面這一行指令來把你的 Ubuntu 使用者帳號加到「dialout」這個群組,這樣把編譯好的程式上傳到 Arduino 的時候才不會有問題。( 下面指令以阿舍的帳號是「arthuryu」為例)

sudo usermod -a -G dialout arthuryu

再來,就要在你的程式碼所在的資料夾裡,新增一個檔名為「Makefile」的檔案,裡面請放進下列文字,然後,把存檔起來就可以了,基本上,如果 Arduino 和 Arduino-MK 套件都是用 apt-get 安裝的話,路徑是都不需要修改的哩 !

  ARDUINO_DIR = /usr/share/arduino
  BOARD_TAG    = uno
  ARDUINO_PORT = /dev/ttyACM*
  ARDUINO_LIBS =
  include /usr/share/arduino/Arduino.mk

而 Makefile 檔案裡,唯一需要修改的,是「ARDUINO_LIBS」這個項目,這個「ARDUINO_LIBS」的項目會隨著你在程式碼裡 Include 了那些程式庫而調整,例如,阿舍在程式中用了控制伺服馬達的「Servo.h」和 使用 I2C 連線的「Wire.h」程式庫 ,這樣,這個 Makefile 就要調成下面這個樣子

 ARDUINO_DIR = /usr/share/arduino
 BOARD_TAG    = uno
 ARDUINO_PORT = /dev/ttyACM*
 ARDUINO_LIBS = Wire
 ARDUINO_LIBS += Wire/utility
 ARDUINO_LIBS += Servo
 include /usr/share/arduino/Arduino.mk

要提醒一下的是,在第二個以上的「ARDUINO_LIBS」項目的等號前都要有加號,也就是要用「+=」才行哩 !

Makefile 搞定後,就可以開始來編譯 Arduino 的程式了,編譯的方式很簡單,只要在程式碼所在的資料夾裡,直接打入「make」指令並執行,接著,就會開始編譯了,如果程式碼有錯的話,會出現如下圖的訊息,如果編譯成功的話,則是會出現如本文上方圖片的訊息哩 ! 要注意的是,執行 make 指令時,預設是會把該資料夾裡的所有 .ino 檔都拿來一起編 (不包含子資料),所以,不需要的 .ino 檔請移走,不然,可能會有錯誤的哩 !

編譯失敗的訊息
在編譯成功後,就可以用「make upload」指令來把編譯好的程式上傳到 Arduino 囉 !  .... ^^=

推薦閱讀


有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁

沒有留言 :

張貼留言

歡迎留言提問和討論 .... 😁