gpt4 book ai didi

serial-port - Elixir 串口连接

转载 作者:行者123 更新时间:2023-12-04 03:26:40 26 4
gpt4 key购买 nike

我正在探索使用 Elixir 连接到串行设备。我找到的唯一图书馆是 this one .我仍在努力研究 Genservers,在开始编写程序/应用程序之前,我只想在 iex 中做一些简单的实验,但我不知道如何开始。
我已经启动了一个新的混合项目,添加了 elixir_serial 包作为依赖项,并使用 sudo iex -S mix 启动了 iex。 (我在 ubuntu 上,目前如果我不使用 sudo,我会在尝试连接时收到有关读/写权限的错误,但这是一个单独的问题 afaik)。我似乎能够连接 ok:

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 自述文件中建议的代码:

def handle_info({:elixir_serial, serial, data}, state) do
# do something with the data
end

在 iex 中(包装在 defmodule MySerial do end block 中)和混合项目主文件中,只是在函数中插入 IO.puts(data)

我显然在这里遗漏了一些东西,串行连接是否需要 iex pid 将数据发送回?我不明白我是否需要设置一个 GenServer 应用程序来读取数据,或者我是否可以使用 elixir_serial api 从串行端口读取数据。

正如我所说的,我正在全神贯注于 GenServer,我理解一般性,但我想知道如何开始使用这个包来测试发送和接收数据,然后再开始围绕它构建应用程序。

最佳答案

这是 Serial.start_link 的 elixir_serial 文档:

Starts a serial port. The process invoking this function will receive messages in the form of {:elixir_serial, pid, data}.

因此,您实际上不需要 GenServer 来处理响应。只需使用这种格式在代码中添加一个接收 block :

receive do
{:elixir_serial, serial_pid, data} ->
IO.puts "Received data"
Serial.send_data(serial_pid, "ACK: Received Message")
end

本质上,库接收来自其 C 对应方的调用,然后向启动 Serial 链接的进程发送消息。

send(pid, {:elixir_serial, self(), data})

参见 https://github.com/bitgamma/elixir_serial/blob/master/lib/serial.ex#L129

关于serial-port - Elixir 串口连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35135752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com