#include <ArduinoJson.h>
#include <HTTPClient.h>
#include <WiFi.h>
#include "time.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "DHTesp.h"
// Learn arduino programming
// https://wokwi.com/projects/336081822655971922
const int DHT_PIN = 14;
DHTesp dhtSensor;
#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);
const char* ssid = "Wokwi-GUEST";
const char* pass = "";
const char serverName[] = "be-prifaiotplatform.peruri.co.id"; // server name
int port = 7002;
const char* ntpServer = "ntp.bmkg.go.id";
unsigned long epoch;
int seq = 0;
// timer_01
unsigned long lastTime = 0;
unsigned long timerDelay = 5000;
int alert = 0;
DynamicJsonDocument doc(1024);
char outData[128];
unsigned long getTime() {
time_t now;
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
//Serial.println("Failed to obtain time");
return (0);
}
time(&now);
return now;
}
void setup()
{
Serial.begin( 9600 );
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
pinMode(2, OUTPUT);
WiFi.begin(ssid, pass);
Serial.println("Connecting");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to WiFi network with IP Address: ");
Serial.println(WiFi.localIP());
Serial.println(WiFi.macAddress());
Serial.println("Timer set to 5 seconds (timerDelay variable), it will take 5 seconds before publishing the first reading.");
configTime(0, 0, ntpServer);
randomSeed(analogRead(A0));
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 10);
// Display static text
display.println("Hello, world!");
display.display();
}
void loop() {
epoch = getTime();
unsigned long currentTime = millis();
int pH = random(6, 8);
int Tss = random(80, 300);
int test = 200;
TempAndHumidity data = dhtSensor.getTempAndHumidity();
String temp = String(data.temperature, 2);
String hum = String(data.humidity, 1);
display.clearDisplay();
display.setTextSize(1.3);
display.setTextColor(WHITE);
display.setCursor(0, 10);
// Display static text
display.println("Monitoring Suhu");
display.println("Temp: " + temp + "°C");
display.println("Hum: " + hum + "%");
display.display();
delay(250);
if (data.temperature > 36) {
alertActive();
}
if (currentTime - lastTime > timerDelay) {
lastTime = currentTime;
if (WiFi.status() == WL_CONNECTED) {
// request 1
WiFiClient client;
HTTPClient http;
// Your Domain name with URL path or IP address with path
http.begin(client, serverName, port);
// Specify content-type header
http.addHeader("Content-Type", "application/json");
seq += 1;
Serial.println(pH);
Serial.println(Tss);
doc["deviceId"] = "lutfi_http_01";
doc["time"] = epoch;
doc["seqNumber"] = seq;
// doc["data"]["ph"] = 8;
JsonArray data = doc.createNestedArray("data");
data.add(pH);
data.add(Tss);
serializeJson(doc, outData);
int len = strlen(outData) + 1;
char msg[len];
sprintf(msg, "%s\r\n", outData);
Serial.print(F("Performing HTTP POST request... "));
// Send HTTP POST request
int httpResponseCode = http.POST(msg);
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
// Free resources
http.end();
} else {
Serial.println("WiFi Disconnected");
}
}
}
void myTone( int pin)
{
ledcAttachPin(pin, 0); // pin, channel
ledcWriteNote(0, NOTE_F, 4); // channel, frequency, octave
}
void myNoTone( int pin)
{
ledcDetachPin(pin);
}
void alertActive() {
myTone(2);
delay(500);
myNoTone(2);
delay(200);
myTone(2);
delay(500);
myNoTone(2);
delay(200);
myTone(2);
delay(500);
myNoTone(2);
delay(200);
myTone(2);
delay(500);
myNoTone(2);
delay(200);
myTone(2);
delay(500);
myNoTone(2);
delay(200);
}