Pages: [1] 2   Go Down
Author Topic: Comunicar Arduino con Mikrotik  (Read 3467 times)
0 Members and 1 Guest are viewing this topic.
Sevilla
Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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

Logged

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

Sevilla
Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
/*
 * 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..

Logged

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

Sevilla
Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

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

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

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

Sevilla
Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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??

Logged

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

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Este hilo que acaban de hacer creo que te viene que ni pintado
http://arduino.cc/forum/index.php/topic,77292.0.html
Logged

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

Sevilla
Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

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

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

La verdad que el ENC28J60 es un poco dolor de cabeza
Logged

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

Sevilla
Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged

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

Sevilla
Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
/*
  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...



* serialarduino.jpg (19.68 KB, 404x348 - viewed 26 times.)
Logged

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

Madriz
Offline Offline
Full Member
***
Karma: 0
Posts: 176
Glober Arduiner
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Sevilla
Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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???

Logged

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

Sevilla
Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

¿nadie se ha conectado por telnet con estas tarjetas????
Logged

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

Sevilla
Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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...

« Last Edit: November 17, 2011, 02:33:22 am by chambri » Logged

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

Sevilla
Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

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

Pages: [1] 2   Go Up
Jump to: