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