Advertisement
andretafta

smartfarm_ubidots

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