【发布时间】:2016-05-10 05:05:43
【问题描述】:
我正在探索使用 Elixir 连接到串行设备。我发现的唯一图书馆是this one。我仍在尝试围绕 Genservers 进行思考,在开始编写程序/应用程序之前,我只想在 iex 中做一些简单的实验,但我不知道如何开始。
我已经开始了一个新的 mix 项目,添加了 elixir_serial 包作为依赖项,并使用 sudo iex -S mix 启动了 iex。 (我在 ubuntu 上,目前如果我不使用 sudo,我会在尝试连接时收到关于读/写权限的错误,但这是一个单独的问题 afaik)。
我好像可以正常连接了:
iex(3)> {:ok, serial} = Serial.start_link
{:ok, #PID<0.124.0>}
iex(4)> Serial.open(serial, "/dev/ttyUSB0")
:ok
iex(5)> Serial.set_speed(serial, 9600)
:ok
iex(6)> Serial.connect(serial)
:ok
iex(7)> Serial.send_data(serial, <<0x01, 0x02, 0x03>>)
:ok
但我不知道如何接收数据。我尝试输入elixir_serial README 中建议的代码:
def handle_info({:elixir_serial, serial, data}, state) do
# do something with the data
end
在 iex(包装在 defmodule MySerial do end 块中)和混合项目主文件中,只需在函数中添加 IO.puts(data)。
我显然在这里遗漏了一些东西,串行连接是否需要 iex pid 才能将数据发送回?我不明白我是否需要设置一个 GenServer 应用程序来读取数据,或者我是否可以使用elixir_serial api 从串口读回数据。
正如我所说,我正在研究 GenServer,我理解一般性,但我想知道如何开始使用这个包来测试发送和接收数据,然后再开始围绕它构建应用程序。
【问题讨论】:
-
您是否正在尝试编写测试以使串行设备发送回数据?
-
我想向设备发送命令,然后在设备上读取该命令的结果。我正在向 Cisco 交换机发送数据,因此需要在 Cisco cli 上模拟人机交互,因此我想了解不同命令的结果。 (在以前使用 pyserial 的经验中,有一些让这变得棘手的问题)
标签: serial-port elixir