• VEXcode Robotics Logo VEX Robotics Logo
  • VEX API Home Button VEX API Home Button
  • VEX 123 logo in purple VEX 123 logo in white
  • VEX GO logo in lime green VEX GO logo in white
  • VEXcode AIM logo in blue VEXcode AIM logo in white
  • VEX IQ logo in blue VEX IQ logo in white
  • VEX EXP logo in red VEX EXP logo in white
  • VEX V5 logo in red VEX V5 logo in white
  • VEX CTE logo in green VEX CTE logo in white
  • VEX AIR logo in orange VEX AIR logo in white
  • VEXcode VR logo in gold VEXcode VR logo in white
Saltar al contenido principal
Ctrl+K

< Back to Platform Select

  • VEX EXP
  • Referencia API EXP DE VEX
  • VEXlink
  • SerialLink
Español Latinoamericano
  • English
  • العربية
  • বাংলা
  • Česky
  • Deutsch
  • Ελληνικά
  • Español
  • Suomi
  • Français
  • Gaeilge
  • हिंदी
  • Magyar
  • Bahasa Indonesia
  • 日本語
  • 한국어
  • Lietuvių
  • Latviešu
  • മലയാളം
  • Nederlands
  • Polski
  • Português
  • Русский
  • Svenska
  • ไทย
  • Türkçe
  • Українська
  • Tiếng Việt
  • 简体中文
  • 繁體中文
  • VEXcode Robotics Logo

Sección Navegación

  • Bloques
  • Python
    • Tren de transmisión
    • Movimiento
    • Sonido
    • Visión
    • Pantalla
    • Controlador
    • Detección
    • Inercial
    • Dispositivos de 3 cables
    • Neumático
    • Cerebro
    • Tarjeta SD
    • Brazo de 6 ejes
    • Torre de señales
    • VEXlink
      • MessageLink
      • SerialLink
    • Consola
    • Lógica
    • Bibliotecas MicroPython
  • C++
  • Tutoriales de VEXcode

Navegación de plataforma

  • VEX 123 logo in purple VEX 123 logo in white
  • VEX GO logo in lime green VEX GO logo in white
  • VEXcode AIM logo in blue VEXcode AIM logo in white
  • VEX IQ logo in blue VEX IQ logo in white
  • VEX EXP logo in red VEX EXP logo in white
  • VEX V5 logo in red VEX V5 logo in white
  • VEX CTE logo in green VEX CTE logo in white
  • VEX AIR logo in orange VEX AIR logo in white
  • VEXcode VR logo in gold VEXcode VR logo in white

SerialLink#

  • Introducción

  • Crear un enlace

  • Métodos disponibles

    • is_linked

    • enviar

    • recibir

    • recibido

Introducción#

SerialLink permite que dos cerebros EXP se comuniquen enviando y recibiendo datos en serie sin procesar a través de VEX Link. En lugar de mensajes etiquetados, SerialLink transmite un búfer (una cadena o una matriz de bytes). Esto lo hace útil para la comunicación avanzada de robot a robot, como la transmisión de datos de sensores, el envío de formatos de paquetes personalizados o la creación de su propio protocolo sobre bytes.

Cada uso de send agrega datos al búfer de recepción del cerebro EXP vinculado. Los datos se leen en el orden en que llegan (primero en entrar, primero en salir). Si se envían varios búferes antes de que el otro EXP Brain use receive, permanecen en cola y se devuelven uno a la vez en el orden en que se enviaron. Debido a que los datos pueden ponerse en cola, enviar repetidamente grandes búferes en cada bucle puede crear retraso; para enlaces críticos en el tiempo, envíe solo lo que necesite.

Importante: Ambos robots deben estar ejecutando proyectos que SerialLink SerialLink al mismo tiempo, o no se enviarán ni recibirán datos.

Esta página utiliza link como nombre de ejemplo de SerialLink. Reemplácelo con su propio nombre configurado según sea necesario.

A continuación se muestra una lista de los métodos disponibles:

  • is_linked – Devuelve si este cerebro está conectado activamente a su cerebro emparejado.

  • send – Envía un mensaje corto (con datos int/float opcionales) al cerebro emparejado.

  • receive – Espera y devuelve el siguiente mensaje entrante.

  • received – Registra una función que se llamará cada vez que se reciba un nuevo mensaje.

Crear un enlace#

Cree un SerialLink en ambos EXP Brains para establecer un canal de comunicación entre ellos, ya sea de forma inalámbrica con V5 Robot Radios o a través de un cable inteligente cableado, para que los robots puedan enviarse datos en serie sin procesar.

SerialLink(smartport, name, linktype, wired)

Parámetro

Descripción

smartport

El puerto inteligente utilizado para este enlace: el puerto al que está conectado el radio robot V5 (inalámbrico) o el cable inteligente está conectado (cableado). Escrito como Ports.PORTx donde x es el número de puerto.

name

El nombre único para dar este enlace como una cadena.
Nota: Este nombre debe ser lo suficientemente largo como para crear un ID único para que no coincida accidentalmente con el enlace de otro equipo.

linktype

El rol que este cerebro usará para este par de enlaces. Cada par debe incluir un Gerente y un Trabajador

  • VexlinkType.MANAGER VexlinkType.MANAGER – Uso para el robot que enviará más o más mensajes. Los gerentes tienen un mayor ancho de banda saliente (~1040 bytes/seg).
  • VexlinkType.WORKER : se utiliza para el robot que enviará menos mensajes o mensajes más pequeños. Los trabajadores tienen un ancho de banda de salida más bajo (~520 bytes/seg).

wired

Opcional. Si este enlace es por cable o inalámbrico:

  • True – Los cerebros EXP están conectados a través de un cable inteligente.
  • False (predeterminado): los cerebros EXP se conectan de forma inalámbrica mediante radios robóticas V5.

Código para Robot 1

"""
Create a wireless link in Port 1
name: VEXRoboticsLink123456789
linktype: Manager
"""
link = SerialLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.MANAGER)

Código para Robot 2

"""
Create a wireless link in Port 1
name: VEXRoboticsLink123456789
linktype: Worker
"""
link = SerialLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.WORKER)

Métodos disponibles#

Una vez que su SerialLink esté configurado y los Brains estén vinculados, puede usar los métodos a continuación para enviar, recibir y responder a datos en serie sin procesar.

is_linked#

el método is_linked devuelve si los cerebros EXP en un SerialLink están emparejados entre sí.

  • True : los dos cerebros EXP están emparejados y se comunican en este enlace.

  • False : los dos cerebros EXP no están emparejados en este enlace.

Nota: Es una buena práctica verificar siempre que los cerebros EXP estén vinculados al comienzo de un proyecto antes de ejecutar cualquier código adicional.

Usage:
link.is_linked()

Parámetros

Descripción

Este método no tiene parámetros.

Código para Robot 1

# Send a message to the other robot

# Create the link
link = SerialLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.MANAGER)

# Do not run code UNTIL the Brains are linked
while not link.is_linked():
    wait(0.1, SECONDS)

brain.screen.print("Robot 1 - Manager")

link.send("HELLO")

Código para Robot 2

# Display the message that Robot 1 sends

# Create the link
link = SerialLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.WORKER)

# Do not run code UNTIL the Brains are linked
while not link.is_linked():
    wait(0.1, SECONDS)

brain.screen.print("Robot 2 - Worker")
brain.screen.next_row()

def received_message(bytearray, length):
    # Slice the bytearray to the valid data
    data = bytearray[:length]  
    # Decode and strip the message before displaying it
    text = data.decode().strip()
    brain.screen.print("Got: ", text)

# Call received_message whenever a message is received
link.received(received_message)

send#

send transmite bytes seriales sin procesar al otro cerebro EXP vinculado.

Al leer esos datos con receive, receive solo devolverá un valor una vez que haya recopilado la cantidad de bytes especificada por su receive parámetro. Debido a eso, si su código siempre llama a length con una lengthfija, debe asegurarse de que cada mensaje enviado con send tenga exactamente esa cantidad de bytes (a menudo mediante relleno) para que el receptor no se bloquee esperando bytes adicionales.

Si no desea depender de un recuento exacto de bytes, use received en su lugar; le permite manejar los bytes disponibles sin requerir una longitud específica.

Usage:
send(buffer)

Parámetros

Descripción

buffer

Los datos para enviar al otro cerebro EXP vinculado. Esto puede ser una string o una matriz de bytearray.

Código para Robot 1

# Send a message to the other robot

# Create the link
link = SerialLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.MANAGER)

# Do not run code UNTIL the Brains are linked
while not link.is_linked():
    wait(0.1, SECONDS)

brain.screen.print("Robot 1 - Manager")

link.send("HELLO")

Código para Robot 2

# Display the message that Robot 1 sends

# Create the link
link = SerialLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.WORKER)

# Do not run code UNTIL the Brains are linked
while not link.is_linked():
    wait(0.1, SECONDS)

brain.screen.print("Robot 2 - Worker")
brain.screen.next_row()

def received_message(bytearray, length):
    # Slice the bytearray to the valid data
    data = bytearray[:length]  
    # Decode and strip the message before displaying it
    text = data.decode().strip()
    brain.screen.print("Got: ", text)

# Call received_message whenever a message is received
link.received(received_message)

receive#

receive devuelve datos en serie del otro cerebro EXP vinculado en orden FIFO (primero los datos más antiguos no leídos).

Debido a que receive espera un número exacto de bytes, la mensajería de longitud fija a menudo requiere relleno cuando se usa send para que cada mensaje alcance el tamaño esperado. Si el remitente transmite menos de length bytes, receive seguirá esperando los bytes restantes y no devolverá nada.

Si la cola está vacía y proporciona un timeout, receive espera hasta tantos milisegundos para obtener nuevos datos. Si no llega nada en esa ventana, devuelve None. Cualquier dato enviado después permanece en cola para ser leído más tarde.

Usage:
receive(length, timeout)

Parámetros

Descripción

length

