• 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
Ir para o conteúdo principal
Ctrl+K

< Back to Platform Select

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

Navegação da secção

  • Blocos
  • Python
    • Transmissão
    • Movimento
    • Som
    • Visão
    • Ecrã
    • Controlador
    • Sensação
    • Inercial
    • Dispositivos de 3 fios
    • Pneumático
    • Cérebro
    • Cartão SD
    • Braço de 6 eixos
    • Torre de sinalização
    • VEXlink
      • Link da mensagem
      • SerialLink
    • Consola
    • Lógica
    • Bibliotecas MicroPython
  • C++
  • Tutoriais VEXcode

Navegação da 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

Link da mensagem#

  • Introdução

  • Criar um link

  • Métodos disponíveis

    • está_ligado

    • enviar

    • receber

    • recebido

Introdução#

O MessageLink permite que dois EXP Brains comuniquem enviando mensagens curtas com dados opcionais. Foi concebido para a coordenação entre robôs — como iniciar rotinas, partilhar resultados de sensores ou desencadear comportamentos noutro robô.

Cada utilização de send adiciona uma mensagem à fila do EXP Brain ligado, e a fila é lida pela ordem de chegada (FIFO). Se forem enviadas várias mensagens antes de o outro EXP Brain utilizar receive, estas serão armazenadas e devolvidas uma de cada vez, pela ordem em que foram enviadas. Como as mensagens podem ser colocadas em fila, enviar repetidamente o mesmo estado a cada iteração do ciclo pode criar uma acumulação; para lógica crítica em termos de tempo, envie apenas quando os valores se alteram.

Importante: Ambos os robots devem estar a executar projetos que utilizem MessageLink em simultâneo, caso contrário não será enviada/recebida qualquer mensagem.

Esta página utiliza o link como exemplo o nome MessageLink Substitua-o pelo nome que configurou se necessário.

Segue-se uma lista dos métodos disponíveis:

  • is_linked – Retorna se este Cérebro está ativamente ligado ao seu Cérebro emparelhado.

  • send – Envia uma mensagem ao cérebro emparelhado.

  • receive – Aguarda e devolve a próxima mensagem recebida.

  • received – Regista uma função a chamar sempre que uma nova mensagem é recebida.

Criar um link#

Crie um MessageLink em ambos os EXP Brains para estabelecer um canal de comunicação entre eles — seja sem fios com os rádios V5 Robot Radios ou através de um cabo Smart Cable — para que os robôs possam enviar mensagens entre si.

MessageLink(smartport, name, linktype, wired)

Parâmetro

Descrição

smartport

A porta inteligente utilizada para esta ligação é a porta à qual o rádio do robô V5 está ligado (sem fios) ou à qual o cabo inteligente está ligado (com fios). Escreve-se como Ports.PORTx , onde x é o número da porta.

name

O nome único a atribuir a este link, em formato de texto.
Nota: Este nome deve ser suficientemente longo para criar um ID único, evitando que corresponda acidentalmente ao link de outra equipa.

linktype

A função que este Cérebro desempenhará para este par de ligações. Cada par deve incluir um Gestor e um Trabalhador:

  • VexlinkType.MANAGER – Utilizar para o robô que enviará mais mensagens ou mensagens maiores. Os Gestores têm uma maior largura de banda de saída (~1040 bytes/seg).
  • VexlinkType.WORKER – Utilize para o robô que enviará menos mensagens ou mensagens mais pequenas. Os Trabalhadores têm uma largura de banda de saída mais baixa (~520 bytes/seg).

wired

Opcional. Indica se a ligação é com ou sem fios:

  • True – Os EXP Brains estão ligados através de um Smart Cable.
  • False (padrão) – Os EXP Brains ligam-se sem fios utilizando rádios V5 Robot.

Código para o Robot 1

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

Código para o Robot 2

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

Métodos disponíveis#

Após configurar o MessageLink e ligar os Brains, pode utilizar os métodos abaixo para enviar, receber e responder a mensagens.

is_linked#

O método is_linked retorna se os EXP Brains num MessageLink estão emparelhados entre si.

  • True – Os dois EXP Brains estão emparelhados e a comunicar neste link.

  • False – Os dois cérebros EXP não estão emparelhados neste link.

Nota: É uma boa prática verificar sempre se os EXP Brains estão ligados no início de um projeto antes de executar qualquer outro código.

Usage:
link.is_linked()

Parâmetros

Descrição

Este método não tem parâmetros.

Código para o Robot 1

# Tell the other robot when the screen is being pressed

