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.

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.

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

Aplicações
- Usar uma interface web para controlar o seu microcontrolador
Fontes
- https://www.w3schools.com/html/html_editors.asp
- Tutoriais HTML Mozilla
- https://www.arduino.cc/en/Guide/ArduinoWiFiShield
- https://www.techworked.com/arduino-wifi-shield-upgrade/
- https://www.arduino.cc/en/Reference/WiFi
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie