如何在 Linux 上通过 C++ 中的串行接口与 Arduino 通信?

Posted

技术标签:

【中文标题】如何在 Linux 上通过 C++ 中的串行接口与 Arduino 通信?【英文标题】:How to communicate with an Arduino over its serial interface in C++ on Linux? 【发布时间】:2008-10-03 22:47:43 【问题描述】:

我有一个连接到 Arduino 板的 RFID 阅读器。我想通过它的串行接口连接到它,并且每当 RFID 阅读器忽略一个信号时(当它读取一个 (RF)ID 时),我想在我的 C++ 程序中检索它。

我已经有了从 Arduino 简单地将 RFID 打印到串行的代码。

我不知道的是,如何在 Linux 中从 C++ 中读取它

我看过libserial,看起来很简单。但是,我如何让 C++ 程序对信号做出反应,然后读取 RFID,而不是连续收听?有必要吗?

编辑:在我读过的大多数示例中,(c++) 程序发送输入并接收输出。我只想听和接收来自 Arduino 的输出。

【问题讨论】:

【参考方案1】:

在 unix 上,您使用 select() 调用来等待输入。 select() 调用就像睡眠一样——在内核接收到硬件中断并触发 select() 之前不使用 CPU。

http://tldp.org/HOWTO/Serial-Programming-HOWTO/index.html

【讨论】:

【参考方案2】:

我找到了 Boost::Asio 库,它从串行接口异步读取。 Boost::Asio Documentation

【讨论】:

【参考方案3】:

Arduino Playground 中接口部分的Communications 部分有几个接口示例,包括一个使用 Arduino 作为 Linux TTY 的示例。

试试 Arduino 网站上的 Syntax and Programs 论坛和 Software Development 论坛。过去曾讨论过与多种不同语言和计算机的接口。

最后查看Processing 和Wiring 网站。 Arduino IDE基于Processing语言,布线环境和开发板与Arduino相关。这两个网站都有更多示例和更多资源的链接。

编辑:我刚刚意识到我没有回答您的实际问题。这些都是一般的通信资源,但有些可能会提示如何提醒计算机有新的 RFID 输入。

【讨论】:

我事先搜索过这个,偶然发现了这些页面。然而,大多数假设输入,然后作为响应输出。我的程序不知道什么时候应该读取信息,我想知道如何做到这一点。最好,如果可能的话,我想学习如何异步执行此操作。【参考方案4】:

您好,我为此创建了一个简单的库:cArduino https://github.com/ranma1988/cArduino C++可以自动查找连接Arduino端口,读取,写入

【讨论】:

自我推销被认为是垃圾邮件,这里是这样。

以上是关于如何在 Linux 上通过 C++ 中的串行接口与 Arduino 通信?的主要内容,如果未能解决你的问题,请参考以下文章

Linux上的串口和USB设备有什么区别?

终端、控制台、tty、shell等区别与概念初辨析

没有与连接的串行端口通信?

如果串行接口具有异步读取数据,则 C++ Ubuntu select()

Linux 上的串行通信连接

Linux 上的低延迟串行通信