fbpixel
Etiquetas: ,

El WiFi Shield permite a la tarjeta Arduino conectarse a Internet a través de una red inalámbrica. Integra un lector de tarjetas SD para almacenar datos o una página web para manejar el Arduino.
La forma básica de crear objetos conectados es conectarlos a una red como WiFi.

Hardware

  • Computadora
  • Arduino UNO
  • Cable USB A macho a B macho
  • Arduino WiFi Shield

Principio de funcionamiento de un Escudo Wifi

La red WiFi es una red de radio que funciona en las frecuencias de 2,45 GHz y 5 GHz. El Escudo Wifi tiene un chip que permite gestionar la comunicación wifi con una red, como en un ordenador. El microcontrolador puede comunicarse con este chip para conectarse a una red o transmitir información a través de esta red.

arduino-wifi-shield Usando un escudo WiFi con Arduino

Esquema

El escudo Wifi se monta directamente en la tarjeta Arduino y utiliza el bus SPI para comunicarse con el WiFI y la tarjeta SD. El pin 10 se utiliza para seleccionar el controlador de WiFi, el pin 7 como apretón de manos entre el Arduino y el WiFi; y el pin 4 para seleccionar el módulo de la tarjeta SD.
En resumen, los pines utilizados son:

  • 4 para la selección de la tarjeta SD (SD_CS)
  • 7 por el apretón de manos con WiFi
  • 10 para la selección del microchip W5100 (W5100_CS)
  • el autobús SPI: los pines 11,12,13 en una tarjeta de Arduino UNO/Duelmilanove. Los alfileres 50, 51 y 52 para el Mega

Código de gestión de un Escudo Wi-Fi

Para comunicarnos a través de la red, necesitamos usar un protocolo especial. Este protocolo está integrado en todas las bibliotecas relacionadas con la comunicación WiFi.

  • Tienes que conectar el módulo WiFi a la red
  • definir un servidor server
  • definir un cliente client

Para interactuar con el Escudo Wifi, utilizamos la biblioteca WiFi.h cuyas funciones a conocer son las siguientes:

  • WiFi.begin() para inicializar una conexión de red
  • server.begin() para inicializar un servidor
  • WiFiClient client = server.disponible() para inicializar un cliente
  • client.read() para leer los datos del cliente
  • client.print() para enviar los datos al cliente
//Libraries
#include <WiFi.h>//https://www.arduino.cc/en/Reference/WiFi

//Parameters
String request ;
unsigned long refreshCounter  = 0;
int status  = WL_IDLE_STATUS;
char ssid[]  = "****************";
char password[]  = "****************";

//Objects
WiFiServer server(80);
WiFiClient client;

void setup() {
  //Init Serial USB
  Serial.begin(9600);
  Serial.println(F("Initialize System"));
  //Init WifiShield

  // Connect to Wifi network.
  while (status != WL_CONNECTED)
  {
    Serial.print("Connecting to Network named: "); Serial.println(ssid);
    status = WiFi.begin(ssid, password);
    delay(1000);
  }
  server.begin();
  Serial.println();
  Serial.println(F("WifiShield initialized"));
  Serial.print(F("IP Address: "));
  Serial.println(WiFi.localIP());
}

void loop() {
  client = server.available();
  clientRequest();
  handleRequest();
}

void clientRequest( ) { /* function clientRequest */
  ////Get client request
  if (!client) {
    return;
  }
  request = "";
  // Wait until the client sends some data
  while (!client.available()) {
    delay(1);
  }

  request = client.readStringUntil('\r'); // Read the first line of the request
  Serial.println(request);
  client.flush();
}

void handleRequest( ) { /* function handleRequest */
  ////Handle web client request
  if (request.indexOf("/dig2on") > 0) {
    digitalWrite(2, HIGH);
  }
  if (request.indexOf("/dig2off") > 0) {
    digitalWrite(2, LOW);
  }
  if (request.indexOf("GET") >= 0) {
    webpage(client);
    client.stop();
  }

}

void webpage(WiFiClient client) { /* function webpage */
  ////Send webpage to client

  //output HTML data header
  client.println(F("HTTP/1.1 200 OK\nContent-Type: text/html\nConnection: close\nRefresh: 5
\n"));
  //header
  client.println(F("<!DOCTYPE HTML><html><head><title>AranaCorp</title></head><body bgcolor='black' style='color:white;'>"));
  client.println(F("<h1 style='color:green;'>AranaCorp - Arduino Web Controller</h1>"));
  client.println("<p style='color:white;'>Page refresh number: " + String(refreshCounter) + "</p>");
  client.println(F("<h2 style='color:limegreen;'>Arduino Inputs</h2>"));
  //output analog input pin
  for (int i = 0; i < 6; i++) {
    client.println("<b>Input A" + String(i) + " : </b>" + String(analogRead(14 + i)) + "<br>");
  }
  //digital output
  client.println("<h2 style='color:limegreen;'>Arduino Outputs</h2>");
  client.println("<b>Digital output Pin 2 : </b><input value=" + String(digitalRead(2)) + " readonly></input>");
  client.println(F("<a href='/dig2on'><button>Turn On </button></a><a href='/dig2off'><button>Turn Off </button></a>"));

  //file end
  client.println("</body></html>");
  refreshCounter+=1;
  delay(1);
}

Resultado

Cuando el código se descargue en el microcontrolador, abra el monitor en serie para averiguar la dirección IP.

arduino-ethernet-request-w5100-monitor Usando un escudo WiFi con Arduino

Puede entonces introducir esta dirección IP en su navegador de Internet para mostrar la página web.

arduino-ethernet-w5100-web-monitor-controller Usando un escudo WiFi con Arduino

Aplicaciones

  • Usar una interfaz web para manejar su microcontrolador

Fuentes

Encuentre otros tutoriales y ejemplos en el generador de código automático
Arquitecto de Código