El número de bytes a recibir. receive espera hasta que hayan llegado esta cantidad de bytes, luego los devuelve como un receiveSi receive es 0, bytearray devuelve length inmediatamente. Si solicita más bytes de los que transmite el remitente, length seguirá esperando. Si el remitente transmite más que esto, el búfer devuelto está limitado a None bytes.

timeout

Opcional. Cuánto tiempo en milisegundos receive recibirá esperará un nuevo mensaje solo si la cola está vacía. El valor predeterminado es 300000 (300 segundos).

Código para Robot 1

# Send a math problem for the other Brain to solve

# Create the link
link = SerialLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.MANAGER)

# Do not run code UNTIL the Brains are linked
while not link.is_linked():
    wait(0.1, SECONDS)

brain.screen.print("Robot 1 - Manager")

"""
Change whether to "add" or "subtract",
then what numbers to use in the operation.
"""
packet = "add,7,2.5"

# Pad with spaces until it's exactly 16 bytes
while len(packet) < 16:
    packet = packet + " "

link.send(packet)

Código para Robot 2

# Solve the math problem that the other Brain sends

# Create the link
link = SerialLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.WORKER)

# Do not run code UNTIL the Brains are linked
while not link.is_linked():
    wait(0.1, SECONDS)

brain.screen.print("Robot 2 - Worker")
brain.screen.next_row()

# Receive exactly 16 bytes
buffer = link.receive(16)

# Remove the added " " padding
text = buffer.decode().strip()

# Separate the operator and numbers
parts = text.split(",")

operator = parts[0]
a = float(parts[1])
b = float(parts[2])

# Use what operator was sent
if operator == "add":
    result = a + b
elif operator == "subtract":
    result = a - b
# If not "add" or "subtract", do nothing
else:
    pass

brain.screen.print("Result = ", result)

received#

received registra una función que se llamará cada vez que el cerebro EXP reciba datos en serie.

Usage:
link.received(callback)

Parámetros

Descripción

callback

Una function previamente definida que se ejecuta cuando el EXP Brain recibe datos en serie.

received devolución de llamada se llaman con dos argumentos:

Firma de devolución de llamada:
callback(buffer, length)

Argumento

Descripción

buffer

Una matriz bytearray que contiene los datos en serie recibidos. La matriz de bytes puede ser mayor que el mensaje recibido.

length

El número de bytes válidos recibidos en el buffer para esta devolución de llamada. Utilice el buffer[:length] para acceder a los datos recibidos.

Código para Robot 1

# Send a message to the other robot

# Create the link
link = SerialLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.MANAGER)

# Do not run code UNTIL the Brains are linked
while not link.is_linked():
    wait(0.1, SECONDS)

brain.screen.print("Robot 1 - Manager")

link.send("HELLO")

Código para Robot 2

# Display the message that Robot 1 sends

# Create the link
link = SerialLink(Ports.PORT1, "VEXRoboticsLink123456789", VexlinkType.WORKER)

# Do not run code UNTIL the Brains are linked
while not link.is_linked():
    wait(0.1, SECONDS)

brain.screen.print("Robot 2 - Worker")
brain.screen.next_row()

def received_message(bytearray, length):
    # Slice the bytearray to the valid data
    data = bytearray[:length]  
    # Decode and strip the message before displaying it
    text = data.decode().strip()
    brain.screen.print("Got: ", text)

# Call received_message whenever a message is received
link.received(received_message)

anterior

MessageLink

siguiente

Consola

En esta página
  • Introducción
  • Crear un enlace
  • Métodos disponibles
    • is_linked
    • send
    • receive
    • received
Innovation First, International
​

VEX Y VEX Robotics son marcas comerciales o marcas de servicio de Innovation First, Inc. Copyright ©2026. Todos los derechos reservados. VEX Robotics, Inc. es una subsidiaria de Innovation First International, Inc. Todos los demás nombres / marcas de productos de terceros son propiedad de sus respectivos propietarios. Patentes y / o patentes pendientes - innovationfirst.com/patents Política de privacidad
del sitio /Términos de uso del sitio /Política de cookies /Política de privacidad del software

Visita la página de Facebook de VEX ROBOTICS Visita la página de Twitter de VEX ROBOTICS Visita la página de Instagram de VEX ROBOTICS Visita la página de YouTube de VEX ROBOTICS
Formulario de comentarios de la API de VEX

¡Valoramos tus comentarios! Utilice este formulario para compartir sugerencias, cumplidos o informar errores con la API de VEX. Su opinión nos ayuda a mejorar la documentación de la API de VEX.

​

Si tiene problemas técnicos o necesita atención al cliente, visite support.vex.com.

  • Send Happy Feedback
  • Send Sad Feedback

Nota: la URL actual se compartirá con tu mensaje

Al incluir tu dirección de correo electrónico, aceptas que VEX pueda enviarte correos electrónicos si tenemos preguntas sobre tus comentarios.
Política de privacidad >
Por favor, envíe sus comentarios. ¡Comentarios enviados con éxito!
Choose Which VEX IQ Generation to View

VEX IQ (1st gen)

VEX IQ (2nd gen)