Trial Thingspeak
Trial Thingspeak
Trial 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 LED D4
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..");
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 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));
}
}