我试图通过USB(运行Arch Linux)与Arduino建立串行通信。我可以通过C ++程序并使用boost::asio
直接进行,但最近我安装了Matlab并且遇到了一些问题。我设法使用s0=serial('/dev/ttyACM0')
创建序列对象,但是当我调用fopen(s0)
时,我收到以下错误:
Error using serial/fopen (line 72)
Open failed: Port: /dev/ttyACM0 is not available. No ports are available.
答案 0 :(得分:3)
以下是我在Arch Linux 64位上使用Matlab R2014a进行串口通信所做的工作:
1a)按照此处描述的步骤进行操作:http://www.matlabarduino.org/serial-communication.html:
sudo chmod 777 / dev / ttyACM0 或者,将您的用户添加到组uucp:> sudo gpasswd --add username uucp
sudo nano $ MATLABROOT / bin / $ ARCH / java.opts - >添加:-Dgnu.io.rxtx.SerialPorts = / dev / ttyS0:/ dev / ttyUSB0:/ dev / ttyACM0
1b)检查连接是否在gtkterm中工作(选择端口ttyACM0)
另外2)(仅对Matlab至关重要):
sudo chmod 777 / run / lock / run / lock在我的发行版上从/ var / lock符号链接,所以你可能不得不用后一个dir(755);或者,您可以通过ACL管理/ run / lock /的访问权限。
我如何达到这个解决方案:
sudo strace -p 4668 -f -s100 2>& 1 | grep -C3 --color -i -e / dev -e serialports -e uucp -p:进程ID ==第二列来自> sudo ps -aux | grep -i matlab 然后,在Matlab中输入>> sps = instrhwinfo('serial')(在我的例子中总是返回一个空单元格数组的结构)并监视strace的输出。
希望有所帮助! 干杯:)
答案 1 :(得分:0)
默认情况下,只有root才能使用串口。
您可以将您的ID添加到串行组"拨出",以便您可以使用串口。
答案 2 :(得分:0)
只需从/ dev / ttyACM0到/ dev / ttyS [0-255]进行软链接。
ln -sf /dev/ttyACM0 /dev/ttyS100 # for example
Matlab R2017a下面可能会遇到这个问题。
详细说明可在此处找到:
Why is my serial port not recognized with MATLAB on Linux or Solaris?
希望这可以得到帮助。