Advertisement
andretafta

Ubidots_SmartFarm

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