<
*

Ivanov

  • Allahu Akbar
  • *****
  • 60
  • 2
  • Zhokhov
    • Ver perfil
O ESP8266 parte 3 – Acionar LEDs de forma remota
« Online: Dezembro 08, 2017, 09:23:47 am »
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/&#8221;, {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+="
";
      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