Arduino (简体中文) - ArchWiki

Jump to content

# Arduino (简体中文)

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

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

## 安装

- 安装 arduino 和 arduino-docs 以便获得离线文档。
- 将用户添加到 `uucp` 和 `lock` Users and groups (简体中文) ( 详情#访问串口 )。
- 你可能需要将`cdc_acm`加载到Kernel module (简体中文)。

### AVR Boards

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

### Pinoccio Scout

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

### Intel Galileo

要将Intel Galileo开发板与Archlinux一起使用，请安装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-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。已在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-NG和CMake，您可以在命令行下使用多个构建系统来构建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-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搜索和包含库。

#### 安装

安装platformioAUR 或 platformio-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 upload`和`Arduino-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

- Official website
- https://bbs.archlinux.org/viewtopic.php?pid=295312
- https://bbs.archlinux.org/viewtopic.php?pid=981348
- https://answers.ros.org/question/9097/how-can-i-get-a-unique-device-path-for-my-arduinoftdi-device/
- https://www.reddit.com/r/archlinux/comments/8j53dq/how_do_i_install_ch340_chip_drivers_on_arch/

Categories:

- Development (简体中文)
- Science (简体中文)

Hidden category:

- Pages with broken package links