Pessoal, nesse terceiro artigo da série sobre o ESP8266 vou ensinar a configurar a Rede WiFi através do Navegador de Internet, sem precisar recompilar o código toda vez que mudamos o SSID e a senha do roteador.
Aprendemos no primeiro artigo a mapear funções do ESP8266 para páginas HTML e formulários que podem ser acessados por um Navegador de Internet.
E como já aprendemos no segundo artigo, podemos criar um formulário e enviar informações para o ESP8266 através de métodos como GET ou POST.
Nesse caso, utilizamos um formulário para preencher o SSID, senha, IP e Gateway e enviar via POST para o ESP8266 mudar suas configurações em tempo real.
Primeiro vamos ver como isso funciona e depois veremos o código necessário para isso.
Antes de mais nada precisamos configurar nosso roteador com as configurações iniciais do ESP8266 para fazermos a primeira conexão e depois podemos configurar os dados novos.
- 1) Acesse a página de configuração do seu roteador e clique na opção das configurações sem fio
- 2) Altere o nome do SSID para SSIDInicial
- 3) Altere a opção de segurança para WPA-PSK [TKIP] + WPA2-PSK [AES]
- 4) Mude também a senha para senhaInicial
Clique em "Enviar" para confirmar as configurações do seu roteador. Isso fará com que o roteador fique com as mesmas configurações iniciais que vamos escrever no código mais adiante.
Na sequência precisamos configurar o IP do roteador, que é o Gateway que configuramos no ESP8266.
- 1) Clique na opção de configuração de IP da LAN (os nomes podem ser um pouco diferentes dependendo da versão do roteador)
- 2) Configure o Endereço IP para 192.168.0.1
Feita essa configuração, você pode carregar o programa desse post e abrir o terminal Serial para verificar se o ESP8266 conectou no roteador corretamente, conforme imagem abaixo.
Ligue seu computador via cabo ou através do WiFi neste mesmo roteador. E abra um Navegador de Internet. Acesse o endereço do ESP8266, que na configuração inicial do código deste artigo é 192.168.0.125. Configure no código o endereço inicial que você deseja para seu ESP8266.
Clique no link "Configurar WiFi" ou acesse o endereço http://192.168.0.125/config
Pronto! Agora podemos mudar as configurações para o que quisermos sem precisar recompilar o código! Digite as informações que você quiser e clique em "Enviar"!
Isso parece simples, mas é muito poderoso, pois quando você cria um produto que oferece uma funcionalidade de WiFi, como você dá oportunidade para seu cliente configurar o produto para funcionar na rede dele? Esse é o jeito! Além disso com isso podemos oferecer para o cliente uma forma de atualizar o próprio firmware do ESP8266, que veremos no próximo post da série.
Vamos ver como isso é feito!
A primeira coisa que devemos fazer é incluir a biblioteca EEPROM, pois não tem sentido fazer toda essa configuração e depois perder ela quando a energia acabar. Para que as configurações permaneçam gravadas mesmo quando o ESP8266 for desligado, precisamos gravar essas informações na memória conhecida por EEPROM.
O resto do código é, na verdade, composto de coisas que já aprendemos nos outros dois posts. Vejamos os detalhes.
- 1) Definimos algumas macros para marcar posições iniciais da memória EEPROM onde ficarão nosso banco de dados de configuração. Temos uma macro para o início do controle de versão VERSION_START e uma macro para indicar onde a configuração realmente inicia CONFIG_START.
- 2) Criamos também uma macro para controlar a versão dos dados CONFIG_VERSION. Como a EEPROM grava os dados e não perde mais, temos esse controle para invalidar os dados anteriores em caso de recompilar o código, se necessário.
- Por fim, criamos uma estrutura para guardar as configurações, chamada wifiConfig. Utilizaremos essa estrutura para facilitar o trabalho com a EEPROM, pois senão teríamos que lidar com leitura e escrita de bytes, o que é muito massante.
Para ajudar com a tarefa massante de lidar com gravação da EEPROM, criamos também uma função que utiliza um laço for para gravar todos os bytes da estrutura e facilitar o trabalho. Repare também que gravamos os bytes de controle da versão; e por fim utilizamos a função EEPROM.commit() para confirmar a gravação.
Outra função importante para lidar com a EEPROM é a que faz a leitura e alimenta a estrutura wifiConfig. Primeiro a função faz a leitura e verifica os bytes de controle para saber se existem e se conferem com o código atual. Lembre-se, para invalidar esse código, basta mudar a macro mostrada anteriormente de "1a" para qualquer outro valor, como por exemplo "1b" ou "JJ", não importa.
Invalidando esses bytes de controle farão com que o ESP8266 utilize os dados da configuração inicial, que é fixa. Por isso configuramos o roteador anteriormente com essas configurações no início desse post.
- 1) SSIDInicial é o SSID da configuração inicial fixa no código
- 2) senhaInicial é a senha inicial
- 3) 192.168.0.125 é o IP inicial do ESP8266
- 4) 192.168.0.1 é o IP do roteador, ou também chamado IP do Gateway
Essa configuração do código dentro do else só é carregada na primeira vez que o ESP8266 inicia. Depois disso as alterações são feitas pelo Navegador, conforme mostrado anteriormente e depois lida pela parte do if.
Quando acessamos a página de configuração do WiFi, chamamos a função mostrada abaixo, que monta e preenche o formulário HTML com as informações da estrutura wifiConfig, carregadas da EEPROM.
Ao clicar no botão "Enviar" desse formulário, a outra função que chamada é a mostrada abaixo, onde os dados preenchidos são registrados na estrutura wifiConfig e depois gravados na EEPROM, através da função saveConfig() que vimos anteriormente.
Repare que a última instrução é uma função especial para reiniciar o ESP8266 chamada ESP.restart(). Isso faz com que o WiFi reinicie e tente conectar de novo no roteador, com os dados novos que foram informados.
Quando o ESP8266 reinicia, a função setup() é chamada novamente, então as configurações carregadas são as novas que foram gravadas na EEPROM, conforme vemos a seguir.
Veja que precisamos primeiro iniciar a EEPROM chamando a função EEPROM.begin(), passando o valor 512 que é o tamanho do espaço reservado para essa memória no seu ESP8266. Verifique o tamanho da versão que você estiver usando.
Depois temos a chamada da funão loadConfig() que faz a leitura da EEPROM e carrega os dados da configuração na estrutura wifiConfig.
Finalmente só precisamos usar os valores de wifiConfig para configurar o SSID e senha na função WiFi.begin(), assim como o IP do ESP8266 e IP do Gateway na função WiFi.config().
Continuando a função setup() do ESP8266 vemos os detalhes finais:
- 1) Apresentamos os dados do roteador em que o ESP8266 conectou.
- 2) Aqui mostramos a configuração da função de chamada do método GET do formulário de configuração
- 3) E a configuração da chamada do método POST.
A instrução final do setup() é a chamada da função server.begin() que inicia o servidor.
É isso pessoal! Baixem o código completo aqui.
Até o próximo artigo!
Abraços,
Renato Aloi
Nenhum comentário:
Postar um comentário