Para fazer a verificação periódica consultando via web, eu escrevi esse post. Nele, utilizo também um recurso da API do ESP8266, que é o timer, de forma que a verificação é assincrona. Podemos fazer o intervalo de duas maneiras; uma é através de millis(), que funciona bem se você não tem nenhum compromisso com precisão. Cito isso porque se houver algum delay no loop, certamente haverá diferença de tempo também na comunicação com o broker. Por outro lado, se estiver acontecendo uma tarefa de maior prioridade que a comunicação com o broker, uma interrupção pode ser prejudicial. Tentei usar o timer, mas não funcionou bem em conjunção com as demais bibliotecas, acabei usando algo parecido com o millis(), mas da própria API do ESP8266. O millis também deu vários WDT. Delay, nem pensar, só um yield muito humilde no final do loop, senão, de novo reset pelo WDT. Gostaria de acrescentar que a função de timer utilizado está disponível através da API do ESP8266 e a estrutura do método contempla a chamada de uma função de callback, mas além de não ter sido possível usar o timer, o MQTT tem um callback, ia virar uma zona. E por falar nisso, estou fortemente inclinado a escrever um post só sobre a API do ESP8266, mas por enquanto, vamos fazer “o mais Arduino possível”.
Você encontrará várias bibliotecas para comunicação MQTT procurando pouco. Eu optei por essa, que você encontra no Library Manager da IDE do seu Arduino. Nesse caso, não poderei abstrair porque o comportamento da biblioteca certamente varia das demais. A documentação completa da API você encontra aqui. A biblioteca oferece vários exemplos, mas eu estava na dúvida de como funcionava o tratamento da resposta de um subscribe, por isso procurei pela documentação. A documentação discorre que se o client se subescrever para tópicos no broker, obrigatoriamente será necessário declarar uma função callback() no seguinte formato:
Não gosto de descrever métodos e funções, mas nesse caso será realmente necessário fazê-lo para não ter que explicar isso durante a exibição do código.