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.