Linux下Arduino IDE无法选择串口的问题

最近在用树莓派和Arduino做项目,树莓派上装的是别人编译好的Raspbian系统,自己安装了Arduino(此处和后文说的Arduino都是指IDE而非硬件),结果发现没法选择串口,Tools菜单下面Serial Port一栏是灰色的,点不了。

Linux下Arduino IDE无法选择串口的问题_第1张图片

想到是权限问题,去ls了一下串口文件,发现文件名是ttyAMA0,所有者root,组别tty,权限是660:

这里写图片描述

所以只要把平时用的用户加到tty组,理论上就有了读写权限。(有些新手教程建议每次都sudo arduino,略坑)

pi@raspberrypi ~ $ sudo usermod -a -G tty pi

完事重启Arduino,发现,居然还是不行!Serial Port仍然是灰的:(

后来google一番,终于在官方论坛的一个帖子下面找到了问题所在,原来是串口设备名的问题,Arduino不认识ttyAMA0这样的名字,可以对其创建一个硬链接,取个正儿八经的串口设备名,比如ttyS0或者ttyUSB0这样。

pi@raspberrypi ~ $ sudo cp -l /dev/ttyAMA0 /dev/ttyS0

创建好之后,终于可以选择串口了!(不用重启Arduino)

Linux下Arduino IDE无法选择串口的问题_第2张图片

为了方便,把上面这条命令写进了/etc/rc.local(这里就不用sudo了),这样每次开机就能自动创建ttyS0。

Linux版的Arduino仅支持“标准”的串口设备名是可以理解的,因为Linux里/dev下面文件实在太多,tty开头的就有无数,所以肯定得对名字做筛选。纯粹为了好奇,想知道究竟哪些名字Arduino认为是“标准”的,好在它是个开源软件,去官网查了一下代码,直接搜索”tty”,就找到了列举串口的地方,在Arduino/arduino-core/src/processing/app/SerialPortList.java文件里:

    static {
        serialInterface = new SerialNativeInterface();
        switch (SerialNativeInterface.getOsType()) {
            case SerialNativeInterface.OS_LINUX: {
                PORTNAMES_REGEXP = Pattern.compile("(ttyS|ttyUSB|ttyACM|ttyAMA|rfcomm|ttyO)[0-9]{1,3}");
                PORTNAMES_PATH = "/dev/";
                break;
            }

你可能感兴趣的:(Linux下Arduino IDE无法选择串口的问题)