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?
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.).
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:
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.
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.
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.
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
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.
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:
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.