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