jueves, 5 de marzo de 2020

Mac para programar Apps IOS por menos de 400€

Está claro, has decido que quieres programar aplicaciones para dispositivos IOS,(iPhone,iPad, Apple TV o Apple watch) por lo tanto necesitas un ordenador de Apple, un Mac. No voy a valorar otros dispositivos, por estos mundos de internet encontrarás muchas personas que te dirán que hay alternativas como los hackintosh, que van mejor, más baratas, etc,etc,etc.
¡NO! , pero un no rotundo. ¿Por qué? Porque lo que quieres es empezar a programar, aprender cuanto antes a desarrollar e invertir tu tiempo en formarte y crear Apps lo antes posible. Con alternativas como la mencionada, tu tiempo lo emplearás en documentarte para gestionar incidencias y problemas que te irán surgiendo con el uso de un equipo que estás usando para una función para  la que no fue pensado. Tu tiempo también es muy valioso, puede que lo que más, y con esta opción perderás mucho.
¿Significa eso qué me debo gastar los 2.699€ del Macbook Pro  o los 6.499 € de la configuración base del Mac Pro? Pues no, afortunadamente no. Y si puedes hacerlo, este no es tu artículo, cómpralo y a disfrutar. Vamos a intentar conseguirlo por menos de 400€.
Así que vamos a intentar ser prácticos. Primero, ¿qué necesitamos? Pues desde el 4 de marzo de 2020 necesitamos Xcode 11 si queremos que nuestra aplicación pueda venderse en la AppStore puesto que ha de ir compilada con el SDK de IOS 13. La noticia aquí.
¿Qué implica esto? Que nuestro equipo debe ser capaz de correr mínimo la versión de OSX 10.14.x o Mojave, que es la anterior a la actual, Mac OS Catalina o 10.15.x. Cuales son:

  • MacBook (principios de 2015 y posterior)
  • MacBook Air (mediados de 2012 o posterior)
  • MacBook Pro (mediados de 2012 o posterior)
  • Mac mini (finales de 2012 o posterior)
  • Mac Pro (mediados de 2010, mediados de 2013 con tarjetas compatibles con Metal y finales de 2013)
  • iMac (finales de 2012 o posterior)
  • iMac Pro (2017)
Afortunadamente para correr OSX Catalina son compatibles los mismos equipos, aunque el requisito de RAM sube de 2 a 4 GB. Los puedes consultar aquí.
Como asimilo que estamos ante un presupuesto ajustado elimino directamente los Mac Pro e iMac Pro. También elimino el MacBook de 12. El procesador no está mal, es un intel Core M, que para tareas ofimáticas no está mal, pero carece de refrigeración, por lo que a nada que lo fuerces se calentará y aún bajará más el rendimiento. El siguiente punto sería decidir entre un equipo de sobremesa o un portátil.
Para mis preferencias personales, cualquier tarea de programación se realiza mejor en una pantalla grande y más cuando estás aprendiendo. Poder visualizar varias ventanas, una con un tutorial o los apuntes y el IDE en otra ventana mientras escuchas música en otra no tiene precio. ¡¡¡Hasta ahora usaba un Imac de 2009!!! con High Sierra 12 GB de RAM y un SSD. Por cierto sigue prestando servicio cada día como un campeón.
Ahora uso un Macbook Pro 13 de 2014 conectado a un monitor externo de 29”. Para mi esta configuración tiene muchas ventajas, has de añadir el sobrecoste de un monitor, teclado y ratón, pero sigues teniendo un portátil para cuando lo necesites.
Pero sigamos, estamos buscando un equipo para ti. Es recomendable que tenga 8GB de RAM y un disco SSD.
Los equipos de 2012, tan solo llevaban SSD de origen los MacBook Air y los Macbook Pro Retina. El resto es una opción que pocas unidades montaban en origen. Y aquí hago un inciso, ¿y el procesador? Realmente Xcode no es exigente en este aspecto, cualquier configuración de estas te ofrecerá un rendimiento suficiente a nivel de procesador, por tanto el problema lo tenemos en la RAM y el SSD.


Imac




