Saltar al contenido

Cree una conexión de puerto serie virtual a través de TCP

Solución:

Prueba socat. Posible escenario:

socat  pty,link=/dev/virtualcom0,raw  tcp:192.168.254.254:8080&

socat crea una conexión TCP a 192.168.254.254:8080, de modo que todo lo que se escribirá en / dev / virtualcom0 se reenviará a 192.168.254.254:8080 y viceversa.

Otro enfoque sería utilizar RFC2217 a través de ser2net en el lado del servidor de Linux y el controlador RFC2217 en el lado de Windows (por ejemplo, http://www.hw-group.com/products/hw_vsp/index_en.html versión de puerto único). También puede intentar que http://pyserial.sourceforge.net/ funcione con ser2net.

tienes socat y ser2net y otros programas pero mi experiencia es muy mala … no funciona correctamente. He hecho este pequeño programa en Python, puede ser útil. Actualice el puerto, la velocidad en baudios … luego use cualquier cliente tcp. Elimine la primera línea si no desea usarla como secuencia de comandos autoejecutable

#!/usr/bin/python

import socket
import sys
import serial

#open serial port
ser = serial.Serial('/dev/ttyAMA0', 115200, timeout=0)
#create socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)

#bond to the port. Don't use localhost to accept external connections
server_address = ('', 2105)
print('starting up on {} port {}'.format(*server_address))
sock.bind(server_address)

#listen
sock.listen(1)

#loop
while True:
    #waits for a new connection
    print('waiting for a connection')
    connection, client_address = sock.accept()
    try:
        print('connection from', client_address)
        #continously send from serial port to tcp and viceversa
        connection.settimeout(0.1)
        while True:
            try:
                data = connection.recv(16)
                if data == '': break
                ser.write(data)
            except KeyboardInterrupt:
                connection.close()
                sys.exit()
            except Exception as e:
                pass
            received_data = ser.read(ser.inWaiting())
            connection.sendall(received_data)
    except Exception as e:
        print e

    finally:
        #clean up connection
        connection.close()
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *