andretafta

Weather Station_Adafruit

Nov 4th, 2020 (edited)
278
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <ESP8266WiFi.h> //Library untuk Terhubung ke Wi-Fi
  2. #include "Adafruit_MQTT.h" //Library Adafruit MQTT
  3. #include "Adafruit_MQTT_Client.h" //Library MQTT Client
  4. #include <DHT.h> //Library DHT11
  5. #include <MQUnifiedsensor.h> // Library untuk MQ135
  6.  
  7. #define WLAN_SSID "NAMA WIFI" //Nama Wi-Fi
  8. #define WLAN_PASS "PASS WIFI" //Password
  9. #define AIO_SERVER "io.adafruit.com" //Broker atau Server
  10. #define AIO_SERVERPORT 1883 //Port MQTT
  11. #define AIO_USERNAME "USERNAME ADAFRUIT" //Username Adafruit IO
  12. #define AIO_KEY "KEY ADA FRUIT" //Key Adafruit IO
  13. #define Relay1 D0 //Pin Relay 1 di NodeMCU
  14. #define Relay2 D1 //Pin Relay 2 di NodeMCU
  15. #define LED D2 //Pin LED di NodeMCU
  16. #define DHTPIN D4 //Pin DHT di NodeMCU
  17. #define DHTTYPE DHT11 //Jenis DHT yang digunakan
  18. #define placa "ESP8266" //Define jenis board yang digunakan
  19. #define Voltage_Resolution 5 //Tegangan yang digunakan
  20. #define pin A0 //Pin yang digunakan untuk MQ-135
  21. #define type "MQ-135" //Jenis MQ yang digunakan
  22. #define ADC_Bit_Resolution 10 //Resolusi Bit ADC
  23. #define RatioMQ135CleanAir 3.6 //Nilai Udara dianggap bersih
  24.  
  25. DHT dht(DHTPIN, DHTTYPE); //Aktifkan fungsi DHT
  26. MQUnifiedsensor MQ135(placa, Voltage_Resolution, ADC_Bit_Resolution, pin, type); //Aktifkan fungsi MQ
  27. char str_hum[8]; //Membuat Variabel Char str_hum dengan panjang 8 karakter
  28. char str_temp[8]; //Membuat Variabel Char str_temp dengan panjang 8 karakter
  29. char str_co[8]; //Membuat Variabel Char str_co dengan panjang 8 karakter
  30. char str_co2[8]; //Membuat Variabel Char str_co2 dengan panjang 8 karakter
  31. unsigned long durasiKirim = 0; //Untuk membantu fungsi Millis
  32. unsigned long jedaKirim = 6000; //Untuk membantu fungsi Millis
  33.  
  34. WiFiClient client; //Mengaktifkan fungsi WiFi Client
  35. Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY); //Aktifkan fungsi MQTT dan check informasi ke Adafruit IO
  36. Adafruit_MQTT_Subscribe lampu1 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/led"); //Fungsi untuk Subscribe ke Topik LED
  37. Adafruit_MQTT_Subscribe lampu2 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/relay1"); //Fungsi untuk Subscribe ke Topik Relay1
  38. Adafruit_MQTT_Subscribe lampu3 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/relay2"); //Fungsi untuk Subscribe ke Topik Relay2
  39. Adafruit_MQTT_Publish suhu = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/suhu"); //Fungsi untuk Publish ke Topik Suhu
  40. Adafruit_MQTT_Publish kelembaban = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/kelembaban"); //Fungsi untuk Publish ke Topik Kelembaban
  41. Adafruit_MQTT_Publish KCO = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/CO"); //Fungsi untuk Publish ke Topik CO
  42. Adafruit_MQTT_Publish KCO2 = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/CO2"); //Fungsi untuk Publish ke Topik CO2
  43.  
  44. void MQTT_connect(); //Untuk terhubung ke Adafruit MQTT
  45.  
  46. void setup() {
  47. Serial.begin(115200); //Baudrate untuk Komunikasi; Serial
  48. pinMode(LED,OUTPUT); //Set LED sebagai Output
  49. pinMode(Relay1,OUTPUT); //Set Relay1 sebagai Output
  50. pinMode(Relay2,OUTPUT); //Set Relay2 sebagai Output
  51. digitalWrite(LED, LOW); //Set Nilai LED
  52. digitalWrite(Relay1, HIGH); //Set Nilai Relay1
  53. digitalWrite(Relay2, HIGH); //Set Nilai Relay2
  54. dht.begin(); //Memulai fungsi DHT
  55. MQ135.setRegressionMethod(1); //_PPM = a*ratio^b //Set Method yang digunakan untuk MQ-135
  56. MQ135.init(); //Memulai fungsi MQ-135
  57. //Fungsi untuk Kalibrasi MQ-135
  58. float calcR0 = 0;
  59. for(int i = 1; i<=10; i ++)
  60. {
  61. MQ135.update();
  62. calcR0 += MQ135.calibrate(RatioMQ135CleanAir);
  63. Serial.print(".");
  64. }
  65. MQ135.setR0(calcR0/10);
  66. delay(10);
  67.  
  68. //Untuk memulai terhubung dengan jaringan Wi-Fi
  69. WiFi.begin(WLAN_SSID, WLAN_PASS);
  70. while (WiFi.status() != WL_CONNECTED) {
  71. delay(500);
  72. Serial.print(".");
  73. }
  74. //Subscribe Topik Lampu1, Lampu2, dan Lampu3
  75. mqtt.subscribe(&lampu1);
  76. mqtt.subscribe(&lampu2);
  77. mqtt.subscribe(&lampu3);
  78. }
  79.  
  80. void loop() {
  81. unsigned long time = millis(); //Fungsi Millis
  82. MQTT_connect(); //Untuk fungsi reconnect ke Adafruit MQTT
  83. MQ135.update(); //Update nilai sensor MQ-135
  84. //Pembacaan Nilai CO oleh Sensor MQ-135
  85. MQ135.setA(605.18); MQ135.setB(-3.937);
  86. float CO = MQ135.readSensor();
  87. //Pembacaan Nilai CO2 oleh Sensor MQ-135
  88. MQ135.setA(110.47); MQ135.setB(-2.862);
  89. float CO2 = MQ135.readSensor();
  90. //Pembacaan nilai Suhu dan Humidity oleh Sensor DHT11
  91. float h = dht.readHumidity();
  92. float t = dht.readTemperature();
  93. //Konversi Variabel Float / Double ke String dengan 4 nilai di depan koma dan 2 nilai di belakang koma
  94. dtostrf(t, 4, 2, str_temp);
  95. dtostrf(h, 4, 2, str_hum);
  96. dtostrf(CO, 4, 2, str_co);
  97. dtostrf(CO2, 4, 2, str_co2);
  98.  
  99. //Pengiriman Nilai Hasil Pembacaan Sensor ke Adafruit IO setiap 6 Detik
  100. if ((unsigned long)(time - durasiKirim) >= jedaKirim)
  101. {
  102. suhu.publish(str_temp);
  103. kelembaban.publish(str_hum);
  104. KCO.publish(str_co);
  105. KCO2.publish(str_co2);
  106. durasiKirim = millis();
  107. }
  108. //Menjalankan fungsi subscribe
  109. Adafruit_MQTT_Subscribe *subscription;
  110. //Pembacaan Nilai berdasarkan Subscribe yang diterima
  111. while ((subscription = mqtt.readSubscription(5000))) {
  112. //Kondisi untuk menghidupkan LED apabila subscribe yang diterima adalah LED
  113. if (subscription == &lampu1) {
  114. Serial.print(F("Got: "));
  115. Serial.println((char *)lampu1.lastread);
  116. if(strcmp((char*)lampu1.lastread,"ON")==0){
  117. digitalWrite(LED,HIGH);
  118. }
  119. if(strcmp((char*)lampu1.lastread,"OFF")==0){
  120. digitalWrite(LED,LOW);
  121. }
  122. }
  123.  
  124. //Kondisi untuk menghidupkan Relay1 apabila subscribe yang diterima adalah Relay1
  125. if (subscription == &lampu2) {
  126. Serial.print(F("Got: "));
  127. Serial.println((char *)lampu2.lastread);
  128. if(strcmp((char*)lampu2.lastread,"ON")==0){
  129. digitalWrite(Relay1,LOW);
  130. }
  131. if(strcmp((char*)lampu2.lastread,"OFF")==0){
  132. digitalWrite(Relay1,HIGH);
  133. }
  134. }
  135. //Kondisi untuk menghidupkan Relay2 apabila subscribe yang diterima adalah Relay2
  136. if (subscription == &lampu3) {
  137. Serial.print(F("Got: "));
  138. Serial.println((char *)lampu3.lastread);
  139. if(strcmp((char*)lampu3.lastread,"ON")==0){
  140. digitalWrite(Relay2,LOW);
  141. }
  142. if(strcmp((char*)lampu3.lastread,"OFF")==0){
  143. digitalWrite(Relay2,HIGH);
  144. }
  145. }
  146. }
  147. }
  148.  
  149. //Fungsi untuk koneksi ke Adafruit MQTT
  150. void MQTT_connect() {
  151. int8_t ret;
  152. if (mqtt.connected()) {
  153. return;
  154. }
  155. Serial.print("Connecting to MQTT... ");
  156. uint8_t retry = 3;
  157. while ((ret = mqtt.connect()) != 0) {
  158. Serial.println(mqtt.connectErrorString(ret));
  159. Serial.println("Reconnecting . . .");
  160. mqtt.disconnect();
  161. delay(5000);
  162. retry--;
  163. if (retries == 0) {
  164. while (1);
  165. }
  166. }
  167. Serial.println("MQTT Connected!");
  168. }
Add Comment
Please, Sign In to add comment