Los Imac de 2012 ya se tratan de los modelos “finos”. Si eres un poco manitas, se puede montar un SSD de manera relativamente sencilla, pero no apta para todos los públicos y te aseguro que se nota más que el disco duro sea SSD que el procesador en el rendimiento final del equipo. 
Aquí explican paso a paso cómo hacerlo, puedes valorarlo. Si no te ves capaz de montarlo descartaría esta opción o añadiría un sobrecoste de 100-150€ más el disco que escojas que es lo que están cobrando por montarlo. La RAM tampoco es fácil de ampliar pues implica también el desmontaje de la pantalla. Como consuelo, no está soldada. En este equipo si te decides a mejorarlo, sí que recomiendo ampliar RAM y SSD en la misma operación, pues es más delicado.

Mac Mini


Los Mac Mini, pueden ser una buena opción si ya tienes disponibles los periféricos de un PC anterior como monitor, teclado y ratón. Son ampliables, aunque en esta versión de 2012 en adelante ya es algo más complejo. He visto buenas ofertas de equipos de 2014-15 y son equipos robustos y bastante modulares, para lo que es un mac.

Macbook air


Macbook air 2012 suelen montar mínimo procesadores i5 a 1.3GHz, que es suficiente para la mayoría de las tareas. El problema viene porque las configuraciones base tan solo llevan 4GB de RAM y en este modelo va soldada, no es ampliable. 

El disco duro  suele ser de 128GB, un poco escaso, y aunque se puede sustituir son más caros y algo más complejo. De todas maneras, si encuentras una configuración con 8 GB de RAM y batería en buen estado bien de precio no es una mala opción. La batería es muy sencilla de sustituir en este modelo y se puede conectar a un monitor externo mediante el puerto Thunderbolt. 

Prepara al menos 50-60€ para una batería clónica de calidad.


Macbook Pro



Macbook Pro Mid 2012 - 13”, (Ultimo no retina). Esta sería una de mis configuraciones preferidas por su relación calidad precio y por lo que te voy a explicar ahora. La configuración básica monta un Core i5 de dos núcleos a 2.5GHz y 4GB de RAM y disco duro HDD de 500GB y SuperDrive. Es fácilmente ampliable prácticamente en todas sus características. 

La RAM se puede aumentar hasta los 16GB, y el disco duro mecánico es fácilmente accesible y por tanto sustituible por un SSD. Pero si eres solo un poco más manitas, puedes desmontar la SuperDrive y montarte un equipo con dos discos duros y configurarlo como una FusionDrive, obteniendo velocidad y espacio de manera muy económica. Además tendrás más puertos disponibles que en un Air y en un equipo mejor preparado para tareas más exigentes.
Este portátil lo puedes conseguir por 200€-300€  según su configuración, a través de páginas de segunda mano (tipo eBay) o en aplicaciones como Wallapop. A esto deberás sumarle 25-50€ por un SSD  (128 o 256GB) y 40€ por 8GB de RAM (pues de origen trae 2 módulos de 2GB y no quedan slots libres). Es posible que también debas sustituir la batería, súmale unos 50€ más.
He visto algunos ya “tuneados” con SSD y 8GB de RAM por menos de 400€ en la versión con procesador i7, pero cuesta encontrarlos. Si te atreves te podrás ahorrar algún euro. Cómo proceder lo puedes consultar aquí.

Es necesario “tunearlos”?


En todas las configuraciones que os he comentado he insistido en actualizar el disco duro a uno de estado solido o SSD y subir la RAM al menos a 8GB. Eso no significa que estos equipos sean inútiles en su configuración standard, pero es que el salto cualitativo y cuantitativo en prestaciones es realmente muy notable.
Pero nada te impide realizar la inversión a plazos, puedes comprar los equipos y actualizarlos más adelante aprovechando ofertas especiales para reducir la inversión e incluso puede resultar suficiente para tu nivel de exigencia con este hardware. Con esta entrada lo único que pretendo es que tengas en cuenta es cuales de estos equipos se pueden actualizar y que partes.

Y si lo prefiero nuevo?

Pues depende, he visto ofertas del macbook air saliente por 850€, con 8GB de RAM y 128GB de disco SSD, pero ya puestos intentaría optar por uno con pantalla retina. Los nuevos macbook air retina (o true tone) son actualmente los que más “razonables” de precio encuentro, tienen pantalla retina, procesadores i5 y vienen con un mínimo de 8GB de RAM. Está en 1.249€, pero a veces hay sitios con descuentos interesantes.
 Descartaría el Imac en su configuración más básica, pues viene con disco duro mecánico (sí HDD en el 2020) y parte de 1.300€ con un doble núcleo. Para tener disco fusión (SSD+HDD), hay que optar por la opción de 21’5 con pantalla retina y hablamos de 1.699€ eso sí con un procesador de seis núcleos.
Los Macbook Pro actuales, prácticamente intocables. El de 13” a partir de 1499€ con 8GB y SSD de 128GB con Intel Core i5 de 4 núcleos, los de 16…puff.

En resumen


Espero haberte ayudado. Ten en cuenta que este portátil además de Xcode, moverá sin problemas Android Studio, Eclipse, Visual Studio y prácticamente cualquier IDE que necesites, además de por supuesto navegadores web, Office, etc. Si lo tuyo es el diseño gráfico o la edición de video en 4K , necesitas invertir más dinero y puede que incluso valorar un PC, pero para programar APPs IOS no te queda otra si quieres compilarla y subirla a la App Store.
 Si te decides por comprar de segunda mano intenta probarlo antes o comprar en sitios de confianza y anímate a restaurarlo, es fácil y encontrarás documentación de sobras.
Un ultimo consejo, si te decides por un portátil pulsa sobre la manzana, arriba a la izquierda, después Acerca de este MAC y pulsa informe del sistema. Te saldrá una pantalla como esta:

Observa los ciclos de la batería, cerca de los 1000 deberás pensar en sustituirla.

viernes, 7 de julio de 2017

Arduino y bluetooth ( I )


Arduino y bluetooth ( I )

Iniciaremos una serie de entradas relacionadas con Arduino y Bluetooth.
Sin profundizar demasiado, bluetooth es un tipo de comunicación inalámbrica entre dispositivos electrónicos. Su principal característica , es la facilidad con la que estos dispositivos se encuentran y se configuran de forma autónoma en función de los servicios que implementan.
Por contra, la distancia útil de esta comunicación, del orden de unos metros de alcance (unos 10 metros en los dispositivos habituales de bajo consumo sin antena), lo descarta para otro tipo de aplicaciones que necesiten  mayor alcance, robustez o velocidad de transmisión.
Necesitaremos por tanto añadir un dispositivo a nuestra placa de Arduino para dotarle de capacidad de conexión Bluetooth. Hay unos cuantos en el mercado , y de proveedores conocidos, pero me centraré en dos de los más conocidos y económicos ; -) , el HC-05 y el HC-06.

Módulo HC-06
Es el más sencillo de los dos. Dispone de tan solo 4 pins,  TX, RX, VCC, GND y sólo puede funcionar como esclavo, es decir no puede generar conexiones hacia otros dispositivos, y por lo tanto tan solo puede recibir órdenes de un dispositivo maestro. Es útil para todas aquellas aplicaciones en las que usemos un Smartphone, ordenador, etc , para enviar órdenes a nuestro Arduino, pero no necesitemos obtener un feedback.
Tiene la particularidad, de que se alimenta a 3.3V, por lo que para usarlo con nuestro Arduino lo correcto sería montar un divisor de tensión con dos resistencias para obtener esos 3.3V. En la práctica, todos los que he usado los he alimentado directamente con los 5Vcc de la placa de Arduino, y están vivos…
Módulo HC-05
Es un módulo con idéntico chip que el HC-06, pero con diferente firmware y dos pins adicionales State y Key (o WakeUP según versión). Este es un módulo Maestro-Esclavo, lo que le permite generar conexiones con otros dispositivos para establecer comunicación punto a punto. La diferencia es que un BlueTooth Slave solo puede conectarse a un master y a nadie más, en cambio un master BlueTooth, puede conectarse a varios Slaves o permitir que ellos se conecten y recibir y solicitar información de todos ellos. 
De momento, nos centraremos en el uso y  configuración del HC-06, que es el que usaremos para los próximos tutoriales.
Se puede apreciar como dispone de las dos entradas adicionales, pero no tienen soldado ningún pin. Hay algún tutorial de cómo convertirlo en un HC-05, pero te recomiendo que lo compres directamente, porque es bastante complejo.

Imagenes

Repaso de la librería SofwareSerial
Antes de empezar a explicar para que sirve, comentaré por qué la usaremos. Podríamos hacer un ejemplo tan sencillo como conectar los pins de Rx y TX, a los del Arduino, pines (Rx y Tx, 0 y 1 respectivamente) y funcionar. Pero tendremos el problema que son los mismos que usa para comunicar el CHIP UART del Arduino para la comunicación serie con nuestro ordenador, por lo que cada vez que quisiéramos cargar un código de prueba, necesitaríamos desconectar el módulo bluetooth, cargar el programa, desconectar la placa, conectar el módulo, y volver a emparejar con el móvil.
Un poco lío, ¿no?
Por eso esta librería, que implementa vía software un chip TTL-UART virtual. Tiene algunas limitaciones, como que pins se pueden usar según el tipo de placa de Arduino, y que en caso de implmentar varios puertos, solo uno puede puede recibir datos a la vez.
Para usarla, primero deberemos incluir esta librería en nuestro skecth, con la línea:
#include <SoftwareSerial.h>
Después se debe declarar una variable del tipo SoftwareSerial ,con los dos pins que usaremos como RX y TX. Sería algo como:
SoftwareSerial newSerial(txpin,rxpin);
Donde newSerial, es el nombre que queremos usar, y txpin y rxpin, el ´numero del pin donde van conectados
Si queremos llama a este puerto btserie, y usar el pin 2  como transmisor, y el pin 3 como receptor, quedaría:
SoftwareSerial btserie (2,3);

Para el resto de código, se usan las sentencias habituales con puerto serie.

A la hora de hacer el montaje, hay que tener en cuenta que las conexiones en serie van "cruzadas", y que por tanto el pin TX del HC-06 va al pin definido como RX en la placa Arduino y viceversa. Os debe quedar así:



Vamos con un ejemplo básico, que lee el puerto serie y encendería un LED al recibir un “1” y lo apagaría al recibir un “0”.


#include <SoftwareSerial.h>
//Variable para almcenar la lectura del puerto serie
char caracter;
/* En la siguiente sentencia declaramos los pines que vamos
 *  a usar para realizar la comunicación serie con el modulo
 *  bluetooth. Recuerda que se cablean cruzados. Rx Arduino
 *  con Tx módulo y viceversa
 */
SoftwareSerial btserie(2, 3);
void setup() {
  btserie.begin(9600);
  pinMode(13,OUTPUT);
}
void loop() {

// Este bucle qeda a la espera de una lectura por el puerto serie
// del módulo bluetooth

    while (btserie.available() == 0) {
    ;
  }
  caracter = btserie.read();

  if ( caracter == '0' ) digitalWrite(13, LOW);
  if ( caracter == '1' ) digitalWrite(13, HIGH);
  delay(100);
}



Los parámetros que he usado de velocidad son lo habituales para módulos comprados en tiendas web lowcost habituales, eso es velocidad de transmisión 9600 bauds y pin de conexión 1234. Si no obtuviese comunicación prueba con distintos valores de velocidad, 4800, 9600, 19200, 38400,57600, etc.
Para comunicarnos con nuestro módulo, yo he usado la aplicación Arduino Bluetooh Terminal. Es de una sencillez extrema y muy ligera. Los pasos a seguir son:

-          Cargar el programa en nuestro Arduino,
-          Descargar la plicación de la Play Store, e instalarla
-          En ajustes Bluetooth de nuestro teléfono, localizar el módulo HC-06 y vincularnos. El pin habitual es 1234,
-          Vamos a la aplicación y escribimos un 1, y pulsamos send, el led 13 se encenderá
-          Escribimos un 0 y send y se apagará.

Os dejo con un sencillo vídeo de cómo va el proceso.
Este programa es muy sencillo de hacer con app inventor, así que en la próxima veremos cómo crear nuestra propia aplicación de Android, para gestionar tantos dispositivos como queramos.

Nos vemos.

lunes, 12 de octubre de 2015

Cálculo de distancias por ultrasonidos

Cálculo de distancias por ultrasonidos


Hola de nuevo. Vamos a ver en esta entrada cómo calcular distancias con un Arduino y un sensor de ultrasonidos tipo el HC-SR04, o similar. Este tipo de montajes tiene diferentes utilidades, pero el denominador común al calculo de distancias.

Yo lo utilizo para evitar las colisiones en los robots domésticos, o bajar velocidades en otras aplicaciones cuando me aproximo al sujeto.  En cualquier caso la precisión decae cuando el obstáculo no está perfectamente perpendicular al sensor, por lo que se debe mejorar el sistema, en caso de aplicaciones críticas.

Pero veamos primero en que basa su funcionamiento este sistema.

Este sensor, usa dos transductores, un emisor y un receptor que trabajan en la frecuencia de los ultrasonidos, inaudible para el ser humano. El emisor emite un pulso que rebota en el obstáculo, permitiendo que el receptor capte el eco de ese pulso. Gráficamente sería algo como esto:



Necesitaremos un poquito de mates y física básica, para poder modelar este comportamiento con nuestro Arduino. Nos interesa conocer la distancia del objeto, por lo que emplearemos la fórmula que relaciona las variables, velocidad, espacio (distancia) y tiempo.

            v=d/t

Despejando la distancia que, que es lo que nos interesa, obtenemos que :

            d=v·t


La velocidad del sonido la conocemos, en el aire a 20ºC es de 343 m/s.

El tiempo, es lo que calcularemos con nuestro Arduino. ¿Cómo? Calculando el tiempo que pasa entre que el traductor emite el sonido, y el receptor lo capta. Para eso necesitaremos presentar una función nueva, pulseIn

Esta funcion sirve para medir pulsos, es decir, el intervalo que pasa entre que una señal pasa de un nivel bajo a un nivel alto o viceversa. La medición la realiza en microsegundos.

La sintaxis de esta función es:


pulseIn(pin, value, timeout)


Donde:
  • pin, es el conector donde conectaremos el receptor de la señal, v
  • value, que debe ser HIGH o LOW, según si queremos detectar un flanco de subida o de bajada, para el caso que nos ocupa, HIGH.
  • timeput, es opcional, y sirve para delimitar el tiempo que queremos que nuestro Arduino esté "escuchando" en espera de un cambio. Si el tiempo de espera supera los 3 minutos dará un error de timeout ( devuelve un 0).
Este valor, es más importante de lo que parece, pues es el que nos dará fluidez en el programa. Por un lado limitará el tiempo de escucha agilizándolo. También es razonable que si el sensor no puede medir más de 6 metros , la escucha sea de 3 minutos, es decir detectar un objeto a más de                ¡¡¡30 kilómetros !!!


Por último, es importante tener en cuenta que las ondas realizan un trayecto de ida y vuelta. Es decir, se emiten, van al objeto, rebotan y vuelven. ¿ Lo has adivinado? Pues sí, la distancia que calculamos, la tenemos que vivir entre dos para obtener lo que andábamos buscando.

Bueno, después de la introducción teórica, vamos a ver el montaje, que en esta ocasión , es bien sencillo:



Y el sketch, que quedaría de la siguiente manera. 

long distancia; 
long tiempo;
int trigger=9;// pin trigger del SR04
int echo=8;// pin echo del SR04

void setup (){
  Serial.begin(9600);// preparamos el port serial para ver lecturas
  pinMode(trigger,OUTPUT); // definimos trigger  como salida
  pinMode(echo,INPUT); // y echo como entrada
}

void loop (){
  digitalWrite(trigger,LOW);  // Aseguramos que esta 0
  delayMicroseconds(5);       //Retraso para asegurar respuesta
  digitalWrite(trigger,HIGH); // Lanzamos el pulso
  delayMicroseconds(10);//
  tiempo=pulseIn(echo,HIGH,2945);  // MEdimos el tiempo del rebote
  // timeout calculado para 50cm
  distancia = (0.0343*(tiempo/2));//Usamos las unidades apropiadas, en 
  // este casola velocidad del sonido en cm/microsegundos
  // Y lo dividimos entre 2 para mostrar distancia "solo ida"
  Serial.println("Distancia");//mostramos resultados 
  Serial.println(distancia);  //en el monitor serial
  Serial.print("cm"); // en cm
  
}


Quedaría explicar  el valor del timeout.

Imaginad que quereis ignorar, distancias superiores a 50cm. Por tanto deberemos calcular que tardaría la onda de sonido en recorrer 50cm, ida y vuelta. Despejando el tiempo de la fórmula anterior:


                                                                        t=e/v

Usando las unidades apropiadas, cm y cm/us, (recordar multiplicar la distancia x 2 )nos daría un tiempo de,

                t=e/v= 100/0,0343 = 2915 microsegundos

Haced vosotros la cuentas de la cantidad de cosas que puede hacer nuestro Arduino con el tiempo que    se ahorra limitando el tiempo de escucha. Borrando el valor, el limitante será la capacidad del sensor que usemos.


Y como función?

Como ya explicamos en una entrada anterior, ésta, sería interesante generar una función para que fuese más sencillo introducirlo en un programa más complejo, como por ejemplo un robot de suelo, o similar, de manera que se pudiese llamar en cualquier momento. Esta parte os la dejo a vosotros, pero no dudes en plantear cualquier duda.

Nos vemos!

Os dejo con un video del experimento. Como vereis la precisión es mejorable, pero es un buen mecanismo de aproximación y anticolisiones.








lunes, 29 de junio de 2015

Arduino , Ethernet Shield y algo de HTML

Repasando la entrada anterior, me gustaría comentar algunos puntos que no se tocaron y que pueden resultar de interés.
El primero tiene que ver con el hardware del ejemplo. Hay mucha variedad de Ethernet Shields en el mercado. Os recomendé un par que son compatibles con el Arduino, hay muchas más, pero debéis fijaros que el CHIP que use sea el W5100 Ethernet controller IC , para evitar problemas de compatibilidad.

 El siguiente punto, también de hardware tiene que ver con el consumo de ese chip. Puede llegar a ser muy alto, y además de calentarse, y de qué manera, es necesario alimentar el ejemplo con una fuente de alimentación externa, pues vuestra conexión USB no dispone de la potencia necesaria. Si aún no lo habíais hecho, es un buen momento para hacerse con una fuente externa de 9 V para alimentar vuestro Arduino.
El último punto relacionado con el hardware,  tiene que ver con los pins 10,11,12 y 13 del Arduino. Estos pins se usan para la comunicación con la Ethenet shield, por lo que no podrán ser usados para otro fin cuando se use con esta ampliación.
El resto de puntos que me gustaría tratar, están relacionados con el código del sketch de ejemplo. Al final lo que conseguimos es convertir nuestro Arduino en un servidor web.  La página mostrada es de una sencillez máxima,(es un ejemplo “demo”)  y tampoco veréis grandes florituras en los ejemplos míos  que vendrán, pues mis conocimientos de HTML son básicos.
Pero me gustaría desarrollar un poco las líneas más básicas de código HTML para mostrar la información de una manera mínimamente inteligible.
Hasta ahora, en algún ejemplo como este, habíamos usado la instrucción serial.print(); para mostrar la información que queríamos en el Monitor Serial.
Sin embargo en este ejemplo usamos la instrucción :

client.println();

Entre los parantésis podemos escribir desde un texto entre comillas:

            client.print("analog input ");


O el valor de una variable cualquiera:

            client.print(sensorReading);


Salto de línea, mostrará el siguiente valor o texto en otra línea:

            client.println("<br />");      


Y dos líneas imprescindibles que marcan el inicio y el final de un código en HTML:

            client.println("<html>");


Y
          client.println("</html>");


Otra instrucción también interesante, es la que controla el tiempo de refresco de la página. En el ejemplo del día anterior era cada 5 segundos:

client.println("Refresh: 5"); // refresh the page automatically every 5 sec

Eso es todo de momento. Espero hayáis podido configurar vuestra Ethernet Shield y el router sin problemas, pues seguiremos avanzando en las próximas entradas en estos temas.

