Como seguramente sabréis, tengo un Arduino desde hace algunas semanas. El caso es que me he puesto a trastear con él y he cosillas bastante interesantes. Además, el módulo de Ethernet multiplica sus posibilidades, pudiendo controlar el Arduino desde un iPhone, iPad o vía web. Aprovechando esto, he hecho un pequeño Hello World, que en este caso ha sido básicamente encender un LED desde el iPhone (aunque perfectamente se podría hacer desde otro terminal o desde el navegador). Para ello, he usado la librería de Ethernet_28J60, que además de añadir compatibilidad con más placas tanto de Ethernet Shield como de Arduino, es mucho más simple que la oficial. La podéis descargar desde aquí. Para instalarla, descomprimís el fichero, os váis a la aplicación de Arduino, hacéis click derecho y seleccionáis “Mostrar contenido del paquete”. Después, vais hasta la ruta /Contents/Resources/Java/Libraries y ahí dentro arrastráis las dos carpetas del zip que hemos descargado.

Una vez hecho todo, simplemente conectamos el LED al puerto 7 (o al que queramos, pero ahí tiene que ir la patilla larga), y al puerto GND o de tierra (ahí va la patilla corta). Aquí tenéis el código para Arduino:

#include "etherShield.h"
#include "ETHER_28J60.h"

static uint8_t mac[6] = {0x54,0x55,0x58,0x10,0x00,0x24};
static uint8_t ip[4] = {192,168,2,15}; // Ponemos un IP que le asignemos al Arduino. IMPORTANTE: No puede coincidir con otra ya usada en nuestra red
static uint16_t port = 80;

ETHER_28J60 ethernet;

int led = 7; // Ponemos el pin en el que tenemos nuestro LED

void setup() {

ethernet.setup(mac, ip, port);
Serial.begin(9600);
pinMode(led, OUTPUT);
digitalWrite(led, LOW);
}

void loop() {

  char* params;
  if (params = ethernet.serviceRequest()){

    if (strcmp(params, "0") == 0){

      digitalWrite(led, LOW); // Ponemos que en caso de que se haga un HTTP Request a 192.168.2.15/0 se apague el LED
    }else if (strcmp(params, "1") == 0){

      digitalWrite(led, HIGH); // Ponemos que en caso de que se haga un HTTP Request a 192.168.2.15/1 se encienda el LED
    }

    ethernet.respond();
  }
}

Con eso ya tenemos la parte del Arduino. Ahora toca la parte de iPhone. En realidad, la parte del iPhone es la más fácil. Antes de ir con el código, debemos de declarar en nuestro .h una variable de tipo int con nombre “tag” (sin comillas). Dicho esto, aquí va el código:

-(void)viewDidLoad {

    [super viewDidLoad];
    tag = 0;
}

- (IBAction)arduino:(id)sender {

    NSString *urlString = [NSString stringWithFormat:@"192.168.2.15"];
    if (tag == 0) {

        urlString = [urlString stringByAppendingString:@"/1"];
        tag = 1;
    } else if (tag == 1) {

        urlString = [urlString stringByAppendingString:@"/0"];
        tag = 0;
    }

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:urlString]];
    [request setHTTPMethod:@"GET"];
    [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
}

Y con esto ya está todo. Si no disponemos de un iPhone, podemos acceder desde el navegador a 192.168.2.15/0 para encender y 192.168.2.15/1. En mi caso, yo he puesto la IP que he usado, pero para probarlo vosotros, debéis poner la IP que habéis establecido en la parte de Arduino. Al principio del post tenéis un vídeo con el resultado.

¡Un saludo!

Anuncios