para o inicio do controle de versao VERSION_START e uma macro para indicar onde a configuracao realmente inicia CONFIG_START.2) Criamos tambem uma macro para controlar a versao dos dados CONFIG_VERSION. Como a EEPROM grava os dados e nao perde mais, temos esse controle para invalidar os dados anteriores em caso de recompilar o codigo, se necessario.Por fim, criamos uma estrutura para guardar as configuracoes, chamada wifiConfig. Utilizaremos essa estrutura para facilitar o trabalho com a EEPROM, pois senao teriamos que lidar com leitura e escrita de bytes, o que e muito massante.Para ajudar com a tarefa massante de lidar com gravacao da EEPROM, criamos tambem uma funcao que utiliza um laco for para gravar todos os bytes da estrutura e facilitar o trabalho. Repare tambem que gravamos os bytes de controle da versao; e por fim utilizamos a funcao EEPROM.commit() para confirmar a gravacao.Outra funcao importante para lidar com a EEPROM e a que faz a leitura e alimenta a estrutura wifiConfig. Primeiro a funcao faz a leitura e verifica os bytes de controle para saber se existem e se conferem com o codigo atual. Lembre-se, para invalidar esse codigo, basta mudar a macro mostrada anteriormente de "1a" para qualquer outro valor, como por exemplo "1b" ou "JJ", nao importa.Invalidando esses bytes de controle farao com que o ESP8266 utilize os dados da configuracao inicial, que e fixa. Por isso configuramos o roteador anteriormente com essas configuracoes no inicio desse post.1) SSIDInicial e o SSID da configuracao inicial fixa no codigo2) senhaInicial e a senha inicial3) 192.168.0.125 e o IP inicial do ESP82664) 192.168.0.1 e o IP do roteador, ou tambem chamado IP do GatewayEssa configuracao do codigo dentro do else so e carregada na primeira vez que o ESP8266 inicia. Depois disso as alteracoes sao feitas pelo Navegador, conforme mostrado anteriormente e depois lida pela parte do if.Quando acessamos a pagina de configuracao do WiFi, chamamos a funcao mostrada abaixo, que monta e preenche o formulario HTML com as informacoes da estrutura wifiConfig, carregadas da EEPROM.Ao clicar no botao "Enviar" desse formulario, a outra funcao que chamada e a mostrada abaixo, onde os dados preenchidos sao registrados na estrutura wifiConfig e depois gravados na EEPROM, atraves da funcao saveConfig() que vimos anteriormente.Repare que a ultima instrucao e uma funcao 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 funcao setup() e chamada novamente, entao as configuracoes carregadas sao as novas que foram gravadas na EEPROM, conforme vemos a seguir.Veja que precisamos primeiro iniciar a EEPROM chamando a funcao EEPROM.begin(), passando o valor 512 que e o tamanho do espaco reservado para essa memoria no seu ESP8266. Verifique o tamanho da versao que voce estiver usando.Depois temos a chamada da funao loadConfig() que faz a leitura da EEPROM e carrega os dados da configuracao na estrutura wifiConfig.Finalmente so precisamos usar os valores de wifiConfig para configurar o SSID e senha na funcao WiFi.begin(), assim como o IP do ESP8266