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