#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
#include <WiFi.h>
#include <HTTPClient.h> // Add this line to include the HTTPClient library
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define THINGSBOARD_SERVER "http://thingsboard.cloud"
#define TOKEN "il4qjbu4a9s0z8pwewo7"
#define DHTPIN 25
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
Serial.begin(115200);
delay(100);
// Initialize the OLED display
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;)
;
}
// Initialize the DHT sensor
dht.begin();
// Connect to Wi-Fi
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Wait for the Wi-Fi connection to be established
delay(1000);
}
void loop() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
float ammonia = 10.5;
float lightIntensity = 500;
float windSpeed = 15;
float CO2 = 100;
// Print sensor data to serial monitor
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" °C, Humidity: ");
Serial.print(humidity);
Serial.print(" %, Ammonia: ");
Serial.print(ammonia);
Serial.print(" ppm, Light Intensity: ");
Serial.print(lightIntensity);
Serial.print(" lux, Wind Speed: ");
Serial.print(windSpeed);
Serial.print(" m/s, Kadar CO2: ");
Serial.println(CO2);
// Send sensor data to Thingsboard
sendDataToThingsboard(temperature, humidity, ammonia, lightIntensity, windSpeed, CO2);
// Display sensor data on OLED display
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("Temperature:");
display.setCursor(0, 10);
display.print(temperature);
display.print(" °C");
display.setCursor(0, 20);
display.print("Humidity: ");
display.setCursor(0, 30);
display.print(humidity);
display.print(" %");
display.display();
delay(2000); // Delay for stability
}
void sendDataToThingsboard(float temperature, float humidity, float ammonia, float lightIntensity, float windSpeed, float CO2) {
WiFiClient client;
HTTPClient http;
// Prepare the Thingsboard server URL
String url = "http://" + String(THINGSBOARD_SERVER) + "/api/v1/" + String(TOKEN) + "/telemetry";
// Create the data payload
String data = "{\"temperature\": " + String(temperature) + ", \"humidity\": " + String(humidity) +
", \"ammonia\": " + String(ammonia) + ", \"lightIntensity\": " + String(lightIntensity) +
", \"windSpeed\": " + String(windSpeed) + ", \"CO2\": " + String(CO2) + "}";
// Send the HTTP POST request
http.begin(client, url);
http.addHeader("Content-Type", "application/json");
int httpResponseCode = http.POST(data);
if (httpResponseCode > 0) {
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
} else {
Serial.print("Error sending data to Thingsboard: ");
Serial.println(httpResponseCode);
}
http.end();
}