Advertisement
andretafta

SmartFarm-NewUbidots

Feb 17th, 2022 (edited)
336
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "UbidotsESPMQTT.h" //Library untuk Ubidots MQTT ESP
  2. #include <NewPing.h> //Library untuk HC-SR04
  3. #include <DHT.h> //Library untuk DHT11
  4. #include <MQUnifiedsensor.h> // Library untuk MQ0135 #include <Servo.h> //Library untuk Servo
  5.  
  6.  
  7. "UbidotsESPMQTT.h" //Library untuk Ubidots MQTT ESP <NewPing.h> //Library untuk HC-SR04
  8. #define TRIGGER_PIN D5 //Pin Trigger HC-SR04 pada NodeMCU #define ECHO_PIN D6 //Pin Echo HC-SR04 pada NodeMCU #define MAX_DISTANCE 250 //Maksimum Pembacaan Jarak (cm) #define DHTPIN D4 //Define Pin DHT
  9. #define DHTTYPE DHT11  //Define Jenis DHT
  10. #define Pompa D0 //Define Pin Relay 1
  11. #define Minum D1 //Define Pin Relay 2
  12. #define LED D2 //Define Pin LED
  13. #define placa "ESP8266" //Define jenis board yang digunakan #define Voltage_Resolution 5 //Tegangan yang digunakan #define pin A0 //Pin yang digunakan untuk MQ-135
  14. #define type "MQ-135" //Jenis MQ yang digunakan
  15. #define ADC_Bit_Resolution 10 //Resolusi Bit ADC
  16. #define RatioMQ135CleanAir 3.6 //Nilai Udara dianggap bersih
  17. #define TOKEN "BBFF-tCGUs5jrHw1pIilk5949NHLbQ6FGRu" //Token dari Ubidots
  18. #define WIFINAME "KILLUA" //SSID Wi-Fi
  19. #define WIFIPASS "nada124@" //Password Wi-Fi
  20.  
  21.  
  22. MQUnifiedsensor MQ135(placa, Voltage_Resolution, ADC_Bit_Resolution, pin, type); //Aktifkan fungsi MQ
  23. NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); //Aktifkan Fungsi HCSR-04 //Aktifkan fungsi HC-SR04
  24. DHT dht(DHTPIN, DHTTYPE); //Aktifkan Fungsi DHT
  25. Servo servo; //Aktifkan fungsi Servo
  26. Ubidots client(TOKEN); //Aktifkan fungsi Ubidots dengan Token
  27. unsigned long durasiKirim = 0;
  28. unsigned long jedaKirim = 2000;
  29.  
  30. //Untuk menerima perintah dari Dashboard Ubidots dengan isi Topik dan Nilai Pesannya
  31. void callback(char* topic, byte* payload, unsigned int length) { //Mencetak Topik dan Nilai Pesan yang masuk dari Dashboard Ubidots
  32.   Serial.print("Pesan Diterima: [");
  33.   Serial.print(topic);
  34.   Serial.print("] ");
  35.   for (int i=0;i<length;i++) {
  36.     Serial.print((char)payload[i]);
  37.   }
  38. //Kondisi apabila Topik yang masuk LED dan Membaca Nilai Pesan yang dikirimkan untuk menyalakan LED if(strcmp(topic,"/v1.6/devices/smart-farm/led/lv")==0){
  39.   if((char)payload[0]=='1'){
  40.     digitalWrite(LED, HIGH);
  41. } else{
  42.     digitalWrite(LED, LOW);
  43.   }
  44.   Serial.println();
  45. }
  46. //Kondisi apabila Topik yang masuk Relay 1 dan Membaca Nilai Pesan yang dikirimkan untuk menyalakan Pompa if(strcmp(topic,"/v1.6/devices/smart-farm/relay1/lv")==0){
  47.   if((char)payload[0]=='0'){
  48.     digitalWrite(Pompa, LOW);
  49. } else{
  50.     digitalWrite(Pompa, HIGH);
  51.   }
  52.   Serial.println();
  53. }
  54. //Kondisi apabila Topik yang masuk Relay 2 dan Membaca Nilai Pesan yang dikirimkan untuk Menyalakan Air if(strcmp(topic,"/v1.6/devices/smart-farm/relay2/lv")==0){
  55.   if((char)payload[0]=='0'){
  56.     digitalWrite(Minum, LOW);
  57. } else{
  58.     digitalWrite(Minum, HIGH);
  59.   }
  60.   Serial.println();
  61. }
  62. //Kondisi apabila Topik yang masuk Servo dan Membaca Nilai Pesan yang dikirimkan untuk Pemberian Pakan if(strcmp(topic,"/v1.6/devices/smart-farm/servo/lv")==0){
  63. if((char)payload[0]=='1'){
  64. servo.write(180); //Menggerakkan Servo ke Sudut 180 apabila
  65. pesan yang masuk bernilai 1
  66.   }
  67. else{
  68. servo.write(0); //Menggerakkan Servo ke Sudut 0 apabila pesan
  69. yang masuk bernilai 0
  70.   }
  71.   Serial.println();
  72. }
  73. }
  74.  
  75.  
  76. void setup() {
  77. Serial.begin(115200); //Baudrate untuk Serial Komunikasi client.ubidotsSetBroker("industrial.api.ubidots.com"); //Set
  78. Broker Ubidots
  79. client.setDebug(true);
  80. client.wifiConnection(WIFINAME, WIFIPASS); //Mencoba Koneksi
  81. dengan Wi-Fi
  82. client.begin(callback); //Aktifkan fungsi Callback pinMode(LED, OUTPUT); //Set LED sebagai Output
  83. pinMode(Pompa, OUTPUT); //Set Relay 1 sebagai Output pinMode(Minum, OUTPUT); //Set Relay 2 sebagai Output digitalWrite(LED, LOW); //Set LED dengan Nilai LOW digitalWrite(Pompa, HIGH); //Set Relay 1 dengan Nilai HIGH digitalWrite(Minum, HIGH); //Set Relay 2 dengan Nilai HIGH client.ubidotsSubscribe("smart-farm","led"); //Subscribe ke
  84. Topik LED dan Device Smart-Farm client.ubidotsSubscribe("smart-farm","relay1"); //Subscribe ke
  85. Topik Relay1 dan Device Smart-Farm client.ubidotsSubscribe("smart-farm","relay2"); //Subscribe ke
  86. Topik Relay2 dan Device Smart-Farm client.ubidotsSubscribe("smart-farm","servo"); //Subscribe ke
  87. Topik Servo dan Device Smart-Farm
  88. dht.begin(); //Memulai fungsi DHT
  89. servo.attach(13); //Memulai fungsi Servo pada Pin 13 MQ135.setRegressionMethod(1); //_PPM = a*ratio^b //Set Method
  90. yang digunakan untuk MQ-135 MQ135.init(); //Memulai fungsi MQ-135 //Fungsi untuk Kalibrasi MQ-135
  91. float calcR0 = 0;
  92. for(int i = 1; i<=10; i ++)
  93. {
  94. MQ135.update();
  95. calcR0 += MQ135.calibrate(RatioMQ135CleanAir); Serial.print(".");
  96. }
  97.   MQ135.setR0(calcR0/10);
  98. }
  99.  
  100.  
  101. void loop() {
  102. unsigned long time = millis(); //Fungsi Millis MQ135.update(); //Update Nilai MQ-135
  103. MQ135.setA(102.2 ); MQ135.setB(-2.473); //Set Nilai Sampling
  104. untuk NH4 /Amonia
  105. float NH4 = MQ135.readSensor(); //Hasil Pembacaan nilai Amonia int jarak = sonar.ping_cm(); //Hasil Pembacaan Jarak
  106. float h = dht.readHumidity(); //Hasil Pembacaan Humidity
  107. float t = dht.readTemperature(); //Hasil Pembacaan Suhu
  108. //Reconnect apabila Sambungan Koneksi NodeMCU terputus dan re- subscribe topik dan device yang ada
  109. if(!client.connected()){
  110. client.reconnect(); client.ubidotsSubscribe("smart-farm","led"); client.ubidotsSubscribe("smart-farm","relay1"); client.ubidotsSubscribe("smart-farm","relay2"); client.ubidotsSubscribe("smart-farm","servo");
  111. }
  112. //Kondisi untuk mengirimkan hasil pembacaan sensor ke Device Ubidots setiap 2 detik
  113. if ((unsigned long)(time - durasiKirim) >= jedaKirim) {
  114. //Mengirimkan hasil pembacaan sensor ke Device Ubidots client.add("ketinggian", jarak);
  115. client.add("suhu", t);
  116. client.add("kelembaban", h); client.add("amonia", NH4); client.ubidotsPublish("smart-farm"); durasiKirim = millis();
  117.       }
  118.   client.loop();
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement