Enviar datos con Arduino vía Ethernet

Con Arduino tenía una cuenta pendiente. Me ha llegado por fin la placa y he podido hacer unas pruebas. Para iniciarme con un enfoque útil, he pensado desarrollar un programa que envíe los datos a un servidor web. La idea no es original: me la comentó mi compañero Ginés, y hay un puñado de ejemplos en Internet. A pesar de ello, es un ejercicio interesante para comenzar, y quiero orientarlo a un objetivo más general. Por eso, voy a introducir algunos elementos innecesarios en este primer desarrollo, pero que cumplirán una función más adelante. Manos a la obra.
Material con el que parto:

  • Placa Arduino Mega 2560
  • Arduino Ethernet Shield W5100

Más, como es obvio, tensión de 9V, cable USB y Ethernet. También cuento con un PC con PHP instalado y configurado.

Arduino Mega 2560
Arduino Mega 2560

En primer lugar hay que incluir en el código las librerías necesarias e introducir cierta información acerca de la conexión Ethernet:

La dirección MAC es inventada. Podemos elegir los seis bytes que queramos, siempre que no coincidan con los de otra MAC en la red. Además, debería corresponder a una dirección localmente administrada. Estas direcciones se caracterizan por tener activo el segundo bit (que se envía; corresponde con el segundo menos significativo del byte más significativo). Es decir, el primer byte es de la forma 2+4n o 3+4n.
La primera IP que aparece corresponde a la del PC que actua como servidor; y la segunda, la que le asigno al Arduino, que debe estar disponible en la red.
No debo olvidarme de comentar las librerías incluidas. SPI y Ethernet se requieren para las funciones de red y se instalan con el software de Arduino. La primera que se ha colado, en cambio, corresponde a la librería ArduinoJSON, que desarrolla Benoît Blanchon. JSON va a servir para codificar y decodificar información en forma de texto. De momento sólo voy a trabajar con entradas y salidas, y las recogeré en un array de objetos:

Cada objeto del array representa un canal, al que damos un nombre (id), un tipo (de momento sólo entradas digitales, «di»), una dirección y un valor inicial. En principio parece mucho aparato para enviar dos bits, pero espero darle justificación en publicaciones sucesivas. Estas dos entradas quedarían representadas en JSON de la siguiente forma:

Terminemos la función setup, que ha quedado a medias. Falta inicializar la periferia y la interfaz Ethernet:

El ciclo del programa va a ejecutar una tarea sencilla: actualiza los valores de root y los envía al servidor web. Para lo primero sólo hay que repasar el array buscando aquellos elementos que sean de tipo di (entrada digital). Se consulta si la entrada con dicha dirección está activa, y se actualiza su valor:

Queda la segunda parte, que es el envío. Lo voy a hacer con el método GET, por simplicidad. Para ello, basta pedir una URL incluyendo en ella el parámetro que se desea mandar. Por ejemplo, para adjuntar la cadena JSON que hemos mostrado antes sólo tendríamos que pedir la página:

La petición se va a llevar a cabo periódicamente, cada dos segundos si no hay fallos. En primera instancia se realiza la conexión con el servidor y, una vez se esté conectado, se solicita la URL anterior:

Falta una parte, la otra mitad: qué hace el servidor con los datos. De momento, puesto que esto es un ejercicio, le vamos a dar una salida simple almacenándolos en un fichero sin ningún tratamiento previo. El código en PHP es el siguiente:

Listo. A los pocos segundos de descargar el programa a la placa Arduino tenemos un fichero data.txt que va engrosando ininterrumpidamente. Y alimentando cualquiera de las dos entradas, podemos comprobar cómo su valor queda registrado.

Facebooktwitterlinkedin

2 comentarios en “Enviar datos con Arduino vía Ethernet”

Los comentarios están cerrados.