Labview: Socket Server

socketsr

Aqui temos um exemplo de servidor socket que poderá ser utilizado para receber comandos remotamente e executá-los, neste caso, utilizando a mesma porta, 9873, do Gogo Monitor.

Com isso, poderemos implementar novas funcionalidades de comunicação e controle da Gogo Board ou até mesmo para várias placas conectadas à um mesmo computador.

Labview: Socket Client

socketcw

Esta é a VI sugerida para enviar dados à Gogo Board, utilizando a comunicação socket com o Googo Monitor. Neste exemplo, a placa deverá emitir o sinal sonoro de bip.

Outras funções estão disponíveis, vide documentação do protocolo aqui.

Gogo Board + Processing: Socket

Na versão 2.0 do Processing, algumas coisas foram modificadas e melhoradas, assim, o código apresentado anteriormente para a ver são 1.5 precisou ser modificada conforme abaixo.


import processing.net.*;
Client c;
String data;

void setup() {
size(200, 200);
c = new Client(this, "192.168.5.101", 9873);
}

void draw() {
if (c.available() > 0) {
}
c.write("beep");
delay(1000);
}

Neste exemplo, a conexão é feita e o comando enviado será beep.

Gogo Board + PHP: Socket

Abaixo temos um exemplo de código para realizar uma conexão socket em php ao Gogo Monitor. Aqui usamos o comando beep, porém outros comandos estão disponíveis, vide o manual do protocolo.


<?php

$socket = socket_create(AF_INET, SOCK_STREAM, 0);
socket_bind($socket, "127.0.0.1");
socket_connect($socket, "127.0.0.1", 9873);

$msg = "beep";

$sock_data = socket_write($socket, $msg, strlen($msg));

$res = "Data sended with response $sock_data.";

echo $res;

?>

Scratch + Labview – IV

scratch-vss

Para o envio do valor ao Scratch, deveremos exibir o sensor virtual, conforme acima, ativando esta opção nas opções do sensor:

sliderss

Além disso, precisaremos ativar a função de exibição:

exslider

Se tudo estiver correto, já estaremos prontos para receber dados do Labview.

Scratch + Labview – II

lvcntsct

Com o códico pronto no Scratch, bastará utilizarmos a VI acima. Se tudo estiver correto o esquilo se moverá conforme programado.

Alguns detalhes devem ser levados em conta, como a configuração do número ip correto aonde o Scratch estiver sendo utilizado, bem como os detalhes da formação da mensagem que será enviada.

Tal mensagem consiste em uma sequência de três zeros, o tamalho da mensagem, e a mesma própriamente dita, no formato broadcast “mensagem”, ficando desta forma:

0 0 0 E broadcast "hi"

Ou ainda:

0 0 0 C broadcast hi

Dependendo do software utilizado.

Scratch + Labview

scratchbc

Como já vimos, o Scratch permite que dados sejam enviados à ele através do protocolo socket.

Acima temos um exemplo de código desenvolvido no Scratch para receber a palavra hi e mover o esquilo.

A função do bloco sensor será apenas para ativarmos a função de recebimento de mensagens no Scratch, através das propriedades deste bloco, conforme abaixo.

scratchrm

Socket: Gogo Board + VB – II

Abaixo temos o código utilizado no VB:


Private Sub Command1_Click()
Winsock1.Connect
End Sub

Private Sub Command2_Click()
Winsock1.SendData "beep"
End Sub

Private Sub Form_Load()
Winsock1.RemoteHost = "192.168.5.101"
'Winsock1.RemotePort = "42001"
Winsock1.RemotePort = "9873"
End Sub

Private Sub Form_Unload(Cancel As Integer)
Winsock1.Close
End Sub

Ao executá-lo a placa emitirá o sinal sonoro de beep. Outros comandos podem ser utilizados, vide documentação.

Usando o Protocolo Socket da Gogo Board

Baseando-nos nesta documentação, podemos nos comunicar com a placa através do protocolo socket, neste caso, utilizando a linguagem Processing.

Abaixo, temos o exemplo do comando beep, outros podem ser usados de acordo com a documentação do próprio protocolo.

void setup()
{
size(400,300);
background(#FFCC00);
fill(0);
noStroke();
}

void draw()
{
scale(1.3);
try
{
String host = "127.0.0.1"; // change

text( "Connecting to " + host + " ...", 10, 20 );
Socket s = new Socket( host, 9873 );

text( "Connection established to " + s.getInetAddress(), 10, 30 );

BufferedReader in = new BufferedReader( new InputStreamReader( s.getInputStream() ) );
PrintStream out = new PrintStream( s.getOutputStream() );

int lineNum = 50;

out.println( "beep" );
out.println( "stop" );
out.flush();

String t = in.readLine();
System.out.println( t );

fill(0);
text("Ping Done.", 10, lineNum+10);

try
{
Thread.sleep( 1000 );
} catch ( Exception e )
{
}

in.close();
out.close();
}
catch ( Exception e )
{
println( "Error" + e );
}
}

Diversas outras linguagens podem interagir com a Gogo Board por meio deste protocolo, por exemplo, Delphi, Lua, C#, C++, Flash, etc, sendo até mais interessamte que o trabalho com o protocolo serial diretamente, ja que algumas linguagens não contam com suporte a ele.