我确实有一个 Arduino 项目,它可以执行一些操作,然后通过串行端口将结果发送到运行 Linux 的计算机。这是一个 RS232 连接,波特率 9600,连接到 9 针 COM 端口或使用 USB/RS232 适配器(最终无论如何都是相同的)。
现在我可以使用迷你电脑并直接从 /dev/ttyS0 读取,但在构建自己的解决方案之前,我想知道是否已经存在某种通用标准 - 常识告诉我,在 *NIX 的几十年里,一定有人已经构建了一些东西。但到目前为止,我发现的主要是有关手动读取或使用 AT 命令集的信息,这实际上并不适用于此。
类似于“RS232 上的系统日志”之类的内容。我的数据结构很灵活,并且使用一些标准机制将允许其他工具也连接到它。如果已经有一些标准软件,我不想自己构建接收软件,并且数据的最终消费者可以从任何标准位置获取它。
添加:数据本身本质上是传感器数据(连接了一些温度传感器,并且有一些按钮可以打开/关闭功能),我正在考虑最终将其发送为一些开放指标格式 - 但正如所说,我非常灵活,可以使用中间标准格式(最好是人类可读的)来执行 Arduino > RS232 > Linux > MyOwnConverter > EventualConsumer 。 Linux 端只需要接收和存储,然后由实际的自定义工具处理处理,我只是更喜欢在可行的情况下让现有工具覆盖“接收和存储”部分。
答案1
我不知道 Linux 的具体情况。传感器数据工程的更常见标准之一是MODBUS
Linux 下有一些方便的测试工具(例如https://github.com/epsilonrt/mbpoll)并且有很多标准库可用于编写您自己的 modbus 主程序。因此,您应该能够使用您选择的语言来使用它。
最终,这可能意味着您更喜欢编写自己的软件,但这至少会为您提供一些结构。
Modbus 是一种请求/响应协议。您通常会将主机设置为主机,将传感器(Arduino)设置为从机。这意味着您将持续轮询 Arduino,而不是让 Arduino 持续传输数据。
Modbus 是围绕寄存器的概念编写的。它提供了请求寄存器值以及设置值的结构。因此,传感器硬件通常将每个值(例如电压、电流、交流频率)作为不同的寄存器。就像给出指令是根据设置寄存器来构建的一样。
在我见过的地方,通常会混合使用浮点和整数寄存器以及跨多个寄存器的单个值(例如提供 64 位值)。
答案2
Firmata 库实现了 Firmata 协议,用于与主机上的软件进行通信。这允许您编写自定义固件,而无需为您正在使用的编程环境创建自己的协议和对象。
您可以读取传感器并将输出写入设备以及轮询它。
例如,在 Python 中,使用这个图书馆:
关闭 DIGITAL13 上的 LED
board.digital[13].write(0)
读取模拟输入(了解迭代器):
board.analog[0].enable_reporting()
board.analog[0].read()
在Arduino中,您只需上传StandardFirmdata即可,无需草图即可立即开始工作。