ESP32-Environment-Metrics-Collector
-
Objetivos:
Código que faça leitura de sensores, calcule os dados e envie para uma API que fará a inserção no banco de dados. -
Sensores:
Temperatura, umidade do solo e luminosidade -
Como os dados são enviados:
Por meio do wifi, e com requisições em um servidor usando HTTPS -
Problemas encontrados
-
Arduino IDE e outras plataformas, como o PlatformIO não conseguem escrever o código no ESP
Descrição: Ao tentar escrever o código apresenta mensagem de erro.
Solução/Paliativa: Soldar um capacitor de 10uF em uns pinos (solução meio porca no meu ver) ou pressionar e segurar o botão de boot enquanto a ferramenta de upload está tentando se conectar na porta de comunicação serial.
Infelizmente: Parece uma questão de hardware que não será resolvida. -
Não conecta no Wifi
Descrição: Carregado o código para dentro do ESP32, mesmo com as credenciais corretas, ocorre erro de conexão à rede wireless.
Paliativas: Reiniciar o ESP após o upload do código pressionando o botão EN, ou chamar a funçãoWiFi.disconnect();
já no setup (nem sempre funciona).
Infelizmente: Não encontrei solução até o momento. -
Pinos GPIO ADC2_X não liam os dados do sensor
Descrião: Mesmo que nada estivesse conectado à porta, o analogRead() retornava sempre o valor máximo (4095), como se estivesse em curto com o 3v3. Garimpando na internet descobri que existe algumas issues no repositório da Espressif no Github. Ocorre que há um bug na lib Wifi que modifica os registradores dos pinos ADC2_X, tornando-os itutilizáveis durante o uso do Wifi (Pelo que li também ocorre habilitando o Bluetooth).
Solução: Algum hacker de hardware descobriu que se salvar o estado do registrador antes de iniciar o Wifi e, imediatamente antes de realizar uma leitura analógica esse registrador ser resetado para o valor original, é possível fazer a leitura corretamente. Outro hacker de hardware descobriu uma forma de corrigir uma inversão dos valores lidos que ocorriam em alguns casos nessas portas e apresentou para a comunidade.
Infelizmente: Até o momento o problema não foi corrigido. -
Método POST falha pois o servidor não entendeu a requisição
Descrião: O servidor HTTP recebia o POST, mas respondia com BAD REQUEST.
Solução: Utilizei a biblioteca#include <ArduinoJson.h>
para serializar os dados em JSON e enviá-los para o servidor
Dica: Verifique o assistente do ArduinoJson se pretende utilizá-lo, ajuda muito. -
Código só roda quando o serial monitor está escutando
Descrião: Percebi que o código não é executado no ESP até que o monitor serial seja aberto naquela porta.
Solução: Sem solução
Infelizmente: Parece um problema no circuito de reinício do ESP32. A issue que tratava desse problema foi encerrada, mas fiz um comentário.