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.







