0

Como controlar LED através de página de HTML com NodeMCU

Neste artigo pretende-se fazer o controlo de dois LED através de uma página HTML, para tal vamos usar o NodeMcu, uma vez que este contém o módulo Wifi ESP8266. Pode-se assim fazer o controlo de cada led à distância, uma vez que o NodeMcu comunica através de uma rede Wifi.

 

Montagem do Circuito

Para a montagem deste circuito utilizamos a saídas digitais do NodeMcu PD7, que corresponde à GPIO13 do ESP8266, e a PD4, que corresponde à saída GPIO2 do ESP8266. A cada uma destas saídas é ligada um LED juntamente com uma resistência de 220Ω para evitar correntes demasiado grandes e deste modo proteger os componentes.

 

 

Programação com IDE do Arduino

Para a programação do NodeMcu, utiliza-se a IDE do Arduino e fazem-se a seguintes configurações:

Passo 1 – Entrar em Ficheiro > Preferência e digitar o link seguinte na URLs adicionais de Gerenciadores de Placas: http://arduino.esp8266.com/stable/package_esp8266com_index.json

 

 

Passo 2 – Entrar em Ferramentas > Placa > Gestor de Placas e clicar em instalar o esp8266 by ESP8266 Community.

 

 

Passo 3 – Entrar em Ficheiro > Preferências e selecionar o NodeMCU 1.0(ESP-12E Module)

Depois de efetuadas estas configurações seleciona-se a Porta onde será feito o upload do programa. O programa utilizado é o seguinte:

 

#include <ESP8266WiFi.h>

 

const char* ssid = "AndroidAP"; // Nome da Rede

const char* password = "123456"; //Password da rede

 

int ledPin = 13; // GPIO13 do ESP8266 e D7 do NodeMCU

int ledPin1 = 2; // GPIO2 do ESP8266 e D4 do NodeMCU

WiFiServer server(80); // Porto 80

 

void setup() {

Serial.begin(115200);

delay(10);

pinMode(ledPin, OUTPUT); // Define o D7 como saída

digitalWrite(ledPin, LOW); // O LED começa desligado

 

pinMode(ledPin1, OUTPUT); // Define o D7 como saída

digitalWrite(ledPin1, LOW); // O LED começa desligado

 

 

// Comunicação com a rede WiFi

Serial.println();

Serial.println();

Serial.print("Connecting to "); // Mensagem apresentada no monitor série

Serial.println(ssid); // Apresenta o nome da rede no monitor série

 

WiFi.begin(ssid, password); // Inicia a ligação a rede

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print("."); // Enquanto a ligação não for efectuada com sucesso é apresentado no monitor série uma sucessão de “.”

}

Serial.println("");

Serial.println("WiFi connected"); // Se a ligação é efectuada com sucesso apresenta esta mensagem no monitor série

 

// Servidor

server.begin(); // Comunicação com o servidor

Serial.println("Servidor iniciado"); //é apresentado no monitor série que o  servidor foi iniciado

 

// Impressão do endereço IP

Serial.print("Use o seguinte URL para a comunicação: ");

Serial.print("http://");

Serial.print(WiFi.localIP()); //Abrindo o Brower com este IP acedemos á pagina HTML de controlo dos LED´s, sendo que este IP só está disponível na rede à qual o ESP8266 se encontra ligado

Serial.println("/");

 

}

 

void loop() {

// Verificação se o cliente está conectado

WiFiClient client = server.available();

if (!client) { // Verifica se o cliente está conectado ao servidor, executa este ciclo até estar conectado

return;

}

 

// Espera até o cliente enviar dados

Serial.println("novo cliente"); //Apresenta esta mensagem quando o cliente se liga ao servidor

while(!client.available()){

delay(1);

}

 

// Ler a primeira linha do pedido

String request = client.readStringUntil('\r');

Serial.println(request);

client.flush();

 

// Operação do pedido

 

int value = LOW;

if (request.indexOf("/LED=ON") != -1)  {

digitalWrite(ledPin, HIGH); // Se o pedido no LedPin for LED=ON, acende o LED

value = HIGH;

}

if (request.indexOf("/LED=OFF") != -1)  {

digitalWrite(ledPin, LOW); // Se o pedido no LedPin for LED=OFF, apaga o LED

value = LOW;

}

 

if (request.indexOf("/LED1=ON") != -1)  {

digitalWrite(ledPin1, HIGH); // Se o pedido no LedPin1 for LED=ON, acende o LED

value = HIGH;

}

if (request.indexOf("/LED1=OFF") != -1)  {

digitalWrite(ledPin1, LOW); // Se o pedido no LedPin1 for LED=OFF, apaga o LED

value = LOW;

}

 

// Inicialização da página HTML

 

// Retorno do resposta

client.println("HTTP/1.1 200 OK");

client.println("Content-Type: text/html");

client.println(""); //  do not forget this one

client.println("<!DOCTYPE HTML>");

client.println("<html>");

 

client.print("Estado do LED: ");

 

if(value == HIGH) { // Se está ligado apresenta “on”

client.print("On");

} else {

client.print("Off");// Se está desligado apresenta “Off”

}

client.println("<br><br>");

client.println("<a href=\"/LED=ON\"\"><button>Turn On </button></a>");// Ligar o LED corresponde Turn On

client.println("<a href=\"/LED=OFF\"\"><button>Turn Off </button></a><br />");  // Desligar o LED corresponde Turn Off

client.println("<a href=\"/LED1=ON\"\"><button>Turn On </button></a>");

client.println("<a href=\"/LED1=OFF\"\"><button>Turn Off </button></a><br />");

client.println("</html>");

 

delay(1);

Serial.println("Cliente desconectado"); // Depois do cliente efectuar o pedido apresenta esta mensagem no monitor série

Serial.println("");

 

}

 

No código acima altera-se o valor SSID para o nome da Rede ao qual o ESP8266 vai comunicar e a password pela palavra-passe dessa rede. Após esta configuração faz-se o upload do código e de seguida faz-se o seguinte:

 

Passo 5 – Entrar em Ferramentas > Monitor Série

 

Com este monitor consegue-se obter a URL onde será possível o controlo dos LEDs.

 

 

Página HTML para controlo dos LEDs

Acedendo à rede à qual o NodeMCU está configurado, utiliza-se um browser para aceder à URL e obter a página acima.

 

Artigo desenvolvido por Nuno Rocha para o Arduino Portugal

————-
Gostaram deste artigo ? Deixem o vosso comentário no formulário a baixo e partilhem com os amigos.

Não se esqueçam de fazer like na nossa página no facebook.

Todos os produtos utilizados neste artigo podem ser encontrados na loja de componentes eletrónicos ElectroFun.

Comments

Comentários

ArduinoPortugal.pt

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

To use BrandCaptcha you must get an API Key