Go Down

Topic: Comunicar Arduino con Mikrotik (Read 3733 times) previous topic - next topic

Hola, estoy realizando un proyecto desde donde intento conectarme a un AP mikrotik desde arduino.
Os cuento lo que tengo:
Arduino Uno.
Shield ethernet ENC28J60  http://www.nuelectronics.com/estore/index.php?main_page=product_info&cPath=1&products_id=4

he conseguido las librerias correctas para este shield.
de este sitio https://github.com/turicas/Ethernet_ENC28J60

he cargado el ejemplo de telnetest y tengo ping a la ip que pongo pero no se que hace..
Code: [Select]
#include <Server.h>
#include <Ethernet.h>
#include <Client.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 123 };

Server server(80);

#ifdef ETHERSHIELD_DEBUG
#include <inttypes.h>
uint8_t *debugCodes;

void printSocketDebug() {
  debugCodes = Ethernet.returnDebug();
  if (debugCodes[0] != 255) {
    Serial.println("DEBUG:");
    for (int i = 0; debugCodes[i] != 255; i++) {
      Serial.print("  ");
      Serial.println(debug2str(debugCodes[i]));
    }
    Ethernet.clearDebug();
  }
}
#endif

void setup() {
  Serial.begin(9600);
  Serial.println("*** Init");
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop()
{
  Client client = server.available();

#ifdef ETHERSHIELD_DEBUG
  printSocketDebug();
#endif

  if (client) {
#ifdef ETHERSHIELD_DEBUG
  Serial.println("*** New client!");
#endif

    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.println(c);
        client.write(c);
      }
    }
#ifdef ETHERSHIELD_DEBUG
  Serial.println("*** Client disconnected.");
#endif

  }
}

en la consola serial, solo me aparece ***init

intento conectarme desde el pc al arduino y no se conecta.
( entro en cmd, y pongo telnet, después pongo o y la ip del arduino pero no tengo respuesta )

Mi consulta es que necesito conectarme mediante telnet pero estoy un poco perdido, ya he estado leyendo en los foros pero no me aclaro...

Alguna ayudita???

Os cuento a groso modo lo que necesito hacer.

Por un lado tengo un AP mikrotik que supuesta-mente es el server telnet, ( desde un pc me conecto a su telnet y me pide usuario y clave lo pongo y accedo a su consola para poder configurarlo )
por otro lado tengo arduino con el shield ethernet, que se configuraría como cliente telnet, ( si pulso un botón me manda una serie de comando a la consola para re-programarla )
:smiley-mr-green: :smiley-mr-green: :smiley-mr-green: :smiley-mr-green: :smiley-mr-green: :smiley-mr-green: :smiley-mr-green: :smiley-mr-green: :smiley-mr-green:

Mis proyectos con arduino.
1 Proyecto - Contador - EUREKA v5

joooo, estoy buscando y buscando y nada de nada, he encontrado varias paginas con codigos y de mas y no me funciona, he puesto el codigo de la shield que funciona y no me funciona, ejemplo:

utilizo el codigo web server:

Code: [Select]
/*
* Web Server
*
* A simple web server that shows the value of the analog input pins.
*/

#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 0, 30};

Server server(80);

