Recepción de datos por telnet

Bueno, perdonad que el título no sea demasiado explicativo, pero no me cabía. El título sería “Recepción de datos por telnet para enviar resultados por las salidas digitales”.

Antes de nada deciros que soy novato en cuanto al Arduino. Os explico por encima mi pregunta.

Tengo un Arduino configurado como servidor, que tan pronto alguien se conecta por telnet le sirve datos de las entradas analógicas. Lo que necesito ahora es que responda al revés, que al mismo tiempo que envía esos datos, si hay una orden del programa cliente la reciba y la cumpla, un ejemplo práctico sería este:

  • Máquina se conecta a Arduino
  • Arduino envía datos constantemente (es un sistema de monitorización)
  • Máquina evalúa datos y le dice al Arduino (en un momento cualquiera) que lo que tenga conectado por ejemplo en la salida 4 lo cambie de 0 a 1 (eso necesitaría un parser, pero no debería ser demasiado complicado)
  • Arduino cumple la función y sigue enviando datos al cliente.

Me podríais guiar un poco? Gracias por adelantado :slight_smile:

Por si os sirve de algo os dejo el código aqui, aunque no es muy diferente del ejemplo de servidor de la pagina de arduino.

#include <Client.h>
#include <Ethernet.h>
#include <Server.h>

int ledPin = 13;
int err = 0;
int val = 0;
int pin = 0;
char version[] = "Prototipo";
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 10, 1, 0, 121 };
byte gw[] = { 10, 1, 0, 100 };
byte subnet[] = { 255, 255, 255, 0 };
Server server = Server(23);

void setup()
{
  pinMode(ledPin, OUTPUT);
  Ethernet.begin(mac, ip, gw, subnet);
  server.begin();
}

void loop()
{
  Client client = server.available();
  if (client) {
    while (pin <= 5) {
      val = analogRead(pin);
      delay(1000);
      server.print("INPUT");
      server.print(":");
      server.print(pin);
      server.print(":");
      server.print(val);
      server.print(":");
      server.print("\n\r");
      pin++;
    }
    pin = 0;
  }
  // Nota: Esta condicion else es en plan debug para saber el tiempo de reaccion entre que la maquina se conecta al arduino y el arduino empieza a servir datos
  else {
    server.print("Ningun programa cliente conectado.");
    digitalWrite(ledPin, HIGH);
  }
}

Lo que tu quieres hacer a traves de telnet creo que es lo mismo que hace arsh (http://biot.com/arsh/) a través del puerto serie. No he visto el código de arsh, ni se nada de como se comunica arduino a través de ethernet. Pero intuyo que no será muy complicado modificar arsh para que mande la salida por TCP/IP en vez de por el puerto serie.

No sabía nada de ese proyecto, pero se acerca mucho a la implementación que quiero hacer para mi Arduino, le echaré un buen vistazo jeje. Muchas gracias Javier.