You are on page 1of 4

#include <SPI.

h>
#include <Wire.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <WiFiClient.h>
#include "DHT.h"//Memasukkan library DHT11
#include <Adafruit_GFX.h> //untuk OLED
#include <Adafruit_SSD1306.h> //untuk OLED
#include <NTPClient.h>
#include <WiFiUdp.h>

//define OLED
#define SCREEN_WIDTH 128 // lebar layar OLED, dalam piksel
#define SCREEN_HEIGHT 64 // Tinggi tampilan OLED, dalam piksel
//deklarasi komunikasi serial OLED, yaitu komunikasi I2C
#define OLED_RESET -1 // Reset pin
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

const long utcOffsetInSeconds = 3600*7; //7 adalah nilai dari GMT+7 (WIB)
char daysOfTheWeek[7][12] = {"Minggu", "Senin ", "Selasa", "Rabu ","Kamis ", "Jumat
", "Sabtu "};
//NTP Server yang digunakan
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds);

#define BLYNK_PRINT Serial


//template ID dan Device name dapat dilihat di Blynk Cloud bagian device
#define BLYNK_TEMPLATE_ID "TMPL67xXq2tVu" //template ID
#define BLYNK_DEVICE_NAME "SMARTHOME" //Device name
BlynkTimer timer;

char auth[] = "SajyGgHsl9aqyighrjW5qOXeJMkimc84"; //Auth Token


const char *ssid = "WIFI_JARKONS"; //nama Hotspot yang digunakan
const char *password = "JARKONS@PLN"; //Password Hotspot yang digunakan
WiFiClient client;

#define LEDpenerangandalam D7
#define DHTPIN D4 //Menentukan pin untuk data
#define DHTTYPE DHT11 //Mendefinisikan tipe DHT yang dipakai
DHT dht(DHTPIN, DHTTYPE); //Pengenalan sensor DHT
int sensorApi = D5;
int LEDsensorApi = D3;
int LEDsensorLDR = D6;
int sensor_LDR = A0;

BLYNK_WRITE(V0)
{
int pinValue = param.asInt();Serial.println("dalam main");
digitalWrite(LEDpenerangandalam,pinValue);
}

void setup()
{
// put your setup code here, to run once:
Serial.begin(9600);
Wire.begin();
pinMode(sensorApi, INPUT);
pinMode(LEDsensorApi, OUTPUT);
pinMode(LEDpenerangandalam,OUTPUT);
digitalWrite(LEDsensorApi, LOW);

pinMode(sensor_LDR, INPUT);
pinMode(LEDsensorLDR, OUTPUT);
digitalWrite(LEDsensorLDR, LOW);

// initialize the OLED object


if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS))
{
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
cekwifi();//panggil fungsi cek wifi
timeClient.begin();
Blynk.begin(auth, ssid, password); //memulai Blynk
timer.setInterval(1000L, sensorDHT11); //Mengaktifkan timer untuk pengiriman data
1000ms
}

void loop()
{
Serial.println("=================");
sensorFire();
sensorDHT11();
OLED();
NTP_waktu();
yield();
Blynk.run();
Serial.println("=================");
}

void sensorDHT11()
{
dht.begin(); //Membuka jalur komunikasi DHT11
delay(2000); //Memberikan jeda selama 2000ms untuk pembacaan sensor
Serial.println(dht.readTemperature());
Serial.println(dht.readHumidity());
Blynk.virtualWrite(V1, dht.readTemperature()); //mengirimkan data ke Virtual pin
di Blynk Cloud
Blynk.virtualWrite(V2, dht.readHumidity()); //mengirimkan data ke Virtual pin di
Blynk Cloud
}

void sensorFire()
{
// put your main code here, to run repeatedly:
int nilaiSensor;
nilaiSensor=digitalRead(sensorApi);
Serial.print("Nilai sensor : ");
Serial.println(nilaiSensor);
if(nilaiSensor==0)
{
digitalWrite(LEDsensorApi, HIGH);
delay(100);
}
else
{
digitalWrite(LEDsensorApi, LOW);
delay(100);
}
}

int sensorLDR()
{
int nilaiLDR=analogRead(sensor_LDR);Serial.println(nilaiLDR);
Blynk.virtualWrite(V3, nilaiLDR); //mengirimkan data ke Virtual pin di Blynk Cloud
if(nilaiLDR <= 200)
{
digitalWrite(LEDsensorLDR, HIGH);Blynk.virtualWrite(V4, 1); //mengirimkan data ke
Virtual pin di Blynk Cloud
}
else if(nilaiLDR > 200)
{
digitalWrite(LEDsensorLDR, LOW);Blynk.virtualWrite(V4, 0); //mengirimkan data ke
Virtual pin di Blynk Cloud
}

delay(1000);
return nilaiLDR;
}

void OLED()
{
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("LDR, suhu, dan kelembaban");display.println();
display.print("LDR = ");display.println(sensorLDR());//beda antara display.print
dengan display.prinln
display.print("Suhu = ");display.println(dht.readTemperature());//display.print
memasukkan karakter dan melanjutkan karakter di kanannya
display.print("Kelembaban =
");display.println(dht.readHumidity());//display.println memasukkan karakter dan
melanjutkan karakter di bawahnya
display.display();
}

void cekwifi()
{
//memastikan koneksi dengan hotspot
Serial.print("Connecting to ");
Serial.println(ssid); //menampilkan nama hotspot ke Serial monitor
WiFi.begin(ssid, password); //memulai untuk terhubung WiFi
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected"); //menandakan sudah terkoneksi
Serial.println(WiFi.localIP()); //menampilkan Alamat IP
WiFi.mode(WIFI_STA);
}

void NTP_waktu()
{
display.setTextSize(1);
display.setTextColor(WHITE);
timeClient.update();
//menampilkan waktu pada OLED
display.setTextSize(1);
display.setCursor(0,57);
display.print(daysOfTheWeek[timeClient.getDay()]);
display.setTextSize(1);
display.setCursor(93,57);
printkurangdarinol(timeClient.getHours());
display.print(":");
printkurangdarinol(timeClient.getMinutes());
//display.print(":");
//printkurangdarinol(timeClient.getSeconds());
display.display();//menampilkan semua karakter di OLED
}

void printkurangdarinol(int data)


{
//ini adalah function untuk nilai 0 hingga 9 agar diberikan angka nol di depannya
if (data >= 0 && data < 10)
{ //0 - 9
display.write('0'); //
}
display.print(data);
}

You might also like