我有一个 arduino,我想通过 Rails api 发送短信。因此,直接在终端上,就像为 arduino 端口创建文件描述符一样简单:
exec 3<> /dev/ttyACM0
然后,我可以发送任何消息,例如:
echo "Beautiful blue sky floating endlessly in love making the clouds sigh.">&3
现在,我尝试使用系统方法在我的 Rails api 上实现这个想法:
api/config/application.rb
class Application < Rails::Application
...
# This is for declaring the file descriptor when the rails server is on.
system 'exec 3<> /dev/ttyACM0;'
end
应用程序/控制器/message_controller.rb
class MessageController < ApplicationController
def send
system "echo \"#{params[:message]}\">&3;"
render json: '', status: :ok
end
end
...但是,这sh: 3: Bad file descriptor
在终端上向我抛出了一条消息。
我勉强让它工作改变控制器上的系统执行,如下所示:
system "exec 3<> /dev/ttyACM0; sleep 2; echo \"#{params[:message]}\">&3;"
但我需要添加该sleep
命令,以便有足够的时间来准备 arduino 来捕获输入数据。
为了使这项工作更快,我想知道一种在调用控制器之间保持文件描述符配置处于活动状态的方法。