fbpixel
Etiquetas: ,
0
(0)

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

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

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?