Arduino
Arduino 是一款便捷靈活、方便上手的開源電子原型平台。它適用於藝術家,設計師,業餘愛好者以及任何對創建交互式對象或環境感興趣的人。
在連接並完成配置後,用户可以通過建立好的串行接口進行多種讀寫操作。例如,可以使用串行監視器操控 UART 或是對微控制器進行編程。編程,編譯及上傳程序需要用到官方 Arduino IDE,可通過官方軟件源獲得。另外,用户也可以自行選擇編譯器和編程器對微控制器進行編程。
安裝[編輯 | 編輯原始碼]
- 需要 1.x 版本的 IDE 請安裝 arduino包,需要官方 CLI 請安裝 arduino-cli包,需要新的 2.x 版本官方 IDE 請安裝 arduino-ide-binAUR。1.x 版本 IDE 的官方文檔可通過安裝 arduino-docs包 獲取。
- 啟用到設備的[#訪問串口|用户訪問權限]]。
- 你可能需要加載
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 開發板。1.x 版本的相關文檔可在這裏獲取。
SparkFun[編輯 | 編輯原始碼]
如果要使用 Pro Micro 等 SparkFun 開發板,需要先下載開發板定義。更多信息請參考這裏和這裏。
RedBear Duo[編輯 | 編輯原始碼]
你可能需要安裝 perl-archive-zip包,否則可能會出現 crc32 缺失錯誤。
配置[編輯 | 編輯原始碼]
為使用 USB 與 Arduino 進行交互,正版開發板通常會使用一顆 ATmegaxU2 晶片,其將自身註冊為 ACM 設備。在 Linux 上會用到 cdc_acm
模塊。當開發板連接到設備上時,Arduino 會顯示為 /dev/ttyACMx
。
非正版 Arduino 開發板一般會在接口晶片上省錢,通常會將其替換為中國產的 CH34x 系列。CH34x 並沒有實現上述標準,並將其自身描述為 UART 轉 USB 設備。這一過程需要用到 ch341
模塊,使得 Arduino 將顯示為 /dev/ttyUSBx
。該命名規則可通過編輯 udev 規則進行修改。
訪問串口[編輯 | 編輯原始碼]
對於通過 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發送的信息
$ cat /dev/ttyACM0
Arduino-Builder[編輯 | 編輯原始碼]
您也可以使用arduino-builder包命令行工具來構建Arduino的內置例程。 為了使用所提供的arduino-avr-core包與上游avr-gcc包和avrdude包你需要創建一個小的設置文件:
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 替代[編輯 | 編輯原始碼]
ArduIDE[編輯 | 編輯原始碼]
ArduIDE是基於QT的Arduino IDE,可通過安裝 arduide-gitAUR[損壞的連結:package not found] 獲得。
Arduino-CMake[編輯 | 編輯原始碼]
通過 Arduino-CMake-Toolchain 和 CMake,你可以在命令行下使用多個構建系統來構建 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-mkAUR[損壞的連結:package not found] 是另一種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-libc包和avrdude包。
Scons[編輯 | 編輯原始碼]
結合使用scons和arscons,可以很容易地從命令行編譯和上傳Arduino項目。 Scons基於python,您將需要python-pyserial才能使用串行接口。安裝python-pyserial包和scons包。
這也將同時獲得您需要的依賴項。您還將需要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 upload
和 Arduino-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
1.x 應用未隨窗口管理器調整大小,且菜單自動關閉[編輯 | 編輯原始碼]
參考 Java#灰色窗口/應用不隨窗口管理器調整大小/菜單自動關閉
上傳失敗:編程器無響應[編輯 | 編輯原始碼]
將處理器設置從 ATmega328P
更改為 ATmega328P (Old Bootloader)
(請參閱Arduino IDE中的「工具」->「處理器」)可能有助於解決上傳失敗的問題。
1.x 版本在全新安裝後啟動崩潰,並提示 java.lang.NullPointerException 報錯[編輯 | 編輯原始碼]
需要安裝 arduino-avr-core包
串口與 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
無法上傳到連接中的 Nano RP2040[編輯 | 編輯原始碼]
如果你在上傳時出現:
Failed uploading: uploading error: exit status 1
嘗試通過運行以下腳本配置 Raspberry Pi RP2040 啟動引導模式 udev 規則:
# ~/.arduino15/packages/arduino/hardware/mbed_nano/3.5.1/post_install.sh