#include "secrets.h"
#include "WiFi.h"
#include <WiFiClientSecure.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include "DFRobot_EC10.h"
#include "DHT.h"
#include <Ultrasonic.h>
#define TRIGGER_PIN 0
#define ECHO_PIN 16
#define PH_PIN 34
#define EC_PIN 35
#define DHTPIN 15
#define DHTTYPE DHT22
#define AWS_IOT_PUBLISH_TOPIC "esp32/pub"
#define AWS_IOT_SUBSCRIBE_TOPIC "esp32/sub"
float h;
float t;
float d;
float pH;
float EC;
float tds;
float phVoltage;
float ecVoltage;
float phValue;
float ecValue;
float temperature = 25.0;
DFRobot_EC10 ec;
DHT dht(DHTPIN, DHTTYPE);
Ultrasonic ultrasonic(TRIGGER_PIN, ECHO_PIN);
WiFiClientSecure net = WiFiClientSecure();
PubSubClient client(net);
void connectAWS() {
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.println("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
net.setCACert(AWS_CERT_CA);
net.setCertificate(AWS_CERT_CRT);
net.setPrivateKey(AWS_CERT_PRIVATE);
client.setServer(AWS_IOT_ENDPOINT, 8883);
client.setCallback(messageHandler);
Serial.println("Connecting to AWS IOT");
while (!client.connect(THINGNAME)) {
Serial.print(".");
delay(100);
}
if (!client.connected()) {
Serial.println("AWS IoT Timeout!");
return;
}
client.subscribe(AWS_IOT_SUBSCRIBE_TOPIC);
Serial.println("AWS IoT Connected!");
}
void publishMessage() {
StaticJsonDocument<200> doc;
// doc["Humidity"] = h;
// doc["Temperature"] = t;
// doc["distance"] = d;
doc["pH"] = phValue;
doc["EC"] = ecValue;
doc["TDS"] = tds;
char jsonBuffer[512];
serializeJson(doc, jsonBuffer);
// Serial.print("Publishing to AWS: ");
// Serial.println(jsonBuffer);
client.publish(AWS_IOT_PUBLISH_TOPIC, jsonBuffer);
}
void messageHandler(char *topic, byte *payload, unsigned int length) {
Serial.print("incoming: ");
Serial.println(topic);
StaticJsonDocument<200> doc;
deserializeJson(doc, payload);
const char *message = doc["message"];
Serial.println(message);
}
void setup() {
Serial.begin(115200);
pinMode(PH_PIN, INPUT);
pinMode(EC_PIN, INPUT);
dht.begin();
ec.begin();
connectAWS();
}
void loop() {
h = dht.readHumidity();
t = dht.readTemperature();
d = ultrasonic.read();
pH = analogRead(PH_PIN);
EC = analogRead(EC_PIN);
phVoltage = (pH * 3.3) / 4095;
ecVoltage = (EC * 3.3) / 4095;
phValue = map(phVoltage, 0, 3.3, 0, 14);
float ECvol = ecVoltage * 1000;
ecValue = ec.readEC(ECvol, temperature);
tds = ecValue * 0.64;
// Print sensor readings for debugging
// Serial.print(F("Humidity: "));
// Serial.print(h);
// Serial.println(F("%"));
// Serial.print(F("Temperature: "));
// Serial.print(t);
// Serial.print("°C\n");
// Serial.print(F("Distance:"));
// Serial.print(d);
// Serial.println(F("cm"));
Serial.print(F("pH: "));
Serial.print(phValue, 2);
Serial.println(F(" pH"));
Serial.print(F("EC: "));
Serial.print(ecValue);
Serial.println(F(" ms/cm"));
Serial.print(F("TDS: "));
Serial.print(tds);
Serial.println(F(" ppm"));
Serial.println("---------------------------------");
publishMessage();
client.loop();
delay(1000);
}