Arduino (简体中文)

From ArchWiki
翻译状态:本文是 Arduino翻译。上次翻译日期:2019-12-17。如果英文版本有所更改,则您可以帮助同步翻译。

Arduino 是一款便捷灵活、方便上手的开源电子原型平台。它适用于艺术家,设计师,业余爱好者以及任何对创建交互式对象或环境感兴趣的人。

安装

AVR Boards

要使用Arduino Uno等AVR板,您可以选择安装 arduino-avr-core,以使用Arch Linux上游avr-gcc代替捆绑的旧版avr-core。如果您仍然想使用较旧的arduino-core,则需要将它安装在arduino的开发板管理器中[1]。您始终可以在“工具>面板”菜单中的不同内核之间切换。

Pinoccio Scout

Pinoccio Scouts 也可以使用Arduino IDE编写程序。可以在这里找到相关介绍。 此外你可以通过AUR来安装arduino-pinoccioAUR

Intel Galileo

要将Intel Galileo开发板与Arch Linux一起使用,请安装Arduino IDE,然后通过“工具->板->板管理器”下载Galileo工具包。 修复安装问题,请访问github

On Arm7 devices

相关内容可以参考这里

RedBear Duo

You might need to install perl-archive-zip or you will get an error about missing crc32.

配置

访问串口

arduino开发板通过串口或USB连接到计算机,因此用户需要对串口设备文件具有可读/写访问权限。Udev创建 uucp组拥有的 / dev / ttyUSB0之类的文件,因此将用户添加到 uucp组将提供所需的读/写访问权限。另外,如果您打算使用默认的Java IDE,请将您的用户添加到 lock组以进行 / var / lock / lockdev访问。有关详细信息,请参见Users and groups (简体中文)#用户组管理

在上传固件到Arduino之前,请确保在“工具”菜单中设置正确的串口,开发板类型和处理器。

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

您也可以使用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 替代

ArduIDE

ArduIDE是基于QT的Arduino IDE。已在AUR中可用arduide-gitAUR

gnoduino

gnoduinoAUR[损坏的链接:package not found]AUR中可用的GNOME原始Arduino IDE实现。原始的Arduino IDE软件是用Java编写的。这是一个Python的实现,针对GNOME,但可以在xfce4和其他WM上使用。其目的是减轻重量,同时保持与原始Arduino IDE的兼容性。源代码编辑器基于gtksourceview。

如果您更喜欢在终端上工作,则下面还有一些其他选项可供选择。

Arduino-CMake

阅读Arduino-CMake-NGCMake,您可以在命令行下使用多个构建系统来构建Arduino固件。CMake可以让您使用自己喜欢的工具生成适合您需求的构建系统。它可以生成任何类型的构建系统,从简单的Makefile到Eclipse,Visual Studio,XCode等的完整项目。

要求: cmake, arduino, avr-gcc, avr-binutils, avr-libc, avrdude.

Makefile

注意: 更新2015-03-23。由于Arduino≥v1.5中的最新更改,许多旧的Makefile在不进行某些修改的情况下无法正常工作。可以在GitHub上找到一个简单的Arduino 1.5+版本的Makefile [2]

除了使用Arduino IDE,还可以使用其他编辑器和Makefile。设置目录以对Arduino进行编程,然后将Makefile复制到该目录中。 可以从/usr/share/arduino/hardware/cores/arduino/Makefile获取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是另一种Makefile方法。它允许用户使用包含Arduino.mk的本地Makefile。参见project page

对于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
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搜索和包含库。

安装

安装platformioAURplatformio-gitAUR.

使用

$ platformio platforms install atmelavr
$ platformio init
$ vim platformio.ini
#
# Atmel AVR based board + Arduino Wiring Framework
#
[env:ArduinoMega2560]
platform = atmelavr
framework = arduino
board = megaatmega2560   
upload_port = /dev/ttyACM0 
targets = upload
$ platformio run

Emacs

当然可以将Emacs配置为IDE。

AUR安装软件包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].

Troubleshooting

Version 1.6

一些老的第三方工具可能仅适用于Arduino 1.0 (arduino10AUR[损坏的链接:package not found])。部分工具可能只会工作在Arduino version 1.6 (arduino)及更高版本。 如果工具不起作用,请检查版本。请注意,某些较新的开发板不适用于旧的Arduino IDE。

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对可在发行包中的hardware/arduino/avr/boards.txt中找到。 请注意,其中一些(尤其是FTDI)并不是Arduino平台所独有的。 使用serial属性是区分各种设备的好方法。

串口错误

在IDE启动时,您可能最初会看到串行端口,但是在上传固件时,TX/RX指示灯不起作用。您以前可能已经将串口中的波特率更改为了它不喜欢的内容。编辑~/.arduino/preferences.txt,使serial.debug_rate和Arduino设备相匹配。

使用Uno/Mega2560

Arduino Uno和Mega2560具有一个板载USB接口(Atmel 8U2),用来接收串口数据,因此,在USB插入后,可以通过cdc-acm内核模块创建的/dev/ttyACM0来访问它们。

您可以通过将Uno置于环回模式并在115200波特的arduino串行监视器中键入字符来对Uno进行常规功能测试。它应将字符回显给您。要将其置于回送状态,请在数字端短接引脚0->1,并在键入时按住复位按钮或将GND->RESET引脚短路。

Mega2560无法识别USB端口

安装驱动: i2c-ch341-dkmsAUR.

Application not resizing with WM, menus immediately closing

see Java#Gray window, applications not resizing with WM, menus immediately closing

上传失败

将处理器设置从ATmega328P更改为ATmega328P (Old Bootloader) (请参阅Arduino IDE中的“工具”->“处理器”)可能有助于解决上传失败的问题。

See also