void setup()
{
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop()
{
  Client client = server.available();
  if (client) {
    // an http request ends with a blank line
    boolean current_line_is_blank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        // if we've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so we can send a reply
        if (c == '\n' && current_line_is_blank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
         
          // output the value of each analog input pin
          for (int i = 0; i < 6; i++) {
            client.print("analog input ");
            client.print(i);
            client.print(" is ");
            client.print(analogRead(i));
            client.println("<br />");
          }
          break;
        }
        if (c == '\n') {
          // we're starting a new line
          current_line_is_blank = true;
        } else if (c != '\r') {
          // we've gotten a character on the current line
          current_line_is_blank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    client.stop();
  }
}


cuando le hago pin a la ip 192.168.0.30 funciona perfectamente.
intento acceder a http://192.168.0.30 - no obtengo nada y a demás el pin se pierde..

Mis proyectos con arduino.
1 Proyecto - Contador - EUREKA v5

aqui os dejo un video de lo que me pasa.. alguna idea??????????????????????

http://www.youtube.com/watch?v=jesKD_Uup8Y
Mis proyectos con arduino.
1 Proyecto - Contador - EUREKA v5

chiva

La librería de turicas está en desarrollo, por lo que no es muy buena idea usarla.
El sketch deja de funcionar porque almacena la página en memoria y al no tener suficiente, pues stackoverflow y adios.
Tampoco está preparada para tener 2 sockets abiertos, por lo que si haces un ping y entras a la vez también se vuelve loco.

Un saludo
Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

gracias chiva, me lo imaginaba pero como estoy un poco verde en esto.. pido opinión a los profesionales..

alguien ha utilizado o ha creado algo con este shield ?????????? no creo que sea muy difícil, pero no encuentro ningún tutorial de las funciones de las librerías de para este shield.

¿¿alguien sabe cual son las funciones y como funcionan??

Mis proyectos con arduino.
1 Proyecto - Contador - EUREKA v5

chiva

Este hilo que acaban de hacer creo que te viene que ni pintado
http://arduino.cc/forum/index.php/topic,77292.0.html
Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

gracias de nuevo chiva, este post tambien lo he visto y todas la paginas las he visitado, pero casi todas las librerias estan a medio hacer y muy limitadas..

aqui pongo webs que he visitado con los temas relacionados para adaptar este shield a las librerias de arduino.

http://srmonk.blogspot.com/2010/03/simplified-ethernet-library-for-28j60.html

https://github.com/turicas/Ethernet_ENC28J60

http://openenergymonitor.org/emon/node/80

http://jeelabs.net/projects/cafe/wiki/EtherCard

las he instaldo y probados y consigu server web pero no tienen implementado el cliente telnet.. que es lo que busco..

Estoy por comprar el shield de arduino y olvidarme del 28j60
Mis proyectos con arduino.
1 Proyecto - Contador - EUREKA v5

chiva

La verdad que el ENC28J60 es un poco dolor de cabeza
Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

gracias chiva, cuando tenga el otro shield si consigo lo que quiero lo colocare aquí, para que todos dispongamos de la información. con el 28j60 le daré otra utilidad.

Un salu2 y gracias a todos...
Mis proyectos con arduino.
1 Proyecto - Contador - EUREKA v5

bueno después de la espera ya tengo el nuevo shield ethernet basado en w5100.
Os comento mas o menos lo que he echo.
una vez conectado y configurado, cargo el sketch de telnet client. y este es el resultado que me da

me salen caracteres raros y supuesta-mente me deberia de pedir el usuario y la clave.. ¿no?

bueno os subo unas fotos para que veáis como me conecto al mikrotik con telnet.

abro el telnet de windows desde cmd.

Despues introduzco usuario = admin

Despues introduzco la clave = (pulso intro por que no tiene)

y por ultimo le paso parámetros para configurarlo.

bueno os dejo el código de arduino pero es el mismo que el que trae las libreria..
Code: [Select]
/*
  Telnet client

This sketch connects to a a telnet server (http://www.google.com)
using an Arduino Wiznet Ethernet shield.  You'll need a telnet server
to test this with.
Processing's ChatServer example (part of the network library) works well,
running on port 10002. It can be found as part of the examples
in the Processing application, available at
http://processing.org/

Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13

created 14 Sep 2010
by Tom Igoe

*/

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {
  192,168,0,2 };

// Enter the IP address of the server you're connecting to:
byte server[] = {
  192,168,0,1 };

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 23 is default for telnet;
// if you're using Processing's ChatServer, use  port 10002):
Client client(server, 23);

void setup() {
  // start the Ethernet connection:
  Ethernet.begin(mac, ip);
  // start the serial library:
  Serial.begin(9600);
  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:
  if (client.connect()) {
    Serial.println("connected");
  }
  else {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

void loop()
{
  // if there are incoming bytes available
  // from the server, read them and print them:
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  // as long as there are bytes in the serial queue,
  // read them and send them out the socket if it's open:
  while (Serial.available() > 0) {
    char inChar = Serial.read();
    if (client.connected()) {
      client.print(inChar);
    }
  }

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    // do nothing:
    while(true);
  }
}


Espero que este todo claro y que si se os ocurre el porque me ayudéis...

Mis proyectos con arduino.
1 Proyecto - Contador - EUREKA v5

aero_yo

Cuando haces client.read(), mándalo por serial con Serial.write(c), y lo mismo con client.print,() estás leyendo bytes.

aero_yo, he echo lo que me dices pero no hace nada. sigue igual.




También he cambiado el valor de la variable c, y le he puesto en byte. pero nada de nada.. alguna idea???

Mis proyectos con arduino.
1 Proyecto - Contador - EUREKA v5

¿nadie se ha conectado por telnet con estas tarjetas????
Mis proyectos con arduino.
1 Proyecto - Contador - EUREKA v5

#13
Nov 17, 2011, 08:07 am Last Edit: Nov 17, 2011, 08:33 am by chambri Reason: 1
hola amigos, estoy buscando información y me he encontrado unas API de mikrotik en c para conectarse a el y pasarles los comandos.
la cuestión es como se le agrega esto al arduino??? alguien ha echo algo parecido??? o conoce algún método para este tipo de conversión.

os pongo el enlace para que veáis el código en c

http://wiki.mikrotik.com/wiki/API_in_C

También existen API para otros lenguajes como c++, c# , php etc.... si alguien sabe como agregar alguno de estos códigos al arduino , porfavor ayuden me...

Mis proyectos con arduino.
1 Proyecto - Contador - EUREKA v5

Me voy contestando.

¿Puedo programar Arduino en C?
De hecho, ya lo estás haciendo; el lenguaje de Arduino es meramente un grupo de funciones C/C++ que pueden ser llamadas desde tu código. Tu sketch pasa por cambios menores (generación automática de prototipos, etc.) y luego es enviado directamente al compilador C/C++ (avr-g++). Todas las construcciones C y C++ soportadas por avr-g++ debiesen funcionar con Arduino. Para más detalles, consulta la página sobre [Hacking/BuildProcess | el proceso de construcción de Arduino]].

También existe una API para C++ aquí os dejo el enlace.

http://wiki.mikrotik.com/wiki/API_In_CPP

Mis proyectos con arduino.
1 Proyecto - Contador - EUREKA v5

Go Up