繁体   English   中英

Linux环境下串口数据转TCP/IP

[英]Converting serial port data to TCP/IP in a Linux environment

我需要从 Linux 系统的串口获取数据,并将其转换为 TCP/IP 发送到服务器。 这很难做到吗? 我有一些基本的编程经验,但对 Linux 的经验不多。是否有开源应用程序可以执行此操作?

您不需要编写程序来在Linux中执行此操作。 只需通过netcat 管道串口:

netcat www.example.com port </dev/ttyS0 >/dev/ttyS0

只需替换地址和端口信息即可。 此外,您可能正在使用不同的串行端口(即更改/dev/ttyS0部分)。 您可以使用sttysetserial命令更改串行端口的参数(波特率,奇偶校验,停止位等)。

我通过谷歌搜索一个非常相似的问题(通过TCP / IP使用Linux客户端服务器上的串口)偶然发现了这个问题,所以即使这不是原始问题的答案,一些代码可能对原版海报有用,我想:

  • 制作带有串行端口的Linux机器盒在TCP端口上侦听以共享调制解调器: ser2net
  • 从另一个Linux工作站使用这个“共享”调制解调器: remtty

您可以使用socat创建LAN上串行(SOL)连接。 它可用于将ttyS“转发”到另一台机器,因此它显示为本地机器,或者您可以通过TCP / IP端口访问它。

在大多数现代Linux发行版中,您可以使用所需的所有工具。

有几个人指出你可以通过netcat管道串行数据。 但是,每次连接时都需要重新启动一个新实例。 为了在连接之间保持这种状态,您可以使用以下配置创建xinetd服务:

service testservice
{
    port        = 5900
    socket_type = stream
    protocol    = tcp
    wait        = yes
    user        = root
    server      = /usr/bin/netcat
    server_args = "-l 5900 < /dev/ttyS0"
}

请务必更改/dev/ttyS0以匹配您尝试连接的串行设备。

我有同样的问题。

我不太确定开源应用程序,但我已经测试了Linux命令行串口以太网 ...它对我有用。

还要感谢Maygarden法官的指示。

使用netcat在服务器中打开一个端口并开始监听:

nc -lvp port number

在机器上,您正在读取串口,以root身份使用netcat发送:

nc <IP address> portnumber < /dev/ttyACM0

如果要将数据存储在服务器上,可以将数据重定向到文本文件。

首先创建一个保存数据的文件:

touch data.txt

然后开始保存数据

nc -lvp port number > data.txt

我认为你的问题不太清楚。 这里有几个关于如何捕获进入Linux串口的数据的答案,但也许你的问题反过来了?

如果您需要捕获来自Linux串行端口的数据并将其发送到服务器,那么可以使用简单的串行打印服务器(如Lantronix Gizmo)开始使用几个小硬件小玩意。

不,我不以任何方式与Lantronix有任何关系。

我几天来一直在努力解决这个问题。

我的问题源于VirtualBox / Ubuntu。 我的机器上有很多USB串口。 当我尝试将其中一个分配给VM时,它破坏了所有这些 - 即主机和其他VM不再能够使用其USB串行设备。

我的解决方案是在壁橱上设置一个独立的串行服务器。

我尝试了ser2net,它的功能是将串口放在线上,但是remtty没有用。 我需要将端口作为VM上的tty。

socat工作得很好。

这里有很好的指示:

使用socat远程tty(tty over TCP)的示例

TCP 到串行 Systemd 服务

当您的 Linux 机器运行 systemd(大多数情况下)时,您可以创建一个整洁的服务,使(USB)串行设备在 TCP(te.net)上可用。

安全警告:通过 TCP 公开串行设备存在安全风险。

在这个例子中我使用:

  • TCP 5900端口
  • 串口设备/dev/ttyUSB0 (使用2次)
  • 串行速度115200 Bps

您可以在下面的示例中编辑它们。 查看sttync .netcat 的手册)以获得更多选项。

以下所有命令均假定您是用户root 如果你不执行: sudo su -

目录/etc/systemd/system应该已经存在。 如果不是,则您的系统可能没有运行 Systemd。

使用以下内容创建文件/etc/systemd/system/tcp2serial.service

[Unit]
Description=TCP to Serial

[Service]
TTYPath=/dev/ttyUSB0
ExecStartPre=/usr/bin/stty -F /dev/ttyUSB0 speed 115200
ExecStart=/usr/bin/nc -k -l 5900
StandardInput=tty
StandardOutput=tty
Restart=always

[Install]
WantedBy=default.target

创建文件后,您可以执行systemctl start tcp2serial来启动服务。

从同一网络中的另一台 Linux 计算机,您可以使用te.net [server] 5900连接到它。 要退出 te.net,请按Ctrl + ]并键入quit Enter

编辑服务文件后,执行以下两个命令:

systemctl daemon-reload
systemctl restart tcp2serial

要使服务在启动时启动,请执行:

systemctl enable tcp2serial

您可能会发现PerlPython对从串行端口获取数据很有用。 要将数据发送到服务器,如果服务器(比方说)是HTTP应用程序甚至是流行的数据库,解决方案可能很容易。 如果它是一些自定义/专有TCP应用程序,解决方案将不那么容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM