andretafta

SmartFarm-NewUbidots

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