fbpixel
Etiquetas: ,

O shield WiFi permite à placa Arduino ligar-se à Internet passando por uma rede local sem fio. Um leitor de cartões SD integrado permite armazenar dados ou até mesmo uma página web para pilotar o Arduino.

A base para a criação de objetos conectados é poder ligá-los a uma rede como a rede WiFi.

Material

  • Computador
  • Arduino UNO
  • Cabo USB A Macho/B Macho
  • Arduino WiFi Shield

Como funciona um shield Wifi

O WiFi é uma rede de rádio que funciona nas frequências de 2,45 GHz e 5 GHz. O shield Wifi tem um chip que permite gerir a comunicação com uma rede WIFi, como num computador. O microcontrolador pode comunicar com este chip para conectar-se a uma rede ou transmitir informações através dela.

arduino-wifi-shield Usar um shield WiFi com o Arduino

Esquema

O shield WiFi é montado diretamente na placa Arduino e utiliza o barramento SPI para comunicar com o WiFi e o cartão SD. O pino 10 é utilizado para selecionar o controlador WiFi; o pino 7, como handshake entre o Arduino e o WiFi; e o pino 4, para selecionar o módulo de cartão SD.
Em resumo, os pinos utilizados são:

  • 4 para seleção do cartão SD (SD_CS)
  • 7 para handshake com o WiFi
  • 10 para seleção do microchip W5100 (W5100_CS)
  • O barramento SPI: pinos 11, 12 e 13 na placa Arduino UNO/Duelmilanove. Pinos 50, 51 e 52 no Arduino Mega

Código para gestão de um shield Wifi

Para comunicar na rede, precisamos utilizar um protocolo específico. Este protocolo está integrado em todas as bibliotecas relacionadas com a comunicação WiFi.

  • É preciso ligar o módulo WiFi à rede
  • definir um servidor server
  • definir um cliente client

Para interagir com o shield Wifi, utilizamos a biblioteca WiFi.h, cujas funções a conhecer são:

  • WiFi.begin() para iniciar uma conexão de rede
  • server.begin() para inicializar um servidor
  • WiFiClient client = server.available() para inicializar um cliente
  • client.read() para ler dados do cliente
  • client.print() para enviar dados ao 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

Depois de carregar o código no microcontrolador, abra o monitor serial para descobrir o endereço IP.

arduino-ethernet-request-w5100-monitor Usar um shield WiFi com o Arduino

Pode então introduzir este endereço IP no seu navegador da Internet para exibir a página web.

arduino-ethernet-w5100-web-monitor-controller Usar um shield WiFi com o Arduino

Aplicações

  • Usar uma interface web para controlar o seu microcontrolador

Fontes

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie