出自 Arch Linux 中文维基

Arduino 是一款便捷靈活、方便上手的開源電子原型平台。它適用於藝術家,設計師,業餘愛好者以及任何對創建交互式對象或環境感興趣的人。

在連接並完成配置後,用戶可以通過建立好的串行接口進行多種讀寫操作。例如,可以使用串行監視器操控 UART 或是對微控制器進行編程。編程,編譯及上傳程序需要用到官方 Arduino IDE,可通過官方軟體源獲得。另外,用戶也可以自行選擇編譯器和編程器對微控制器進行編程。

安裝

  • 需要官方 CLI 請安裝 arduino-cli,需要新的 2.x 版本官方 IDE 請安裝 arduino-ide
  • 啟用到設備的[#訪問串口|用戶訪問權限]]。
  • 你可能需要加載 cdc_acm 模塊。

Arduino IDE 1.x

以下部分只適用於 1.x 版本的 IDE。不過,可能也有部分內容可用於新 IDE。

AVR 開發板

要使用Arduino Uno等AVR板,您可以選擇安裝 arduino-avr-core,以使用Arch Linux上游avr-gcc代替捆綁的舊版avr-core。如果您仍然想使用較舊的arduino-core,則需要將它安裝在arduino的開發板管理器中[1]。您始終可以在「工具>面板」菜單中的不同內核之間切換。

Pinoccio Scout

Pinoccio Scouts[失效連結 2024-01-13 ⓘ] 也可以使用Arduino IDE編寫程序。可以在這裡[失效連結 2024-01-13 ⓘ]找到相關介紹。 此外你可以通過AUR來安裝arduino-pinoccioAUR

Intel Galileo

要將Intel Galileo開發板與Arch Linux一起使用,請安裝Arduino IDE,然後通過「工具->板->板管理器」下載Galileo工具包。 修復安裝問題,請訪問github

Arduino IDE 1.x 或 2.x

以下內容應同時適用於兩個版本的 IDE。

AVR 開發板

AVR 開發板在 2.x 版本的 IDE 上應已自動安裝,但在 1.x 和 2.x 版本上都可以通過開發板管理器管理 AVR 開發板。

SparkFun

如果要使用 Pro Micro 等 SparkFun 開發板,需要先下載開發板定義。更多信息請參考這裡這裡

RedBear Duo

你可能需要安裝 perl-archive-zip,否則可能會出現 crc32 缺失錯誤。

配置

大多數 Arduino 開發板都提供了 USB 接口,以提供串行連接對開發板進行編程。然而,多數 Arduino 開發板使用的微控制器缺乏內置 USB 接口,因此板上通常會使用 USB 轉串行晶片來連接 USB 接口和微控制器。

為了通過 USB 傳輸串行信號,大部分官方 Arduino 開發板會使用一顆額外的 ATmega 微控制器(例如 ATmega16U2),或是使用 FTDI USB UART 轉換器(如 FT232RL)。這兩者都會將自身註冊為 ACM 設備,因此 Linux 將會使用到 cdc_acm 內核模塊。這一類的 Arduino 開發板會在系統中顯示為 /dev/ttyACMx

非官方的 Arduino 開發板通常會在接口晶片上扣成本,將其替換為中國產的 CH340 晶片或其仿冒品。CH340 會將自己描述為 USB 上的 UART 專有傳輸設備,因此 Linux 會使用到 ch341 內核模塊,這一類的開發板在系統中會顯示為 /dev/ttyUSBx。該命名規則可通過 udev 規則進行修改

有些開發板使用的微控制器自帶 USB 接口。無論開發板是否使用獨立的接口晶片,官方開發板出廠都會預裝啟動引導器,引導器會在連接到 USB 時自動建立串行連接。

注意: 類似 Pro Mini 這樣的板子不提供 USB 接口,需要通過外部硬體進行編程。

訪問串口

對於通過 USB 暴露 UART 接口的板子,需要給予用戶串口的讀寫權限 [2]。根據 Udev#Allowing regular users to use devices 的說明,需要創建如下文件:

/etc/udev/rules.d/01-ttyusb.rules
SUBSYSTEMS=="usb-serial", TAG+="uaccess"

重新加載 udev 規則,然後重新連接 Arduino 設備。在上傳程序到 Arduino 前,請確保已在 1.x 的工具菜單和 2.x 的「選擇開發板」選項(位於 IDE 頂部)設置了正確的串行接口、開發板及處理器。

注意: 在上傳代碼時,請確保已關閉所有串行監視器來為編程器釋放串行埠。

stty

設置:

# stty -F /dev/ttyACM0 cs8 9600 ignbrk -brkint -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts

通過終端發送命令,無換行

# echo -n "Hello World" > /dev/ttyACM0
注意: 由於大多數板上默認情況下會激活串行連接上的自動重置功能,因此,如果要使用最後一條命令而不是終端仿真器(arduino IDE,屏幕,picocom ...)直接與您的板通信,則需要禁用此功能。如果您有Leonardo面板,則不必擔心,因為它不會自動重置。如果您有Uno板,請在RESET和GND引腳之間連接一個10 µF電容器。如果有另一塊板,則在RESET和5V引腳之間連接一個120歐姆的電阻。 有關更多詳細信息,請參見 https://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection

讀取Arduino發送的信息

$ cat /dev/ttyACM0

Arduino-Builder

本文內容或本節內容已經過期。

原因: 該部分寫於 2.x 版本 IDE 發布前,因此相關功能描述可能有錯。在 GitHub 頁面上 Arduino-Builder 已被標記為過時,並將被 Arduino CLI 替代。 (在Talk:Arduino討論)

您也可以使用arduino-builder命令行工具來構建Arduino的內置例程。 為了使用所提供的arduino-avr-core與上游avr-gccavrdude你需要創建一個小的設置文件:

build.options.json
{
    "fqbn": "archlinux-arduino:avr:uno",
    "hardwareFolders": "/usr/share/arduino/hardware",
    "toolsFolders": "/usr/bin"
}

通過下面的命令來編譯一個內置例程:

$ arduino-builder -build-options-file build.options.json blink.ino

或通過命令行傳遞所有選項:

$ arduino-builder -fqbn archlinux-arduino:avr:uno -hardware /usr/share/arduino/hardware -tools /usr/bin blink.ino

IDE 替代

Arduino-CMake

通過 Arduino-CMake-ToolchainCMake,你可以在命令行下使用多個構建系統來構建 Arduino 固件。CMake 可以讓您使用自己喜歡的工具生成適合您需求的構建系統。它可以生成任何類型的構建系統,從簡單的 Makefile 到 Eclipse,Visual Studio,XCode 等完整項目。

需求:cmake, arduino包組, avr-gcc, avr-binutils, avr-libc, avrdude.

Makefile

除了使用 Arduino IDE,還可以使用其他編輯器搭配上 Makefile。

設置目錄以對Arduino進行編程,然後將 Makefile 複製到該目錄中。可以從該 GitHub 示例獲取 Makefile 的副本。

您必須在此稍作修改以反映您的設置。Makefile應該很容易說明。這是您可能需要編輯的幾行:

PORT = usually /dev/ttyUSBx, where x is the usb serial port your arduino is plugged into
TARGET = your sketch's name
ARDUINO = /usr/share/arduino/lib/targets/arduino

根據您在例程代碼中調用的庫函數,您可能需要編譯庫的某些部分。為此,您需要編輯SRC和CXXSRC以包括所需的庫。

現在,您應該可以make && make upload編譯並上傳您的程序到板子了。

Arduino-mk

arduino-mk 是另一種Makefile方法。它允許用戶使用包含Arduino.mk的本地Makefile。具體用法參見項目頁

對於Arduino 1.5,請嘗試以下本地Makefile(因為Arduino 1.5的庫目錄結構略有不同):

ARDUINO_DIR = /usr/share/arduino
ARDMK_DIR = /usr/share/arduino
AVR_TOOLS_DIR = /usr
AVRDUDE_CONF = /etc/avrdude.conf
ARDUINO_CORE_PATH = /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino
ARDUINO_PLATFORM_LIB_PATH = /usr/share/arduino/hardware/archlinux-arduino/avr/libraries
BOARDS_TXT = /usr/share/arduino/hardware/archlinux-arduino/avr/boards.txt
ARDUINO_VAR_PATH = /usr/share/arduino/hardware/archlinux-arduino/avr/variants
BOOTLOADER_PARENT = /usr/share/arduino/hardware/archlinux-arduino/avr/bootloaders

BOARD_TAG    = uno
ARDUINO_LIBS =

include /usr/share/arduino/Arduino.mk

在某些情況下,您可能需要安裝avr-libcavrdude

Scons

結合使用sconsarscons,可以很容易地從命令行編譯和上傳Arduino項目。 Scons基於python,您將需要python-pyserial才能使用串行接口。安裝python-pyserialscons

這也將同時獲得您需要的依賴項。您還將需要Arduino本身,請參考上所述進行安裝。創建項目目錄(例如test),然後在新目錄中創建arduino項目文件。使用與目錄相同的名稱並添加.ino(例如test.ino)。從arscons獲取SConstruct腳本並將其放在目錄中。大致看一下內容,如有必要,對其進行編輯。這是一個python腳本。根據需要編輯項目,然後運行

$ scons                # This will build the project
$ scons upload         # This will upload the project to your Arduino

PlatformIO

PlatformIO 是一個 python 工具,用於為多個硬體平台構建和上傳程序,在編寫本文時,它支持基於 Arduino/AVR,TI MSP430 和 TI TM4C12x 的開發板。作者計劃在不久的將來添加一個庫功能,該功能允許直接從 GitHub 搜索和導入庫。

安裝

安裝 platformio-core 或 {platformio-gitAUR

使用

一線內容基於官方 PlatformIO 入門指南,展示了如何創建和上傳示例項目。

為 platformio 項目創建一個新文件夾,並進入到目錄內。 然後執行以下命令來為特定開發板初始化項目(此處為 megaatmega2560):

$ pio project init --board megaatmega2560

這將下載所需工具鏈和依賴,並創建 platformio.ini 文件:

platformio.ini
; PlatformIO Project Configuration File
[env:megaatmega2560]
platform = atmelavr
board = megaatmega2560
framework = arduino

創建並將代碼添加到 src/ 目錄下的 main.cpp 文件內,可參考快速入門指南中的示例代碼。

然後編譯代碼並將其上傳到 platformio.ini 中指定的設備上:

$ pio run
$ pio run --target upload

Emacs

當然可以將Emacs配置為IDE。

安裝 emacs-arduino-mode-gitAUR,以便在 emacs 中啟用 arduino-mode

在初始化腳本添加下列內容:

~/.emacs
;; arduino-mode
(require 'cl)
(autoload 'arduino-mode "arduino-mode" "Arduino editing mode." t)
(add-to-list 'auto-mode-alist '("\.ino$" . arduino-mode))

您可以使用 M-x compile make uploadArduino-mk(見上文)來編譯和上傳程序。

參見: [3].

排障

Arduino 設備命名持久化

如果您有多個arduino,您可能已經注意到,它們的名稱 /dev/ttyUSB[0-9] 是按連接順序分配的。在IDE中,這並不是什麼大問題,但是當您編寫了自己的軟體以在後台與arduino項目進行通信時,這可能會很煩人。使用以下udev規則為arduino分配靜態符號連結:

/etc/udev/rules.d/52-arduino.rules
SUBSYSTEMS=="usb", KERNEL=="ttyUSB[0-9]*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="sensors/ftdi_%s{serial}"

您的arduino將以 /dev/sensors/ftdi_A700dzaF 之類的名稱提供。如果您願意,還可以為多個設備分配更有意義的名稱,如下所示:

/etc/udev/rules.d/52-arduino.rules
SUBSYSTEMS=="usb", KERNEL=="ttyUSB[0-9]*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A700dzaF", SYMLINK+="arduino/nano"

這將在 /dev/arduino/nano 中創建到具有指定序列號的設備的符號連結。

您需要將 arduino 拔出並重新插入才能使它生效,也可以運行:

# udevadm trigger

常見的 idVendor/idProduct 對可在發行包中的 /usr/share/arduino/hardware/archlinux-arduino/avr/boards.txt中找到。請注意,其中一些(尤其是 FTDI)並不是Arduino平台所獨有的。使用 serial 屬性是區分各種設備的好方法。

無法開啟串口

在 IDE 啟動時,您可能最初會看到串行埠,但是在上傳固件時,TX/RX 指示燈無任何變化。您可能之前將串口監視器中的波特率更改為了它不喜歡的內容。編輯 ~/.arduino/preferences.txt,將 serial.debug_rate 修改為不同的速度,例如 115200。

使用 Uno/Mega2560

Arduino Uno 和 Mega2560 具有一個板載 USB 接口(Atmel 8U2),用來接收串口數據,因此,在 USB 插入後,可以通過 cdc-acm 內核模塊創建的 /dev/ttyACM0 來訪問它們。

8U2 固件可能需要更新才能方便串行通信,詳細信息可參考 [4],並在回復 #11 中找到修複方法。最早在 Arduino bbs 上有一張圖解釋了如何將 Uno 啟動到 DFU 模式,但現在已進入只讀狀態。如果你沒有查看該圖所需的帳號,可以參考 [5]

您可以通過將 Uno 置於環回模式並在 115200 波特的 arduino 串行監視器中鍵入字符來對 Uno 進行常規功能測試。它應將字符回顯給您。要將其置於環回狀態,請在數字端短接引腳 0->1,並在鍵入時按住復位按鈕或將 GND->RESET 引腳短路。

無法識別中國制廉價 Mega2560 的 USB 連接

試試安裝驅動: i2c-ch341-dkmsAUR

上傳失敗:編程器無響應

將處理器設置從 ATmega328P 更改為 ATmega328P (Old Bootloader)(請參閱Arduino IDE中的「工具」->「處理器」)可能有助於解決上傳失敗的問題。

串口與 brltty 衝突

如果未找到 arduino 的 /dev/ttyUSB* 串口,且在設備已連接時 journal 包含如下內容:

usb 3-1: usbfs: interface 0 claimed by ch341 while 'brltty' sets config #1
ch341-uart ttyUSB0: ch341-uart converter now disconnected from ttyUSB0

你可能需要卸載 brltty。詳細信息參見 [6]

無法上傳到連接中的 Nano RP2040

如果你在上傳時出現:

Failed uploading: uploading error: exit status 1

你沒有進行[#訪問串口]]中的步驟:請跟隨文檔步驟授予用戶串口的讀寫操作權限。

參見