#include #include #include // Configuração global da rede wi-fi const char* ssid = "**********"; // MODIFICAR ESTA LINHA...... const char* password = "**********"; // MODIFICAR ESTA LINHA...... int btnGPIO = 0; int btnState = false; // Configuração global da api const char* FKhorta = "7"; // MODIFICAR ESTA LINHA...... const char* apikey = "*********************************"; // MODIFICAR ESTA LINHA...... // Protótipos das funções int enviar(int inFKsensor, float inValor, int posicaoSensorLista); void compararEnviar(int posicaoSensorLista, float valor, float diferenca); void verifiqueInternetReconecte(int espera); void conectar(); // Estrutura para informações de sensores struct SensorInfo { int FK; int success; float lastValue; int pin; }; const int totalSensores = 2; // possui 'totalSensores+1' posições começando do índice zero. SensorInfo sensorLista[totalSensores]; void configureSensors() { // Configurar sensores aqui float valueConsideredNull = -10000; // Valor aleatório sensorLista[0] = {36, 1, valueConsideredNull, -1}; // -1 indica que não usa pino específico } void setup() { configureSensors(); conectar(); } void loop() { verifiqueInternetReconecte(2000); float readValorAleatorio = random(0, 11); // Gera um número entre 0 (inclusivo) e 11 (exclusivo) compararEnviar(0, readValorAleatorio, 2); // se abs(ultimo valor - valor atual)>2 então envia. Evita dados iguais ou parecidos com o anterior enviado. delay(10000);//de 10 em 10 segundos. } // Se não tiver Internet reestabelecer conexão após 'espera' milisegundos. void verifiqueInternetReconecte(int espera) { if (WiFi.status() != WL_CONNECTED) { Serial.print("Sem internet. Tentar conexão em "); Serial.print(espera); Serial.println(" segundos..."); delay(espera); conectar(); } } /* Envia dados do sensor para um determinado ID */ void compararEnviar(int sensorIndex, float valor, float limite) { float temp[3] = {sensorLista[sensorIndex].FK, sensorLista[sensorIndex].success, sensorLista[sensorIndex].lastValue}; float FKsensor = temp[0]; float sucesso = temp[1]; float anterior = temp[2]; if (abs(valor - anterior) >= limite) { int result = enviar(FKsensor, valor, sensorIndex); if (result == 1) { sensorLista[sensorIndex].success = 1; sensorLista[sensorIndex].lastValue = valor; } } else { // Não envia Serial.println("Diferença pequena no sensor de ID:" + String(FKsensor)); } } /* * Conecta ao wi-fi */ void conectar() { Serial.begin(9600); delay(100); pinMode(btnGPIO, INPUT); Serial.print("[WiFi] Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); int tryDelay = 1000; int numberOfTries = 40; while (true) { switch (WiFi.status()) { case WL_NO_SSID_AVAIL: Serial.println("[WiFi] SSID not found"); break; case WL_CONNECT_FAILED: Serial.print("[WiFi] Failed - WiFi not connected! Reason: "); return; break; case WL_CONNECTION_LOST: Serial.println("[WiFi] Connection was lost"); break; case WL_SCAN_COMPLETED: Serial.println("[WiFi] Scan is completed"); break; case WL_DISCONNECTED: Serial.println("[WiFi] WiFi is disconnected"); break; case WL_CONNECTED: Serial.println("[WiFi] WiFi is connected!"); Serial.print("[WiFi] IP address: "); Serial.println(WiFi.localIP()); return; break; default: Serial.print("[WiFi] WiFi Status: "); Serial.println(WiFi.status()); break; } delay(tryDelay); if (numberOfTries <= 0) { Serial.print("[WiFi] Failed to connect to WiFi!"); WiFi.disconnect(); return; } else { numberOfTries--; } } } /* * Enviar os dados para a api. */ int enviar(int inFKsensor, float inValor, int sensorIndex) { btnState = digitalRead(btnGPIO); if (btnState == LOW) { Serial.println("[WiFi] Disconnecting from WiFi!"); if (WiFi.disconnect(true, false)) { Serial.println("[WiFi] Disconnected from WiFi!"); } delay(1000); } if (WiFi.status() == WL_CONNECTED) { HTTPClient http; String data_to_send = "apikey=" + String(apikey) + "&FKhorta=" + String(FKhorta) + "&FKsensor=" + String(inFKsensor) + "&c=" + String(inValor); //Serial.println(data_to_send); http.begin("https://horta.gvsoftwares.com.br/api/set_leiturapost/"); http.addHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8"); int codigo_resposta = http.POST(data_to_send); if (codigo_resposta > 0) { Serial.println("Código HTTP -> " + String(codigo_resposta)); if (codigo_resposta == 200) { String corpo_resposta = http.getString(); Serial.println("O servidor Respondeu:"); Serial.println(corpo_resposta); sensorLista[sensorIndex].success= 1; sensorLista[sensorIndex].lastValue = inValor; return 1; } } else { Serial.println("Erro ao enviar POST:"); Serial.println(codigo_resposta); sensorLista[sensorIndex].success = 0; return 0; } http.end(); } else { Serial.println("Erro na conexão WIFI."); sensorLista[sensorIndex].success = 0; return 0; } }