viernes, 12 de junio de 2015

Conectando nuestro Arduino a Internet

Es momento de abrir al mundo nuestro Arduino. Vamos a configurar todo lo necesario para conectar a internet nuestro Arduino através de una shield Ethernet.

Este post veremos cómo configurar nuestro entorno de trabajo para poder sacar partido de esta shield, que creo que es de las más productivas que podemos encontrar. Veremos cómo configurar el router, como parametrizar la shield Ethernet y un sencillo ejemplo que puede servir de base para desarrollar otros proyectos.

Los requisitos necesarios para poder sacar partido de este ejemplo son:

-       - Placa Arduino UNO, o compatible, por poco más de 6€
-       - Placa shield Ethernet  compatible, un coste similar de unos 6 €
-       - La librería Ethernet, http://arduino.cc/en/Reference/Ethernet
-       - Sería recomendable, tener nociones de HTML,
-       - Un router conectado a internet, y sus instrucciones si es posible
-       - Cable RJ-45
-       - Paciencia y algo para hidratarnos que ya empieza a hacer demasiada calor
-       - Opcionalmente, ya  lo explicaremos, un IP fija o servicio DDNS equivalente

Vamos a ello,

El router


Antes de seguir, debo advertir que este ejemplo está realizado con mi router. Se trata del que facilita  mi proveedor de internet (no lo nombraré hasta que no me paguen por ello ),  y hay que advertir que cada modelo gestiona las opciones de configuración de manera distinta. La parte positiva, es que de todas maneras las opciones suelen ser bastante similares y no difieren mucho de un modelo a otro.
En cualquier caso, podéis localizar mucha información sobre configuración de routers en páginas como esta www.adslayuda.com

¿Preparados? Bien, pues lo primero es conocer en que dirección IP podemos configurar nuestro router. Podemos mirar si físicamente tiene alguna pegatina, (versión cutre pero efectiva), o lanzar unos comandos desde nuestro ordenador.

Si utilizas Windows, los pasos son estos:
 -  Botón de inicio y busca ejecutar
-      -  Teclea en la pantalla cmd y enter ( Estos dos pasos son equivalentes a pulsar Tecla windows + R)
-      -  Tendrás ahora una ventana con fondo negro del tipo MS-DOS, teclea ipconfig y enter

-        En la pantalla que te habrá salido, busca la línea Puerta de enlace predeterminada, esa es tu dirección IP.




 Ahora con tu dirección IP, abre una pestaña de tu navegador favorito y pega el número tal cual en la barra de direcciones. 

Según el ejemplo : http://192.168.1.1

Te saldrá la pantalla de bienvenida de tu router, y los más probable, dos espacios solicitando usuario y contraseña.



Si no los sabes, puedes buscar con google, por tu modelo y/o operador de internet. Este sitio te puede servir de referencia. Los más habituales:

-        Usario:  admin, user,(en blanco)
-        Contraseña: admin, user, 1234,(en blanco)

Llegados a este punto, deberíamos haber sido capaces de acceder al entorno de configuración del router.  El siguiente paso es :

Asignar una IP al Arduino


Ahora, necesitamos que cada vez que nuestro Arduino se conecte a nuestra red local, lo haga siempre a la misma dirección. Si no lo configuramos, el router va gestionando las direcciónes IP de manera automática y toalmente aleatoria, y nosotros necesitamos que sea siempre la misma.

¿Cómo? Primero asignaremos a nuestra shield un identificador único. Esto lo hacemos desde el void setup, configurando el MAC de la placa. Podéis profundizar más sobre el tema aquí, pero básicamente se trata de un identificador con la dirección física del dispositivo, lo tiene cualquier aparato que se conecte a la red, y la única premisa que debe cumplir es que no sea igual al de alguno de los dispositivos conectado en nuestra red. Por defecto, puedes usar :

0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED

Y la instrucción completa:

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

Si nuestro proyecto tuviese dos shields Ethernet este número debería ser diferente para cada una de ellas.

Podéis comprobar las direcciones MAC de los equipo conectados buscando entre las opciones del router algo del tipo Device Info - > DCHP, donde os saldrá una tabla con las direcciones MAC de los dispositivos conectados la última semana.

