【发布时间】:2015-03-07 15:00:17
【问题描述】:
环境
- Linux Mint 17.1
- Python 2.7
- pyserial 2.7
- Arduino UNO rv3
期望的行为
我正在尝试将三个值从 Python 应用程序发送到 Arduino。
从终端执行以下操作时有效:
$ python
$ import serial
$ import struct
$ ser = serial.Serial('/dev/ttyACM0', 9600)
$ ser.write(struct.pack('>3B', 255, 0, 0))
当前行为
在 Python 文件中使用相同的代码时不起作用,即:
import serial
import struct
ser = serial.Serial('/dev/ttyACM0', 9600)
ser.write(struct.pack('>3B', red_value, green_value, blue_value))
错误信息
$ sudo tail -100 /var/log/apache2/error.log
OSError: [Errno 13] Permission denied: '/dev/ttyACM0'
疑难解答
权限
申请文件:
$ ls -l
-rwxr-xr-x 1 myname mygroupname 114146 Jan 9 19:16 my_application.py
ttyACM0:
ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 166, 0 Jan 9 20:12 /dev/ttyACM0
组
所有者所属的组:
$ groups
mygroupname adm dialout cdrom sudo dip plugdev lpadmin sambashare
由于互联网上的各种建议,我还通过系统设置 > 用户和组将所有者添加到 tty 组。这没有效果。
可用的串行端口
$ dmesg | grep tty
[ 0.000000] console [tty0] enabled
[ 3390.614686] cdc_acm 3-2:1.0: ttyACM0: USB ACM device
更新
我可以强制它在以下条件下工作:
01. 世界的权限必须设置为rw 即:
sudo chmod 666 /dev/ttyACM0
02. Arduino IDE 串口监视器需要打开。
但是,这些条件是不可持续的:
- 每次连接 USB 时都会重置权限。
- 无需打开 Arduino IDE 串行监视器。
【问题讨论】:
标签: python-2.7 pyserial linux-mint arduino-uno