Chegamos ao ponto de acionar LEDs (ou qualquer coisa) remotamente via WiFi. Para quem entrou direto nesse tutorial, vale a pena dar uma sapeada em meus 2 posts anteriores:
A diferença básica aqui, é que ao invés do Arduino criar uma pagina web para enviar as informações capturadas, agora será uma página criada anteriormente em HTML e hospedada em algum sitio web (no nosso caso aqui estará em emu desktop) que enviará os dados. Esta pagina estará recebendo comandos de um usuário enviando-os via WiFi ao Arduino.
O circuito é bem 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
A Página deve ser gerada em HTML em um editor qualquer e salva no desktop.
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});
No monitor serial se pode observar o valor do pin que é gerado pela página.
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 é muito parecido com o do post anterior:
Inicializa, faz o setup das portas, "reseta" e inicializa o ESP8266, etc., usando as mesmas funções definidas no anteriormente.
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.
É isso aí. Abraço a todos e espero que possa ter ajudado!
Abaixo o link de meu Blog (vale deixar uns "like" por lá ;-)
Tags:
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por