//#define BLYNK_PRINT Serial // disable baris ini jika sudah fix #include // lib wifi #include // lib blynk #include // lib sensor DHT11 #include #include //lib cek realtime waktu // DEFINISIKAN PIN //#define TANAH D2 // triger ping (5v) #define DHTPIN D1 // input sensor DHT #define RELkabut D6 // output Relay-1 #define RELTanah D7 // output Relay-2 //#define RELpir D9 // output Relay-2 #define DHTTYPE DHT11 // jenis sensor DHT 11 DHT dht(DHTPIN, DHTTYPE); BlynkTimer timer; BlynkTimer timerTANAH; BlynkTimer timerSEND; BlynkTimer timerCek; WidgetLED led2(V6); // PREDEFINE int analogTanah = A0; long duration; int distance; bool Connected2Blynk = false; int statusnya = 0; int lamaON = 0; int lamaOFF = 0; int statusMalam = 0; //int air = 1; bool TanahValue = LOW; int timezone = 8 * 3600; // time zone int dst = 0; int jam; int menit; unsigned long waktuSebelumPIR=0; //bool statusPIR=LOW; //bool simpanPIR=LOW; // PREDEFINE TIMER SLIDER int WM1=3; int timerON=5; // Global variable used in Slider widget and runEveryMinute() int timerOFF=30; // Global variable used in Slider widget and runEveryMinute() int bacasuhu,setsuhu=28; int bacahumap,sethumap=70; int bacatanah,settanah=800; int x, y; int CounterOn = 0; int CounterOff = 0; int ledStatus = 0; //PASTE KODE TOKEN char auth[] = "LgJUOspAmLYhhHbI0mBM79tKj1YDyCqi"; // char ssid[] = "IoT"; // ssid untuk konek internet char pass[] = "99887766"; // pass ssid //------- start ambil nilai slider time mist BLYNK_WRITE(V3) { // add a slider to your project on V0 range 0 to 120 (seconds) x = param.asInt(); // set variable as Slider value timerON = x;} BLYNK_WRITE(V4) { // add a slider to your project on V1 range 0 to 120 (seconds) y = param.asInt(); // set variable as Slider value timerOFF = y; } BLYNK_WRITE(V11) { // add a slider to your project on V1 range 0 to 120 (seconds) bacahumap = param.asInt(); // set variable as Slider value sethumap = bacahumap; } BLYNK_WRITE(V12) { // add a slider to your project on V1 range 0 to 120 (seconds) bacasuhu= param.asInt(); // set variable as Slider value setsuhu = bacasuhu; // } } BLYNK_WRITE(V16) { // add a slider to your project on V1 range 0 to 120 (seconds) bacatanah= param.asInt(); // set variable as Slider value settanah = bacatanah; // } } // digitalWrite(RELAY_PIN_3, relay3State); //--------- end ambil nilai slider time mist //----start membuat blink indikator //void statusLED() // { // digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) // delay(200); // wait for a second // digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW // delay(100); // } //----end membuat blink indikator //----- start kontrol misting void led_control() { if ((CounterOn > 0) && (ledStatus == 0))// && (siram == 1)) // && (air==1)) { // digitalWrite(WM1,HIGH); //write to pin to turn the LED on. //Serial.print(minute()); //Serial.print(": LED on\n"); //Blynk.virtualWrite(V6, 150); // digitalWrite(REL2, LOW); // RELkabut HIGH (dibalik) digitalWrite(RELkabut, LOW); // RELkabut HIGH (dibalik) ledStatus = 1; CounterOff = 0; } if ((CounterOn > 0) && (ledStatus == 1)) { CounterOn = (CounterOn - 1); Blynk.virtualWrite(V8, CounterOn); //countdown timeON led2.setValue(250); } if ((CounterOff == 0) && (CounterOn == 0) && (ledStatus == 1)) // && (air==1)) { CounterOff = timerOFF; } if ((CounterOff > 0) && (ledStatus == 1))// && (siram == 1)) // && (air==1)) { //digitalWrite(WM1,LOW); //write to pin to turn the LED off. //Serial.print(minute()); //Serial.print(": LED off\n"); digitalWrite(RELkabut, HIGH); // RELkabut LOW (dibalik) // digitalWrite(REL2, HIGH); // RELkabut LOW (dibalik) Blynk.virtualWrite(V6, 10); ledStatus = 0; CounterOn = 0; } if ((CounterOff > 0) && (ledStatus == 0)) { CounterOff = (CounterOff - 1); Blynk.virtualWrite(V9, CounterOff); //countdown timeoff } if ((CounterOff == 0) && (CounterOn == 0) && (ledStatus == 0)) { CounterOn = timerON+1; } } //----- end kontrol misting //----start dht sensor void sendSensor() { //--- START SEND SENSOR DHT float h = dht.readHumidity(); float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit if (isnan(h) || isnan(t)) { Serial.println("sensor gak kepasang Failed to read from DHT sensor!"); Blynk.virtualWrite(V2, "SENSOR FAIL"); return; } // You can send any value at any time. // Please don't send more that 10 values per second. Serial.println(h); Serial.println(t); digitalWrite(D4, HIGH); Blynk.virtualWrite(V2, "SENSOR OK!"); Blynk.virtualWrite(V0, t); Blynk.virtualWrite(V1, h); Blynk.virtualWrite(V3,timerON); Blynk.virtualWrite(V4,timerOFF); Blynk.virtualWrite(V11,sethumap); Blynk.virtualWrite(V12,setsuhu); //----ping end if (h < sethumap) {// || t > setsuhu){ //&& (jarak<100)){ // menyalakan misting jika lembab <70 // siram = 1; //air=1; Blynk.virtualWrite(V10, "MISTING ON..."); } // else // if (jarak >=100) { // Blynk.virtualWrite(V10, "AIR HABIS, OFF"); // digitalWrite(RELkabut, HIGH); //RELkabut LOW (dibalik) // digitalWrite(REL2, HIGH); //RELkabut LOW (dibalik) // Blynk.virtualWrite(V6, 10); // CounterOn = 0; // CounterOff = 0; // siram=0; // //air=0; // } else if (h >= sethumap){ // //|| t <= setsuhu) { CounterOn = 0; CounterOff = 0; Blynk.virtualWrite(V8, CounterOn); Blynk.virtualWrite(V9, CounterOff); Blynk.virtualWrite(V10, "CUKUP, MISTING OFF"); digitalWrite(RELkabut, HIGH); //RELkabut LOW (dibalik) Blynk.virtualWrite(V6, 10); } } //--- END SEND SENSOR DHT void CheckConnection(){ Connected2Blynk = Blynk.connected(); if(!Connected2Blynk){ Serial.println("GAK BISA konek ke Blynk server"); Blynk.connect(3333); // timeout set to 10 seconds and then continue without Blynk } else{ Serial.println("Wes..Mantap. Sudah Konek ke Blynk server"); } /* //------- cek koneksi HGFSX ` Serial.println(""); Serial.print("hostname :"); Serial.println( WiFi.hostname()); Serial.print("Status: "); Serial.println(WiFi.status()); Serial.print("IP: "); Serial.println(WiFi.localIP()); Serial.print("Subnet: "); Serial.println(WiFi.subnetMask()); Serial.print("Gateway: "); Serial.println(WiFi.gatewayIP()); Serial.print("SSID: "); Serial.println(WiFi.SSID()); Serial.print("Signal: "); Serial.println(WiFi.RSSI()); Serial.print("Networks: "); Serial.println(WiFi.scanNetworks()); Serial.println("Connected to wifi"); Serial.println("Starting TCP Server"); // server.begin( ); // start TCP server */ } void SenTanah(){ //TanahValue = digitalRead(TANAH); int nilaiSensor = analogRead(analogTanah); Serial.print("tanah value "); Serial.println(TanahValue); Serial.println(nilaiSensor); time_t now = time(nullptr); Blynk.virtualWrite(V16,settanah); // mengambil time struct tm* p_tm = localtime(&now); jam=(p_tm->tm_hour); // ambil jam menit=(p_tm->tm_min); // ambil menit // TIMER LAMPU TERAS Blynk.virtualWrite(V13, nilaiSensor); if (jam >= 19 || jam <= 6 ){ // && nilaiSensor>850 ) { //jika malam dan tanah basah if (nilaiSensor>settanah) { digitalWrite(RELTanah, LOW); // Blynk.virtualWrite(V14, "KERING"); Blynk.virtualWrite(V15, 200); Serial.println("tanah kering malam siram"); } else { //if (TanahValue=0){ digitalWrite(RELTanah, HIGH); //Blynk.virtualWrite(V14, "BASAH"); Blynk.virtualWrite(V15, 10); Serial.println("tanah basah malam gak siram"); }} } /*if (TanahValue>0){ Blynk.virtualWrite(V14, "KERING"); } else { Blynk.virtualWrite(V14, "BASAH"); } } */ /* void LampuPir(){ time_t now = time(nullptr); // mengambil time struct tm* p_tm = localtime(&now); jam=(p_tm->tm_hour); // ambil jam menit=(p_tm->tm_min); // ambil menit // TIMER LAMPU TERAS if (jam >= 19 || jam <= 6) { //aksi sesuai jam //Blynk.virtualWrite(V13, "LAMPU senja menyala"); Blynk.virtualWrite(V13, 255); digitalWrite(RELteras, LOW); // Serial.print("MALAM"); statusMalam=1; } else { //Blynk.virtualWrite(RELteras, "lampu terasa mati"); Blynk.virtualWrite(V13, 50); digitalWrite(RELteras, HIGH); // Serial.print("SIANG"); statusMalam=0; } //Serial.print(jam); //Serial.println(menit); //millis pir - nyala lampu utama teras jika malam dan ada orang pirValue = digitalRead(TANAH); Serial.println(pirValue); unsigned long waktuSekarangPIR=millis(); // milis - delay tanpa mempenaruhi timing yg lain // jika ada org siang hari if (pirValue==1){ //&& statusMalam == 0) { // start hitung mundur milis waktuSebelumPIR=waktuSekarangPIR; Serial.println("ADA ORANG BOS!! ----------siang"); // Blynk.virtualWrite(V18, 255); } // jika ada orang malam hari // else if ((pirValue==1)&& statusMalam ==1) { // waktuSebelumPIR=waktuSekarangPIR; // Serial.println("ADA ORANG BOS!! malam"); // Blynk.virtualWrite(V18, 255); //digitalWrite(RELpir, HIGH); //} else { // Serial.println("SEPI"); Blynk.virtualWrite(V18, 50); //digitalWrite(RELpir, LOW); } if (((waktuSekarangPIR - waktuSebelumPIR) < 100000) && (statusMalam = 1)) { //waktuSebelumPIR=millis(); Blynk.virtualWrite(V7, "Ada Tamu malam!"); Blynk.virtualWrite(V18, 255); digitalWrite(RELpir, LOW); // Serial.println("Ada Tamu.."); } else if (((millis() - waktuSebelumPIR) < 100000) && (statusMalam = 0)) { Blynk.virtualWrite(V7, "Ada Tamu siang!"); Blynk.virtualWrite(V18, 255); digitalWrite(RELpir, HIGH); // digitalWrite(RELpir, LOW); } else { Blynk.virtualWrite(V7, "Aman..."); Blynk.virtualWrite(V18, 50); digitalWrite(RELpir, HIGH); // Serial.println("SEPI"); } } */ void setup() { if (timerON== 0) { timerON=1; } if (timerOFF== 0) { timerOFF=1; } // pinMode(triggerPin, OUTPUT); // pinMode(echoPin, INPUT); pinMode(LED_BUILTIN, OUTPUT); pinMode(RELkabut, OUTPUT); // pinMode(RELpir, OUTPUT); pinMode(RELTanah, OUTPUT); digitalWrite(RELkabut, HIGH); digitalWrite(RELTanah,HIGH); // Serial.begin(9600); // Debug console (matikan jika sudah fix) Serial.println(WiFi.macAddress()); // Blynk.begin(auth, ssid, pass, "103.133.222.53",9443); // https://34.101.75.215/ server GCP bestblynk (penulisan boleh spt ini (diserial port tampil, buat troubleshoot) WiFi.begin(ssid, pass); Blynk.config(auth,"103.133.222.53",8080); // port untuk nodemcu konek ke server = 8080, port app blynk = 9443 // Blynk.config(auth,"103.133.222.53"); // Serial.println(WiFi.macAddress()); Blynk.connect(3333); // timeout set to 10 seconds and then continue without Blynk Blynk.syncAll(); //This will sync the last state of your device dht.begin(); configTime(timezone, dst, "pool.ntp.org","time.nist.gov"); Serial.println("\nWaiting for Internet time"); while(!time(nullptr)){ Serial.print("*"); delay(1000); } Serial.println("\nTime response....OK"); // end koneksi timerSEND.setInterval(1000L, sendSensor); // timer kirim data sensor tiap 1s //timerSEND.setInterval(1000L, tandonPIR); CounterOn = timerON+1; timerTANAH.setInterval(1000L, SenTanah); // timer cek PIR timer.setInterval(2000L, led_control); //timer 60s = 60000L untuk SATUAN menit timer 2 slider, jika ingin SATUAN detik ganti 1000L kirim data sensor DHT timerCek.setInterval(11000L, CheckConnection); // cek konekssi } //--------------LOOOOOOOOOOOOOOOP void loop() { timerCek.run(); if(Connected2Blynk=true){ Blynk.run(); } //timerBLINK.run(); //Blynk.run(); timerSEND.run(); timerTANAH.run(); timer.run(); //Serial.println(timerON); //Serial.println(timerOFF); //Serial.println(sethumap); //Serial.println(setsuhu); }