// https://forum.arduino.cc/t/sending-data-from-arduino-to-esp8266-via-i2c-communication/1040331/4 //https://randomnerdtutorials.com/esp32-esp8266-i2c-lcd-arduino-ide/ //https://www.usinainfo.com.br/blog/sensor-de-ph-arduino-como-calibrar-e-configurar/ #include #include #include #include #include #define D0 16 #define D1 5 #define D2 4 #define D3 0 #define D4 2 #define D5 14 #define D6 12 #define D7 13 #define D8 15 #define D9 3 #define D10 1 int lcdColumns = 16; int lcdRows = 2; LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows); int SwA=14; int SwB=12; int Push=15; int Led=16; int pHSense = 0; //A0 int samples = 10; float Ph=0; const char *ssid = "rede_wifi"; const char *password = "senha"; //const char *ssid = "IFSC"; //const char *password = "campuschapeco"; const int http_port = 8080; int Luz; float calibracao_ph7 = 4.08; // Tensão obtida em solução de calibração pH 7 float calibracao_ph4 = 4.6; // Tensão obtida em solução de calibração pH 4 float calibracao_ph10 = 2.99; // Tensão obtida em solução de calibração pH 10 #define UTILIZAR_PH_10 false // Habilita calibração entre pH 7 e 10, \ caso contrário utiliza pH 7 e 4. float m; float b; int buf[10]; WiFiClient client; void setup() { if (calibracao_ph7 == 0 && calibracao_ph4 == 0 && calibracao_ph10 == 0) { delay(500); Serial.println(); Serial.println("Erro - Necessário colocar os valores de calibração no código!"); while (1) ; } if (!UTILIZAR_PH_10 && calibracao_ph4 == 0 && calibracao_ph10 != 0 && calibracao_ph7 != 0) { delay(500); Serial.println(); Serial.println("Erro - Você não marcou a opção UTILIZAR_PH_10 como true para utilizar pH 7 e 10."); while (1) ; } if (UTILIZAR_PH_10) { m = (7.0 - 10.0) / (calibracao_ph7 - calibracao_ph10); b = 10.0 - m * calibracao_ph10; } else { m = (4.0 - 7.0) / (calibracao_ph4 - calibracao_ph7); b = 7.0 - m * calibracao_ph7; } lcd.init(); lcd.backlight(); pinMode(Push,INPUT); pinMode(SwA,OUTPUT); pinMode(SwB,OUTPUT); pinMode(Led,OUTPUT); Serial.begin(115200); WiFi.mode(WIFI_OFF);delay(1000); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password);Serial.println("."); Serial.print("Conectando..."); lcd.clear(); lcd.setCursor(0,0); lcd.print("Conectando WiFi"); int col=0; while (WiFi.status() != WL_CONNECTED) { delay(500);Serial.print("."); col++; lcd.setCursor(col,1); lcd.print("."); } Serial.println (""); Serial.print ("Conectado a ");Serial.println (ssid); lcd.setCursor(0,0); lcd.print ("Conectado a "); lcd.setCursor(0,1); lcd.println (ssid); delay(3000); lcd.clear(); Serial.print ("Endereço IP: ");Serial.println (WiFi.localIP ()); lcd.setCursor(0,0); lcd.print ("End. IP:"); lcd.setCursor(0,1); lcd.println (WiFi.localIP()); Serial.print("MAC: "); Serial.println(WiFi.macAddress()); delay(3000); } void envia(String postData){ HTTPClient http; http.begin(client,"http://mpt.migueldebarba.com.br/piloto_insert.php"); http.addHeader("Content-Type", "application/x-www-form-urlencoded"); int httpCode = http.POST(postData); String payload = http.getString(); Serial.println("httpCode:"+String(httpCode)); Serial.println("payload:"+payload); http.end(); if (payload=="OK"){digitalWrite(D0,HIGH);delay(1000);} digitalWrite(D0,LOW); } void leitura(){ lcd.clear(); Serial.println("Leitura ph"); lcd.setCursor(0,0); lcd.print("Leitura ph"); delay(1000); digitalWrite(SwA,0); digitalWrite(SwB,0); for (int i = 0; i < 10; i++) { // 11 amostras buf[i] = analogRead(A0); // Ler o sensor PH delay(10); } for (int i = 0; i < 9; i++) { // Ordena em ordem crescente for (int j = i + 1; j < 10; j++) { if (buf[i] > buf[j]) { int temp = buf[i]; buf[i] = buf[j]; buf[j] = temp; } } } int valorMedio = 0; for (int i = 2; i < 8; i++) {valorMedio += buf[i];} float tensao = (valorMedio * 5.0) / 1024.0 / 6; Ph = m * tensao + b; // Converte para pH Serial.println(Ph); delay(500); lcd.clear(); lcd.setCursor(0,0); lcd.print ("Ph "+String(Ph)); delay(1000); digitalWrite(SwA,1); digitalWrite(SwB,1); digitalWrite(Led,HIGH); Luz=analogRead(0); lcd.setCursor(0,1); lcd.print ("Luz "+String(Luz)); delay(100); digitalWrite(Led,LOW); lcd.clear(); lcd.setCursor(0,0); lcd.print ("Gravando BD..."); lcd.setCursor(0,1); lcd.print ("Gravado sucesso!"); delay(1000); } void loop() { if (digitalRead(Push)==1){ leitura(); //calibra(); String Mac=WiFi.macAddress(); String postData = "MMac="+String(Mac)+"&PPh="+String(Ph)+"&LLuz="+String(Luz); envia(postData); } lcd.setCursor(0,0); lcd.print ("IFSC/OI3/2024_1"); lcd.setCursor(0,1); lcd.print ("Qualidade H2O"); }