Módulo Ethernet ENC28J60 para Arduino Nano

El módulo Ethernet ENC28J60 es un dispositivo que permite a los microcontroladores Arduino Nano conectarse a una red Ethernet. Este módulo es muy útil para aplicaciones que requieren la comunicación en red, como el control remoto de dispositivos y la transmisión de datos en tiempo real.

En este tutorial, aprenderás cómo utilizar el módulo Ethernet ENC28J60 con el Arduino Nano para realizar una petición http a un servidor en una red local.

Materiales:

  • Arduino Nano con cable USB
  • Módulo Ethernet ENC28J60
  • Cable UTP

Conexión del módulo ethernet con el arduino nano:

La conexión del módulo ethernet con el arduino nano es muy simple ya que este este módulo posee una distribución de pines exacta para únicamente introducir el arduino directamente como se muestra en la siguiente figura:

Módulo Ethernet para arduino nano
Módulo Ethernet para Arduino Nano

Ejemplo de código en Arduino IDE:

Para utilizar el módulo Ethernet ENC28J60 con el Arduino Nano primero necesitarás instalar la biblioteca EtherCard desde el Administrador de Bibliotecas del IDE de Arduino.

Puedes utilizar el siguiente código para hacer una solicitud HTTP a un servidor web en una red LAN.

#include <EtherCard.h>

// ethernet interface mac address, must be unique on the LAN
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
// ethernet interface ip address
static byte myip[] = { 192,168,50,2 };
// gateway ip address
static byte gwip[] = { 192,168,50,1 };
// remote website ip address and port

// remote website name
const char website[] = "192.168.50.1";

// static byte hisip[] = { 192,168,50,1 };



byte Ethernet::buffer[700];
static uint32_t timer;

// called when the client request is complete
static void my_callback (byte status, word off, word len) {
  Serial.println(">>>");
  Ethernet::buffer[off+300] = 0;
  Serial.print((const char*) Ethernet::buffer + off);
  Serial.println("...");
}

void setup () {
  Serial.begin(57600);
  Serial.println(F("\n[webClient]"));

  // Change 'SS' to your Slave Select pin, if you arn't using the default pin
  if (ether.begin(sizeof Ethernet::buffer, mymac, SS) == 0)
    Serial.println(F("Failed to access Ethernet controller"));

  ether.staticSetup(myip, gwip);

  ether.printIp("IP:  ", ether.myip);
  ether.printIp("GW:  ", ether.gwip);
  ether.printIp("DNS: ", ether.dnsip);

  char websiteIP[] = "192.168.50.1";
  ether.parseIp(ether.hisip, websiteIP);
}

void loop () {
  ether.packetLoop(ether.packetReceive());

  if (millis() > timer) {
    timer = millis() + 5000;
    Serial.println();
    Serial.print("<<< REQ ");
    ether.browseUrl(PSTR("/api?param1=23 HTTP/1.1\r\nHost: 192.168.50.1\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\r\nAccept-Language: es-EC,en-US;q=0.7,en;q=0.3\r\nAccept-Encoding: gzip, deflate\r\nUpgrade-Insecure-Requests: 1\r\nConnection: close\r\n\r\n"), "", ether.hisip, my_callback);
    //ether.browseUrl(PSTR("/api?param1=23"), "", ether.hisip, my_callback);
    //ether.browseUrl(PSTR("/foo/"), "bar", website, my_callback);
  }
}

El código utiliza la biblioteca EtherCard para establecer la conexión a la red Ethernet y enviar la solicitud. En la función setup, se inicializa la comunicación serial y se verifica si se puede acceder al controlador Ethernet. Luego, se configura la dirección IP estática del Arduino y se establecen las direcciones IP del gateway y del servidor DNS.

En la función loop, se llama a la función packetLoop de la biblioteca EtherCard para recibir y procesar los paquetes de red. Luego, se comprueba si ha pasado el tiempo de espera para enviar una nueva solicitud HTTP. En caso afirmativo, se llama a la función browseUrl de la biblioteca EtherCard para enviar la solicitud HTTP al servidor web especificado y se pasa la función de devolución de llamada my_callback para manejar la respuesta del servidor.

La función de devolución de llamada my_callback se ejecuta cuando la solicitud HTTP ha sido completada y recibe como parámetros el estado de la solicitud, el desplazamiento en el búfer de recepción y la longitud de los datos recibidos. En este ejemplo, la función simplemente imprime los datos recibidos por la conexión serial.

Este código es solo un ejemplo básico de cómo utilizar el módulo Ethernet ENC28J60 con un Arduino Nano. Para un uso más avanzado, es posible que debas considerar la implementación de funciones adicionales de la biblioteca EtherCard

Si necesitas cursos de Arduino, Raspberry, electrónica, estamos localizados en la ciudad de Quito Ecuador. Somos Microlab.

Sé el primero en comentar

Dejar una contestacion

Tu dirección de correo no será publicada.


*