0

O ESP8266 parte 3 – Acionar LEDs de forma remota

LED Ctrl

O Circuito:

O circuito é muito simples. As conexões do ESP8266 com o UNO são as mesmas dos posts anteriores, apenas acrescentamos os 3 LEDs a 3 GPIOs do UNO:

GPIO 11: LED azul
GPIO 12: LED vermelho
GPIO 11: LED verde

ES8266_Arduino_UNO_GPIO_Control

O código HTML:

A Página deve ser gerada em HTML em um editor qualquer e salva no desktop.

HTML Buttons

A parte principal do codigo HTML abaixo, é a geração dos “botões”, no caso “ON” e “OFF”. Observe que para cada botão (são 6 no total, 2 para cada GPIO), é gerado um “id” específico. Por exemplo, se o botão “ON” para o GPIO 11 for pressionado, o id será “111”, ou seja os dois primeiros dígitos para a identificação do GPIO (no caso “11”) e o 3o. dígito para o estado, no caso “1” ou “ON”. Se fosse “OFF”, o Id sería 110. No caso, na saída digital do pino 11, está o LED azul.

Uma vez gerado o “id” uma função na página se encarrega de enviar-la para para o IP address do ESP8266. Observe que o endereço que aparece no set-up do ESP 8266 tem que ser incluído na linha ==> $.get(“http://10.0.1.14:80/”, {pin:p});

HTML Button click

No monitor serial se pode observar o valor do pin que é gerado pela página.

Serial monitor ongoing

As primeiras vezes que testei o programa, tive vários problemas e o mais importante foi que observei que só era possível enviar 5 comandos aos LEDs. Isso porque  a cada envío de informação o ESP8255 considerava uma conexão aberta (CONNECT 0, 1, 2, 3, 4) e o limite é 5.

Observei também que quando fazia um “refresh” na página, o connect, voltava a zero. A solução foi incluir um novo codigo HTML, que forçava o refresh automático da página (código tipo “META”). No caso optei por fazer um refresh a cada 15s para não ficar muito ruim para o usuário. Funcionou sem problemas:

<META HTTP-EQUIV=”refresh” CONTENT=”15″>

O código do Arduino:

O código é muito parecido com o código anterior:

Inicializa, faz o setup das portas, “reseta” e inicializa o ESP8266, etc., usando as mesmas funções definidas no post anterior.

A diferença básica está na porção em verde do código contido  no “Loop”:

 
void loop()
{
  if(esp8266.available())
  {
    if(esp8266.find("+IPD,"))
    {
      delay(1000);
      
      int connectionId = esp8266.read()-48; 
      esp8266.find("pin="); 
      int pinNumber = (esp8266.read()-48)*10; 
      pinNumber += (esp8266.read()-48); 
      int statusLed =(esp8266.read()-48);
      digitalWrite(pinNumber, statusLed)
      
      String closeCommand = "AT+CIPCLOSE="; 
      closeCommand+=connectionId; 
      closeCommand+="\r\n";
      sendData(closeCommand,1000,DEBUG);
    }
  }
}
 

Ao ler o “id”, por exemplo “111”, o código separa os primeiros dois dígitos e constrói a variável “pinNumber”. Com o 3o. dígito, se obtém o “statusLed”. A função digitalWrite enviará o status do LED, no caso do exemplo “1” para o GPIO correspondente (ou “pinNumber”), no exemplo 11.

No vídeo abaixo, pode-se ver um exemplo do acionamento remoto dos LEDs:

Link para o vídeo do acionamento remoto de GPIOs via ESP8266

Para finalizar, no link abaixo deixo o codigo completo para o Arduino e para a pagina em codigo HTML.

Link para os codigos fonte

 

Artigo disponibilizado por MJRobot.org

Todos os produtos utilizados neste artigo podem ser encontrados na Loja de Eletrónica e Robótica – ElectroFun.

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

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

Podem ainda colocar as vossas dúvidas no nosso Forum da Comunidade Arduino em Portugal ou no nosso Grupo no Facebook Arduino Portugal – Qual o teu projeto?

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