Ahora es momento de localizar en el menú del router dentro de las opciones de DCHP, algo  parecido a DCHP estáticas, o asignaciones de MAC . Es el punto donde debemos escoger la dirección IP que asignaremos al Arduino y decirle al router la MAC que corresponde al Arduino. Una imagen de como queda en mi router.



Accediendo desde el “exterior”



Una vez completados los pasos anteriores ya puedes acceder vía IP desde tu red local al Arduino, y probar el ejemplo que hay más adelante. Tan solo tendrías que teclear la dirección IP que le hemos asignado dentro de la barra del navegador. Algo como esto http://192.168.1.177

Para poder acceder desde fuera de la red local, tenemos que decirle al router que permita las conexiones entrantes. Para ello habilitaremos un puerto, el nº 80 por ejemplo para permitirlo. A muchos les sonará esto del emule... para los que no deberemos buscar en el router un menú relacionado con puertos, NAT, virtual servers o similar. En caso contrario, una búsqueda en google con el nombre de vuestro equipo del estilo : abrir puertos router XXXXX, os solventará el problema.
 Recordad , puerto 80, y la IP que le hemos asignado al Arduino la 192.168.1.177 .






¿Esto es todo? No, I'm sorry. Falta saber la dirección IP que el proveedor nos asigna a nuestra conexión. Para eso teclear en vuestro navegador:

www.cualesmiip.com  o  www.sabermiip.es


Anotad la dirección que os aparece, cerrad el navegador y reiniciar el router. Ahora volved a teclearlo y comprobad si los números son iguales. No coincide ¿verdad? , es normal que no coincidan, eso significa que tu IP es dinámica, como la del 99% de los usuarios.
¿Que implica que tu IP sea dinámica? El número que te ha mostrado es tu dirección IP, tecleando desde cualquier parte del mundo accederías a tu red, o al menos al puerto 80 ( es el que hemos abierto).  Si es dinámica, cambiará ante cualquier incidencia ( corte de tensión o reasignación por parte del proveedor), y te impedirá acceder a tu sistema.

Tranquilo, esto tiene solución, no hemos llegado hasta aquí para abandonar ahora. Tienes al menos dos maneras para resolverlo:

1 .- Contratar con tu suministrador un servicio de IP estática o fija. El coste ronda los 30€ anuales. El inconveniente, al margen del precio, es que una dirección tan solo numérica es difícil de recordar.

2.- Contratar un servicio de DDNS. Los hay de pago o gratuitos, y lo que hacen es seguir tu IP dinámica y asignarla a un nombre de servidor ( de tu elección) que lo hace más fácil de recordar. El inconveniente es que tu router debe soportar este servicio. Algunos ejemplos de proveedores de este servicio pueden ser, DynDNS, TZO, NoIP (gratuito con reactivación mensual), DNSdynamic (gratuito). Configurarlo en tu router será tan sencillo como buscar la opción e introducir el usuario y contraseña asignados. Recuerda que el registro previo se ha decir vía web.



Recuerda que no es necesario, ni abrir puertos, ni configurar el DDNS para poder realizar el ejercicio propuesto. Esto sólo será necesario en caso de querer hacerlo funcionar desde fuera de nuestra red local.

Una forma rápida de comprobar si todo gira, uno de los ejemplos de los que vienen por defecto en el IDE de Arduino. Os recomiendo:

Archivo -> Ejemplos -> Ethernet -> WebClient

Abrir el navegador y poner la dirección 192.168.1.177 si estás conectado en tu red local (lo recomiendo para empezar), o tu dirección IP. Obtendrás una pantalla con 6 lecturas analógicas totalmente arbitrarias, pues no hay nada conectado.



Hay trabajo para rato con lo aquí propuesto para configurar vuestra red local, así que os dejo en este punto. El montaje consistiría únicamente en montar la shield encima del Arduino, alimentar el conjunto y conectar a la red local mediante un cable RJ-45. Poned los valores propuestos, pues son los que usa el ejemplo del IDE.

En la siguiente entrada habilitaremos el código para leer un TMP-36 y hacer una lectura real de temperatura. Nos vemos!