Sensores virtuales para Scratch, Enchanting y S4A

Scratch junto con Enchanting y S4A dispone de un sistema de comunicaciones con otras aplicaciones externas a través de comunicación TCP/IP.

Las tres aplicaciones pueden abrir un socket en el puerto 42001 de la dirección IP del ordenador donde esté corriendo. Por este socket puede recibir y enviar información a cualquier ordenador conectado a internet siguiendo un protocolo muy sencillo.

 

Para abrir el socket en cualquiera de las tres aplicaciones tenemos que ir al bloque Sensores y en la parte inferior encontramos dos funciones que están separadas del resto:

valor del sensor....  y    ¿sensor ...... activo?

 

Si pulsamos con el botón derecho del ratón en cualquiera de las dos funciones aparece el menú de la imagen. Seleccionando la tercera opción: permita las conexiones del sensor alejado quedará abierto el socket y a partir de ese momento puede recibir y enviar infromación. Esta opción queda registrada al guardar el proyecto donde se activó, así que al volver a abrir ese proyecto se volverá a activar el socket.

 

El protocolo de comunicación es muy sencillo:

  • Edtablecemso uan conexión TCP/IP con el puerto 42001 de la dirección IP del ordenador
  • Escribimos la orden "sensor-update" seguida del nombre que queramos dar al sensor virtual y finalmente un número

Eso creará un nuevo sensor con el nombre indicado y le asignará e número escrito en el comando. Por ejemplo la orden:

sensor-update nuevo_sensor 10  creará un sensor llamado nuevo_sensor y le asignará el valor 10

 

Una vez enviado el comando aparecerá el nuevo sensor en el menú desplegable de los valores de sensores con el nombre asignado. Si marcamos la casilla de la 

izquierda nos aparecerá en el escenario el valor asignado a este sensor virtual:

 

 
 
 
Ahora ya podemos utilizar el sersor virtual "nuevo_sensor"  en cualquier parte de nuestros scripts de Scratch, Enchanting o S4A. Siemprte que el programa reciba una conexión con un comando sensor-update ... con un valor distinto el sensor virtual mostrsrá ese valor y podrá usarse en condiciones o cualquier otra estructura del script.
 
Podemos crear todos los sensores virtuales que necesitemos.
 
Al tener abierto el socket los Broadcast que se utilicen en los scripts serán transmitidos a través de Internet al ordenador qeu eté conectado a ese puerto (42001). Por ejemplo si nos conectamos con un telnet al puerto 42001 del ordenador donde está corriendo Scratch podemos ver como se reciben los Brodcast generados:
 
Nos conectamos con telnet al puerto 42001 del ordenador local.

 

Cogemos la función enviar a todos y escribimos el mensaje que queremos enviar (en este caso Prueba de mensaje), a continuación hacemos doble click sobre la función enviar a todos para ue el mensaje se transmita.

 

Si miramos ahora la pantalla de telnet veremos:

 

telnet localhost 42001
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
broadcast "Prueba de mensaje"
 
Si creamos otros mensajes y lso enviamos irán apareciendo en nuevas líneas.
 
La opción de telnet la podemso utilizar para ver los mensajes enviados desde Scratch, pero no para enviar comandos de sensores virtuales ni Broadcast ya que el protocolo obliga a que los dos primeros bytes del comando o mensaje indiquen el tamaño (en caracteres) del mensaje.
 
Por esto es necesario desarrollar algún pequeño programa para poder enviar Broadcast o comandos de sensores virtuales a Scratch.