#include <WiFi.h>
#include "DHTesp.h"
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <WiFiClient.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
#define DHT_PIN 18
#define ldrPin 34
#define buttonPin 2
const char ssid[] = "Wokwi-GUEST";
const char pass[] = "";
// const char *host = "http://192.168.8.40:8000/api/devicelog";
int ldrValue;
float temperature, humidity;
unsigned long lastTime = 0;
unsigned long intervalTime = 1000;
int currentScreen = 0;
DHTesp dht;
void setup() {
Serial.begin(115200);
connectWifi();
pinMode(ldrPin, INPUT);
pinMode(buttonPin, INPUT_PULLUP);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.display();
delay(2000);
display.clearDisplay();
dht_init();
displayScreen();
}
void loop() {
send_data();
delay(1000);
handleButtonPress();
}
void connectWifi() {
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("Connected to WiFi");
}
void dht_init() {
dht.setup(DHT_PIN, DHTesp::DHT22);
}
void dht_read() {
TempAndHumidity data = dht.getTempAndHumidity();
temperature = data.temperature;
humidity = data.humidity;
}
void send_data() {
ldrValue = analogRead(ldrPin);
dht_read();
HTTPClient http;
String data1 = "{\"device_id\": 1, \"value\": " + String(temperature) + "}";
String data2 = "{\"device_id\": 3, \"value\": " + String(ldrValue) + "}";
http.begin("http://192.168.8.40:8000/api/devicelog");
// http.addHeader("Content-Type", "application/json");
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
// Send temperature data
auto httpCode1 = http.POST(data1);
if (httpCode1 > 0) {
Serial.print("Temperature data sent, status: ");
Serial.println(httpCode1);
String response = http.getString();
Serial.println(response);
} else {
Serial.print("Error sending temperature data, HTTP code: ");
Serial.println(httpCode1);
}
http.end();
// Send LDR data
http.begin("http://192.168.8.40:8000/api/devicelog");
// http.addHeader("Content-Type", "application/json");
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
int httpCode2 = http.POST(data2);
if (httpCode2 > 0) {
Serial.print("LDR data sent, status: ");
Serial.println(httpCode2);
String response = http.getString();
Serial.println(response);
} else {
Serial.print("Error sending LDR data, HTTP code: ");
Serial.println(httpCode2);
}
http.end();
}
void handleButtonPress() {
static unsigned long lastDebounceTime = 0;
static int lastButtonState = HIGH;
int buttonState = digitalRead(buttonPin);
if (buttonState != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > 50) {
if (buttonState == LOW) {
currentScreen = (currentScreen + 1) % 3;
displayScreen();
}
}
lastButtonState = buttonState;
}
void displayScreen() {
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 2);
display.setTextColor(WHITE);
switch (currentScreen) {
case 0:
display.println("Greenhouse");
break;
case 1:
display.println("Temperature: " + String(temperature) + " C");
display.println("Humidity: " + String(humidity) + " %");
break;
case 2:
display.println("LDR Value: " + String(ldrValue));
break;
}
display.display();
}