神经、凤凰、GPIO?

Nerves, Phoenix, GPIO?

我有一个 umbrella 应用程序设置 the docs,并且所有编译都很好。

我留下的一个问题是 Phoenix 应用程序在这种情况下如何与 GPIO 交互? elixir_ale 只会在目标设备上编译,我无法通过 Phoenix 应用程序引用 Nerves 项目。

场景:我点击众所周知的按钮来切换光源。 Web 请求将到达控制器;如何引用底层 Nerves 应用程序与 GPIO 交互?

您需要创建某种风格的消息代理来充当中介。您 运行 在基于神经的设备上的 OTP 应用程序 运行 在同一个 BEAM 上运行,因此您可以使用所有常规消息传递功能和模式。

您可以使用 Phoenix 通道中的 pub-sub 机制有效地在 JS 前端和基于 Nerves 的设备上的 BEAM 应用程序 运行ning 之间代理事件。有可用的 Phoenix 通道客户端实现,例如 PhoenixChannelClient,您可以从任何 OTP 应用程序将其用于此目的。

如果这对您正在做的事情来说太重了,一个更简单的替代方法是在您的 Nerves 应用程序中全局注册一个 GenServer 的名称,然后直接从您的 Phoenix 控制器向它发送消息。

可能值得考虑的第三个解决方案在 investment/complexity 级别上介于上述两个之间:如果您喜欢 pub-sub 模型的想法,但您仍然希望进程只进行通信在 BEAM 内部,您可以使用 pg2 通过使用命名进程组来模拟发布-订阅主题和订阅。感兴趣的订阅者进程可以加入全局命名的组,然后发布者进程可以查询成员列表,然后继续向他们发送消息。