# Create the link
link = MessageLink(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")

# Continuously send if the screen is being pressed
while True:
    if brain.screen.pressing():
        link.send("pressed")
    else:
        link.send("released")

    wait(50, MSEC)

Código para o Robot 2

# Display if the other robot's screen is being pressed

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

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

# Continuously check if Robot 1 has sent "pressed"
while True:
    brain.screen.clear_screen()
    brain.screen.set_cursor(1, 1)
    brain.screen.print("Robot 2 - Worker")
    brain.screen.next_row()

    if link.receive() == "pressed":
        brain.screen.new_line()
        brain.screen.print("Manager is being pressed!")

    wait(50, MSEC)

send#

send envia uma string e/ou um número inteiro e/ou um número de ponto flutuante para o outro EXP Brain ligado.

Usage:
send(string, integer, float)

Parâmetros

Descrição

string

A sequência de caracteres a enviar para o outro EXP Brain ligado.

integer

Opcional. Um número inteiro para enviar ao outro EXP Brain ligado.

float

Opcional. Um número de ponto flutuante para enviar ao outro EXP Brain ligado. Os números de ponto flutuante são formatados com 4 casas decimais; se forem fornecidas menos casas decimais, serão adicionados zeros à direita até que sejam apresentados 4.

Se apenas a string string for enviada, o outro EXP Brain ligado receberá exatamente essa string.

Se forem incluídos integer e/ou float , o Brain receptor recebe uma única string codificada que combina todos os campos por esta ordem: .string_integer_float

Exemplo: Usando link.send(“string”, 1, 2.55) é recebido como .string_1_2.5500.

Código para o Robot 1

# Tell the other robot when the screen is being pressed

# Create the link
link = MessageLink(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")

# Continuously send if the screen is being pressed
while True:
    if brain.screen.pressing():
        link.send("pressed")
    else:
        link.send("released")

    wait(50, MSEC)

Código para o Robot 2

# Display if the other robot's screen is being pressed

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

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

# Continuously check if Robot 1 has sent "pressed"
while True:
    brain.screen.clear_screen()
    brain.screen.set_cursor(1, 1)
    brain.screen.print("Robot 2 - Worker")
    brain.screen.next_row()

    if link.receive() == "pressed":
        brain.screen.new_line()
        brain.screen.print("Manager is being pressed!")

    wait(50, MSEC)

Código para o Robot 1

# Tell the other robot where the screen was pressed

# Create the link
link = MessageLink(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")
brain.screen.next_row()
brain.screen.print("Tap to send circles")

# Send the coordinates whenever the screen is pressed
while True:
    if brain.screen.pressing():
        x = brain.screen.x_position()
        y = brain.screen.y_position()

        link.send("touch", x, y)

    wait(10, MSEC)

Código para o Robot 2

# Draw a circle where Robot 1's screen was pressed

# Create the link
link = MessageLink(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")

while True:
    # Get the full encoded string
    circle_coordinates = link.receive(200)

    if circle_coordinates:

        # Split the encoded string by _
        parts = circle_coordinates.split("_")

        if len(parts) == 3:
            # Convert the coordinates back into numbers
            x = float(parts[1])
            y = float(parts[2])

            brain.screen.set_fill_color(Color.WHITE)
            brain.screen.draw_circle(x, y, 20)

    wait(10, MSEC)

receive#

receive returns the next queued message from the other linked EXP Brain. Messages are read in FIFO order (oldest unread first). If the queue is empty when receive is called, it waits up to the specified timeout for a new message. If no message arrives in that window, receive returns None, and any message sent afterward remains in the queue to be read the next time receive is used.

Se o outro EXP Brain ligado enviar apenas uma string string, receive e devolverá exatamente essa string.

Se o outro EXP Brain ligado enviar um número inteiro e/ou de ponto flutuante, receive e devolve uma única string codificada que combina todos os campos por esta ordem: .string_integer_float

Por exemplo, se o outro EXP Brain ligado utilizar link.send(“string”, 1, 2.55), então a utilização de link.receive() devolve uma string codificada como .string_1_2.5500. Pode dividir esta string codificada (ver exemplos abaixo) para extrair o nome da mensagem, valores inteiros e de ponto flutuante.

Se preferir evitar a divisão/análise manual, utilize received para registar um manipulador para um nome de mensagem específico; o manipulador recebe os valores enviados como argumentos.

Usage:
receive(timeout)

Parâmetros

Descrição

timeout

Opcional. Tempo em milissegundos receive para aguardar por uma nova mensagem apenas se a fila estiver vazia. O predefinido é 300.000 (300 segundos).

Código para o Robot 1

# Tell the other robot when the screen is being pressed

# Create the link
link = MessageLink(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")

# Continuously send if the screen is being pressed
while True:
    if brain.screen.pressing():
        link.send("pressed")
    else:
        link.send("released")

    wait(50, MSEC)

Código para o Robot 2

# Display if the other robot's screen is being pressed

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

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

# Continuously check if Robot 1 has sent "pressed"
while True:
    brain.screen.clear_screen()
    brain.screen.set_cursor(1, 1)
    brain.screen.print("Robot 2 - Worker")
    brain.screen.next_row()

    if link.receive() == "pressed":
        brain.screen.new_line()
        brain.screen.print("Manager is being pressed!")

    wait(50, MSEC)

Código para o Robot 1

# Send a math problem for the other Brain to solve

# Create the link
link = MessageLink(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.
"""
link.send("add", 7, 2.5)

Código para o Robot 2

# Solve the math problem that the other Brain sends

# Create the link
link = MessageLink(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()

math_problem = link.receive()

if math_problem:

    # Split the encoded string by _
    parts = math_problem.split("_")

    if len(parts) == 3:
        # Remove the . from the beginning of the string
        operator = "".join([c for c in parts[0] if c.isalpha()])

        # Separate out the numbers for the operation
        a = int(parts[1])
        b = float(parts[2])

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

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

received#

received regista uma função a ser chamada sempre que o EXP Brain receber uma mensagem enviada.

Usage:
link.received(message, arg)

Parâmetros

Descrição

message

O nome da mensagem (string) a corresponder. Quando o nome de uma mensagem recebida corresponde a este valor, é chamada a função de chamada de retorno callback.

callback

Uma função previamente definida que é executada quando o EXP Brain recebe uma mensagem correspondente à mensagem message.

received chamada de retorno com quatro argumentos:

Subscrição de callback:
callback(message, linkname, index, value)

Discussão

Descrição

message

O nome da mensagem recebida (por exemplo, “add”).

linkname

O nome do link a partir do qual a mensagem foi recebida.

index

O valor inteiro enviado com a mensagem (se fornecido).

value

O valor float enviado com a mensagem (se fornecido).

Código para o Robot 1

# Send a math problem for the other Brain to solve

# Create the link
link = MessageLink(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.
"""
link.send("add", 7, 2.5)

Código para o Robot 2

# Solve the math problem that the other Brain sends

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

while not link.is_linked():
    wait(0.1, SECONDS)

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

# add if "add" is received
def add_cmd(message, linkname, a, b):
    result = a + b
    brain.screen.print("Result = ", result)

# subtract if ""subtract" is received
def subtract_cmd(message, linkname, a, b):
    result = a - b
    brain.screen.print("Result = ", result)

# Create event handlers for "add" and "subtract"
link.received("add", add_cmd)
link.received("subtract", subtract_cmd)

anterior

VEXlink

próximo

SerialLink

On this page
  • Introdução
  • Criar um link
  • Métodos disponíveis
    • is_linked
    • send
    • receive
    • received
Innovation First, International
​

VEX e VEX Robotics são marcas registadas ou marcas de serviço da Innovation First, Inc. Copyright ©2026. Todos os direitos reservados. A VEX Robotics, Inc. é uma subsidiária da Innovation First International, Inc. Todos os outros nomes/marcas de produtos de terceiros são propriedade dos seus respetivos proprietários. Patentes e/ou patentes pendentes - innovationfirst.com/patents
Política de Privacidade do Site / Termos de Utilização do Site / Política de Cookies / Política de Privacidade do Software

Visite a página do VEX Robotics no Facebook. Visite a página do VEX Robotics no Twitter. Visite a página do VEX Robotics no Instagram. Visite a página da VEX Robotics no YouTube.
Formulário de feedback da API VEX

Valorizamos o seu feedback! Utilize este formulário para partilhar sugestões, elogios ou comunicar erros na API VEX. A sua contribuição ajuda-nos a melhorar a documentação da API VEX.

​

Se estiver a ter problemas técnicos ou precisar de apoio ao cliente, visite support.vex.com.

  • Send Happy Feedback
  • Send Sad Feedback

Nota: o URL atual será partilhado com a sua mensagem.

Ao incluir o seu endereço de e-mail, concorda que a VEX poderá enviar-lhe e-mails caso tenhamos dúvidas sobre o seu feedback.
Política de Privacidade >
Por favor, envie o seu feedback. Feedback enviado com sucesso!
Choose Which VEX IQ Generation to View

VEX IQ (1st gen)

VEX IQ (2nd gen)