#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <DHT.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#define AIO_SERVER "io.adafruit.com" // Adafruit Server
#define AIO_SERVERPORT 1883
#define AIO_USERNAME "jmaitreya18" // Username
#define AIO_KEY "aio_yrSE34WQRKLjHIS2X2QRq1eMrc5h" // Auth Key
WiFiClient client;
// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/Proj1_Temp");
Adafruit_MQTT_Publish Humidity = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/Proj1_Hum");
Adafruit_MQTT_Publish Soil = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/Soil");
#define DHTPIN 26
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Create the lcd object address 0x3F and 16 columns x 2 rows
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// Initialize the LCD connected
lcd.init();
// Turn on the backlight on LCD.
lcd.backlight();
// Print the message on the LCD.
Serial.begin(115200);
lcd.print("Temp, Hum & Soil");
delay(1000);
lcd.clear();
dht.begin();
// Connect to WiFi
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
connectToMQTT();
}
void connectToMQTT() {
while (mqtt.connect() != 0) {
Serial.println("MQTT connection failed! Retrying...");
delay(5000); // Delay for retrying
}
Serial.println("Connected to Adafruit IO!");
}
void loop() {
if (!mqtt.ping(3)) {
if (!mqtt.connected()) {
connectToMQTT();
}
}
float h = dht.readHumidity();
float t = dht.readTemperature();
float i = analogRead(34);
String msg = i < 2165 ? "DRY" : i > 3135 ? "WET" : "OK";
Serial.println("Temp: " + String(t));
Serial.println("Hum: " + String(h));
Serial.println("Soil: " + String(i));
lcd.setCursor(0, 0);
lcd.print(t);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print(h);
lcd.print("%");
lcd.setCursor(8, 1);
lcd.print("Soil:");
lcd.print(msg);
// Publish to Adafruit IO
if (!Temperature.publish(t)) {
Serial.println(F("Failed to publish temperature"));
}
if (!Humidity.publish(h)) {
Serial.println(F("Failed to publish humidity"));
}
if (!Soil.publish(msg.c_str())) { // Convert String to const char*
Serial.println(F("Failed to publish soil moisture"));
} else {
Serial.println(F("Data sent to Adafruit IO!"));
}
delay(5000); // Reduce delay to 1 second for faster updates
}
/*#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <DHT.h>
#include <WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#include <HTTPClient.h>
#define AIO_SERVER "io.adafruit.com" //Adafruit Server
#define AIO_SERVERPORT 1883
#define AIO_USERNAME "jmaitreya18" // Username
#define AIO_KEY "aio_yrSE34WQRKLjHIS2X2QRq1eMrc5h" // Auth Key
WiFiClient client;
// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/Proj1_Temp");
Adafruit_MQTT_Publish Humidity = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/Proj1_Hum");
Adafruit_MQTT_Publish Soil = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/Soil");
#define DHTPIN 26
#define DHTTYPE DHT22
int cloud=0;
DHT dht(DHTPIN, DHTTYPE);
// Create the lcd object address 0x3F and 16 columns x 2 rows
LiquidCrystal_I2C lcd (0x27, 16,2); //
void setup () {
// Initialize the LCD connected
lcd. init ();
// Turn on the backlight on LCD.
lcd. backlight ();
// print the Message on the LCD.
Serial.begin(115200);
lcd.print ( "Temp, Hum & Soil" );
delay(1000);
lcd.clear();
delay(10);
dht.begin();
// We start by connecting to a WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void connect() {
Serial.print(F("Connecting to Adafruit IO... "));
int8_t ret;
while ((ret = mqtt.connect()) != 0) {
switch (ret) {
case 1: Serial.println(F("Wrong protocol")); break;
case 2: Serial.println(F("ID rejected")); break;
case 3: Serial.println(F("Server unavail")); break;
case 4: Serial.println(F("Bad user/pass")); break;
case 5: Serial.println(F("Not authed")); break;
case 6: Serial.println(F("Failed to subscribe")); break;
default: Serial.println(F("Connection failed")); break;
}
if(ret >= 0)
mqtt.disconnect();
Serial.println(F("Retrying connection..."));
delay(10000);
}
Serial.println(F("Adafruit IO Connected!"));
}
int value = 0;
void loop() {
if(! mqtt.ping(3)) {
// reconnect to adafruit io
if(! mqtt.connected())
connect();
}
float h= dht.readHumidity();
float t = dht.readTemperature();
float i = analogRead(34);
String msg = i < 2165 ? "DRY" : i > 3135 ? "WET" : "OK";
Serial.println("temp=");
Serial.println(t);
Serial.println("Hum=");
Serial.println(h);
Serial.println(i);
lcd. setCursor (0, 0);
lcd. print ( t);
lcd. print ( "C" );
lcd. setCursor (0, 1);
lcd. print ( h);
lcd. print ( "%" );
lcd. setCursor (8, 1);
lcd.print("Soil:");
lcd.print(msg);
delay (7000);
lcd.clear();
if (! Temperature.publish(t)) { //Publish to Adafruit
Serial.println(F("Failed"));
}
if (! Humidity.publish(h)) { //Publish to Adafruit
Serial.println(F("Failed"));
}
if (!Soil.publish(msg.c_str())) { // Convert String to const char*
Serial.println(F("Failed"));
}
else {
Serial.println(F("Sent!"));
}
}*/