Trial Thingspeak

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 4

#include <ThingSpeak.

h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include "DHT.h" //library untuk DHT
#include <Wire.h> //untuk OLED
#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);

#define DHTPIN D5 //deklarasi pin D5 untuk output dari DHT11


#define DHTTYPE DHT11 //menggunakan DHT11
DHT dht(DHTPIN, DHTTYPE);

#define LED D4

const char *ssid = "WIFI_JARKONS"; //nama Hotspot yang digunakan


const char *password = "JARKONS@PLN"; //Password Hotspot yang digunakan
WiFiClient client;
unsigned long myChannelNumber = 2181576; //channel ID
const char * myWriteAPIKey = "DR3NCF64YQCN2SO3"; //write APIKey
const char * myReadAPIKey = "HG9USVVTIZU06MB1"; //kode ReadAPIKey

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);

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);
ThingSpeak.begin(client); //memulai thingspeak
}

void setup()
{
Serial.begin(115200);
Wire.begin();
delay(2000);
Serial.println();
Serial.println("Program start");
Serial.println("dialing..");

// initialize the OLED object


if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS))
{
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}

display.clearDisplay();
cekwifi();//panggil fungsi cek wifi
timeClient.begin();
pinMode (LED,OUTPUT);
}

void loop()
{
float t,h;
Serial.println("sistem monitor");
sensorDHT11();ultrasonik();
OLED();NTP_waktu();
yield();
sentIoT();getIoT();
}

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);
}

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(80,57);
printkurangdarinol(timeClient.getHours());
display.print(":");
printkurangdarinol(timeClient.getMinutes());
display.print(":");
printkurangdarinol(timeClient.getSeconds());
display.display();//menampilkan semua karakter di OLED
}
void OLED()
{
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Jarak, suhu, dan kelembaban");display.println();
display.print("Jarak = ");display.print(ultrasonik());display.println("
cm");//beda antara display.print dengan display.prinln
display.print("Suhu =
");display.print(dht.readTemperature());display.print((char)247);display.println("C
");//display.print memasukkan karakter dan melanjutkan karakter di kanannya
display.print("Kelembaban =
");display.print(dht.readHumidity());display.println(" %");//display.println
memasukkan karakter dan melanjutkan karakter di bawahnya
display.display();
}

void sensorDHT11()
{
dht.begin(); //memulai mengaktifkan DHT
delay(500);
}

float ultrasonik()
{
//deklarasi pin sensor ultrasonik
const int TRIGPIN = D6;
const int ECHOPIN = D7;
float Jarak;long timer;
//deklarasi pin echo sbg input dan trig sbg output
pinMode(ECHOPIN, INPUT);
pinMode(TRIGPIN, OUTPUT);
//sensor ultrasonik mulai kerja
digitalWrite(TRIGPIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGPIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGPIN, LOW);
timer = pulseIn(ECHOPIN, HIGH);
Jarak = timer/58;
delay(1000);

return Jarak;
}

void sentIoT()
{

Serial.println(dht.readTemperature());Serial.println(dht.readHumidity());Serial.pri
nt(ultrasonik());
//thinkspeak start
ThingSpeak.writeField(myChannelNumber, 1, dht.readTemperature(),
myWriteAPIKey); //pengiriman ke data thingspeak
delay(16000); //jangka pengiriman 20 detik
ThingSpeak.writeField(myChannelNumber, 2, dht.readHumidity(), myWriteAPIKey);
//pengiriman ke data thingspeak
delay(16000); //jangka pengiriman 20 detik
ThingSpeak.writeField(myChannelNumber, 3, ultrasonik(), myWriteAPIKey);
//pengiriman ke data thingspeak
delay(16000); //jangka pengiriman 20 detik
}

void getIoT()
{
Serial.println("ambil kendali LED...");
//membaca kondisi sensor dan memutuskan kirim sinyal peringatan
int statusCode = 0; //membuat statusCode bernilai nol kembali
long driveLED = ThingSpeak.readLongField(myChannelNumber, 4, myReadAPIKey);
//pembacaan nilai pada thingspeak di field 1
statusCode = ThingSpeak.getLastReadStatus(); //membaca data thinkspeak yg masuk
if(statusCode == 200) //200 adalah kode status dari thingspeak, bahwa data tsb
adalah data thinkspeak
{
Serial.println("Counter: " + String(driveLED));//jumlah sinyal masuk ke
thinkspeak dari LED
if (driveLED == 0) digitalWrite(LED, LOW);
else if (driveLED == 1) digitalWrite(LED, HIGH);
}
else{ //jika bukan 200 artinya mengalami error
Serial.println("Problem reading channel. HTTP error code " +
String(statusCode));
}
}

You might also like