web-dev-qa-db-fra.com

Conversion des données du port série en TCP / IP dans un environnement Linux

J'ai besoin d'obtenir des données du port série d'un système Linux et de les convertir en TCP/IP pour les envoyer à un serveur. Est-ce difficile à faire? J'ai une certaine expérience de programmation de base, mais pas beaucoup d'expérience avec Linux. Existe-t-il une application open source qui fait cela?

27
Doug

Vous n'avez pas besoin d'écrire un programme pour le faire sous Linux. Juste pipe le port série via netcat :

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

Remplacez simplement l'adresse et les informations de port. En outre, vous utilisez peut-être un port série différent (c.-à-d. Changez le /dev/ttyS0 partie). Vous pouvez utiliser les commandes stty ou setserial pour modifier les paramètres du port série (débit en bauds, parité, bits d'arrêt, etc.).

29
Judge Maygarden

Je suis tombé sur cette question via une recherche Google pour une très similaire (en utilisant le port série sur un serveur à partir d'un client Linux sur TCP/IP), donc, même si ce n'est pas une réponse à la question d'origine exacte, une partie du code pourrait être utile à l'affiche originale, je pense:

  • Faire écouter une box Linux avec un port série sur le TCP pour partager le modem: ser2net
  • Utilisation de ce modem "partagé" à partir d'un autre poste de travail Linux: remtty
10
Andrew Y

Vous pouvez créer une connexion série sur LAN (SOL) en utilisant socat . Il peut être utilisé pour "transférer" un ttyS vers une autre machine afin qu'il apparaisse comme local ou vous pouvez y accéder via un port TCP/IP.

8
Indie

Tous les outils dont vous auriez besoin sont déjà à votre disposition sur la plupart des distributions modernes de Linux.

Comme plusieurs l'ont souligné, vous pouvez diriger les données série via netcat. Cependant, vous devrez relancer une nouvelle instance à chaque connexion. Pour que cela persiste entre les connexions, vous pouvez créer un service xinetd en utilisant la configuration suivante:

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

Assurez-vous de modifier le /dev/ttyS0 pour correspondre au périphérique série avec lequel vous essayez d'interfacer.

4
Dwight Spencer

J'ai eu le même problème.

Je ne suis pas tout à fait sûr des applications open source, mais j'ai testé la ligne de commande Serial over Ethernet pour Linux et ... cela fonctionne pour moi.

Merci également au juge Maygarden pour les instructions.

3
Garsia

Ouvrez un port sur votre serveur avec netcat et commencez à écouter:

nc -lvp port number

Et sur la machine que vous lisez le port série, envoyez-le avec netcat en tant que root:

nc <IP address> portnumber < /dev/ttyACM0

Si vous souhaitez stocker les données sur le serveur, vous pouvez rediriger les données vers un fichier texte.

Créez d'abord un fichier dans lequel vous enregistrez les données:

touch data.txt

Et puis commencez à enregistrer les données

nc -lvp port number > data.txt
2
user3247282

Je pense que votre question n'est pas tout à fait claire. Il y a plusieurs réponses ici sur la façon d'attraper les données entrant dans le port série d'un Linux, mais peut-être que votre problème est l'inverse?

Si vous devez capturer les données provenant du port série d'un Linux et les envoyer à un serveur, plusieurs petits gadgets matériels peuvent le faire, à commencer par le simple serveur d'impression série tel que celui-ci Lantronix gizmo =.

Non, je ne suis d'aucune façon affilié à Lantronix.

1
Shannon Nelson

Je lutte avec le problème depuis quelques jours maintenant.

Le problème pour moi provient de VirtualBox /Ubuntu. J'ai beaucoup de ports série USB sur ma machine. Lorsque j'ai essayé d'affecter l'un d'entre eux au VM, il les a tous assaillis - c'est-à-dire que l'hôte et les autres machines virtuelles n'étaient plus en mesure d'utiliser leurs périphériques série USB.

Ma solution est de mettre en place un serveur série autonome sur un netbook que j'ai dans le placard.

J'ai essayé ser2net et cela a fonctionné pour mettre le port série sur le fil, mais remtty n'a pas fonctionné. J'ai besoin d'obtenir le port en tant que tty sur la machine virtuelle.

socat fonctionnait parfaitement.

Il y a de bonnes instructions ici:

Exemple pour tty distant (tty sur TCP) utilisant socat

1
Tereus Scott

Vous pourriez trouver Perl ou Python utile pour obtenir des données du port série. Pour envoyer des données au serveur, la solution pourrait être facile si le serveur est (disons) une application HTTP ou même une base de données populaire. La solution ne serait pas si facile s'il s'agit d'une application personnalisée/propriétaire TCP.

0
Bash