#include <OneWire.h>
#include <DallasTemperature.h>
#include <SoftwareSerial.h>
// Configurações do sensor DS18B20
OneWire oneWire(2); // Pino do sensor DS18B20
DallasTemperature sensors(&oneWire);
// Configurações do sensor de pH
const int phPin = A0; // Pino do sensor de pH
// Configurações do sensor de turbidez
const int turbidityPin = A1; // Pino do sensor de turbidez
// Configurações do sensor ultrassônico
const int trigPin = 3;
const int echoPin = 4;
// Configurações do SoftwareSerial para comunicação com o ESP32
SoftwareSerial espSerial(5, 6); // RX, TX
void setup() {
Serial.begin(9600);
espSerial.begin(115200); // Velocidade do ESP32
// Inicializa os sensores
sensors.begin();
// Configuração do sensor ultrassônico
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
// Lê os dados dos sensores
float temperature = readTemperature();
float phValue = readPH();
float turbidity = readTurbidity();
float distance = readUltrasonicDistance();
// Cria o JSON para transmitir
String jsonData = createJSON(temperature, phValue, turbidity, distance);
// Envia os dados para o ESP32
espSerial.println(jsonData);
Serial.println("Dados enviados: " + jsonData);
// Aguarda 10 segundos antes de enviar novamente
delay(10000);
}
// Função para ler a temperatura
float readTemperature() {
sensors.requestTemperatures();
return sensors.getTempCByIndex(0);
}
// Função para ler o pH
float readPH() {
// Lê o valor do sensor de pH no pino A0
int sensorValue = analogRead(phPin);
// Converte o valor analógico (0 a 1023) para pH
float voltage = sensorValue * (5.0 / 1023.0); // 5V referência
// Ajuste a fórmula conforme necessário para seu sensor de pH
float phValue = (3.5 * voltage); // Exemplo de conversão
return phValue;
}
// Função para ler a turbidez
float readTurbidity() {
// Lê o valor do sensor de turbidez no pino A1
int sensorValue = analogRead(turbidityPin);
// Converte o valor analógico (0 a 1023) para turbidez em NTU (Unidade Nefelométrica de Turbidez)
// Exemplo simples de conversão (ajuste conforme necessário para o sensor)
float voltage = sensorValue * (5.0 / 1023.0); // Converte para volts (assumindo 5V de referência)
float turbidityValue = (voltage * 3000.0) / 5.0; // Exemplo de cálculo para obter NTU
return turbidityValue;
}
// Função para ler a distância do sensor ultrassônico
float readUltrasonicDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
float distance = duration * 0.034 / 2; // cm
return distance;
}
// Função para criar o JSON
String createJSON(float temperature, float phValue, float turbidity, float distance) {
String jsonData = "{";
jsonData += "\"temperature\":" + String(temperature) + ",";
jsonData += "\"pH\":" + String(phValue) + ",";
jsonData += "\"turbidity\":" + String(turbidity) + ",";
jsonData += "\"distance\":" + String(distance);
jsonData += "}";
return jsonData;
}