Last active
May 31, 2022 02:11
-
-
Save barraIhsan/8eeb1d8068ec136f3fceb1c7d676b144 to your computer and use it in GitHub Desktop.
IoT IDN Boarding School
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "UbidotsESPMQTT.h" // Library untuk Ubidots MQTT ESP | |
#include <NewPing.h> // Library untuk HC-SR04 | |
#include <DHT.h> // Library untuk DHT11 | |
#include <MQUnifiedsensor.h> // Library untuk MQ135 | |
#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 | |
#define DHTTYPE DHT11 // Define Jenis DHT | |
#define Pompa D0 // Define Pin Relay 1 | |
#define Minum D1 // Define Pin Relay 2 | |
#define placa "ESP8266" // Define jenis board yang digunakan | |
#define Voltage_Resolution 5 // Tegangan yang digunakan | |
#define pin A0 // Pin yang digunakan untuk MQ-135 | |
#define type "MQ-135" // Jenis MQ yang digunakan | |
#define ADC_Bit_Resolution 10 // Resolusi Bit ADC | |
#define RatioMQ135CleanAir 3.6 // Nilai Udara dianggap bersih | |
#define TOKEN "YOUR_TOKEN" // Token dari Ubidots | |
#define WIFINAME "YOUR_SSID" // SSID Wi-Fi | |
#define WIFIPASS "YOUR_SSID_PASSWORD" // Password Wi-Fi | |
MQUnifiedsensor MQ135(placa, Voltage_Resolution, ADC_Bit_Resolution, pin, type); // Aktifkan fungsi MQ-135 | |
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Aktifkan Fungsi HCSR-04 | |
DHT dht(DHTPIN, DHTTYPE); // Aktifkan Fungsi DHT | |
Ubidots client(TOKEN); // Aktifkan fungsi Ubidots dengan Token | |
unsigned long durasiKirim = 0; | |
unsigned long jedaKirim = 2000; | |
// Untuk menerima perintah dari Dashboard Ubidots dengan isi Topik dan Nilai Pesannya | |
void callback(char* topic, byte* payload, unsigned int length) { | |
// Mencetak Topik dan Nilai Pesan yang masuk dari Dashboard Ubidots | |
Serial.print("Pesan Diterima: ["); | |
Serial.print(topic); | |
Serial.print("] "); | |
for (int i = 0; i < length;i++) { | |
Serial.print((char)payload[i]); | |
} | |
// 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) { | |
if ((char)payload[0] == '0') { | |
digitalWrite(Pompa, LOW); | |
} else { | |
digitalWrite(Pompa, HIGH); | |
} | |
Serial.println(); | |
} | |
// 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) { | |
if ((char)payload[0] == '0') { | |
digitalWrite(Minum, LOW); | |
} else { | |
digitalWrite(Minum, HIGH); | |
} | |
Serial.println(); | |
} | |
} | |
void setup() { | |
Serial.begin(115200); // Baudrate untuk Serial Komunikasi | |
client.ubidotsSetBroker("industrial.api.ubidots.com"); // Set Broker Ubidots | |
client.setDebug(true); | |
client.wifiConnection(WIFINAME, WIFIPASS); // Mencoba Koneksi dengan Wi-Fi | |
client.begin(callback); // Aktifkan fungsi Callback | |
pinMode(Pompa, OUTPUT); // Set Relay 1 sebagai Output | |
pinMode(Minum, OUTPUT); // Set Relay 2 sebagai Output | |
digitalWrite(Pompa, HIGH); // Set Relay 1 dengan Nilai HIGH | |
digitalWrite(Minum, HIGH); // Set Relay 2 dengan Nilai HIGH | |
client.ubidotsSubscribe("smart-farm", "relay1"); // Subscribe ke Topik Relay1 dan Device smart-farm | |
client.ubidotsSubscribe("smart-farm", "relay2"); // Subscribe ke Topik Relay2 dan Device smart-farm | |
dht.begin(); // Memulai fungsi DHT | |
MQ135.setRegressionMethod(1); // _PPM axratio^b // Set Method yang digunakan untuk MQ-135 | |
MQ135.init(); // Memulai fungsi MQ-135 | |
// Fungsi untuk kalibrasi MQ-135 | |
float calcR0 = 0; | |
for (int i = 1; i <= 10; i++) { | |
MQ135.update(); | |
calcR0 += MQ135.calibrate(RatioMQ135CleanAir); | |
Serial.print("."); | |
} | |
MQ135.setR0(calcR0 / 10); | |
} | |
void loop() { | |
unsigned long time = millis(); // Fungsi Millis | |
MQ135.update(); // Update Nilai MQ-135 | |
MQ135.setA(102.2); MQ135.setB(-2.473); // Set Nilai Sampling untuk NH4 / Amonia | |
float NH4 = MQ135.readSensor(); // Hasil Pembacaan nilai Amonia | |
int jarak = sonar.ping_cm(); // Hasil Pembacaan Jarak | |
float h = dht.readHumidity(); // Hasil Pembacaan Humidity | |
float t = dht.readTemperature(); // Hasil Pembacaan Suhu | |
// Reconnect apabila Sambungan Koneksi NodeMCU terputus dan resubscribe topik dan device yang ada | |
if (!client.connected()) { | |
client.reconnect(); | |
client.ubidotsSubscribe("smart-farm", "relay1"); | |
client.ubidotsSubscribe("smart-farm", "relay2"); | |
} | |
// Kondisi untuk mengirimkan hasil pembacaan sensor ke Device Ubidots setiap 2 detik | |
if ((unsigned long)(time - durasiKirim) >= jedaKirim) { | |
// Mengirimkan hasil pembacaan sensor ke Device Ubidots | |
client.add("ketinggian", jarak); | |
client.add("suhu", t); | |
client.add("kelembaban", h); | |
client.add("amonia", NH4); | |
client.ubidotsPublish("smart-farm"); | |
durasiKirim = millis(); | |
} | |
client.loop(); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <ESP8266WiFi.h> // Library untuk konek ke Wi-Fi | |
#include <ThingerESP8266.h> // Library untuk terhubung ke Thinger | |
#include <NewPing.h> // Library untuk HC-SR04 | |
#define USERNAME "YOUR_USERNAME" // Username Thinger IO | |
#define DEVICE_ID "YOUR_DEVICE_ID" // Device ID Thinger IO | |
#define DEVICE_CREDENTIAL "YOUR_DEVICE_CREDENTIAL" // Device Credential | |
#define SSID "YOUR_SSID" // SSID Wi-Fi | |
#define SSID_PASSWORD "YOUR_SSID_PASSWORD" // Password Wi-Fi | |
#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 pinYL A0 // Pin Analog YL-69 | |
#define Lampu D2 // Pin LED | |
ThingerESP8266 thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL); // Aktifkan Fungsi Thinger IO | |
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Aktifkan Fungsi HC_SR04 | |
int outputValue; // Variable untuk Output YL-69 | |
void setup() { | |
pinMode(Lampu, OUTPUT); // Set LED sebagai Output | |
digitalWrite(Lampu, LOW); // Set nilai LED = 0 | |
thing.add_wifi(SSID, SSID_PASSWORD); /// Mencoba terhubung ke Wi-Fi dan Thinger IO | |
// Fungsi untuk Kontrol Lampu dengan Topik Lampu | |
thing["Lampu"] << [](pson& in) { | |
if (in.is_empty()) { | |
in = (bool)digitalRead(Lampu); | |
} else { | |
digitalWrite(Lampu, in ? HIGH : LOW); | |
} | |
}; | |
// Mengirim Pembacaaan Senosr HC-SR04 Ke Thinger IO | |
thing["HCSR04"] >> [](pson& out) { | |
out["Jarak"] = sonar.ping_cm(); | |
}; | |
// Menigirim Pembacaan Sensor YL-69 Ke Thinger IO | |
thing["Soil_Moisture"] >> [](pson& out) { | |
outputValue = analogRead(pinYL); | |
outputValue = map(outputValue, 1024, 250, 0, 100); | |
out["Moisture"] = outputValue; | |
}; | |
} | |
void loop() { | |
// Menjalakan fungsi Thinger IO | |
thing.handle(); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define BLYNK_TEMPLATE_ID "YOUR_TEMPLATE_ID" | |
#define BLYNK_DEVICE_NAME "Smart Home Blynk" | |
#define BLYNK_AUTH_TOKEN "YOUR_AUTH_TOKEN" | |
#define BLYNK_PRINT Serial | |
#include <ESP8266WiFi.h> | |
#include <BlynkSimpleEsp8266.h> | |
#include <DHT.h> | |
#include <MQUnifiedsensor.h> | |
char ssid[] = "YOUR_SSID"; | |
char pass[] = "YOUR_SSID_PASSWORD"; | |
#define DHTPIN D4 | |
#define DHTTYPE DHT11 | |
#define Board ("ESP8266") | |
#define Pin (A0) // Pin dari MQ9 | |
#define Type ("MQ-9") // MQ9 | |
#define Voltage_Resolution (5) | |
#define ADC_Bit_Resolution (10) // For arduino UNO/MEGA/NANO | |
#define RatioMQ9CleanAir (9.6) // RS / R0 = 60 ppm | |
DHT dht(DHTPIN, DHTTYPE); // Variable dht, memanggil fungsi | |
MQUnifiedsensor MQ9(Board, Voltage_Resolution, ADC_Bit_Resolution, Pin, Type); | |
BlynkTimer timer; | |
void sendSensor() { | |
MQ9.update(); | |
MQ9.setA(1000.5); MQ9.setB(-2.186); | |
float LPG = MQ9.readSensor(); | |
MQ9.setA(599.65); MQ9.setB(-2.244); | |
float CO = MQ9.readSensor(); | |
float h = dht.readHumidity(); | |
float t = dht.readTemperature(); | |
if (isnan(h) || isnan(t)) { | |
Serial.println("Failed to read from DHT sensor!"); | |
return; | |
} | |
Blynk.virtualWrite(V5, t); | |
Blynk.virtualWrite(V6, h); | |
Blynk.virtualWrite(V7, LPG); | |
Blynk.virtualWrite(V8, CO); | |
} | |
void setup() { | |
Serial.begin(115200); | |
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass); | |
dht.begin(); | |
MQ9.setRegressionMethod(1); | |
MQ9.init(); | |
float calcR0 = 0; | |
for (int i = 0; i < 10; i++) { | |
MQ9.update(); | |
calcR0 += MQ9.calibrate(RatioMQ9CleanAir); | |
Serial.print("."); | |
} | |
MQ9.setR0(calcR0 / 10); | |
timer.setInterval(1000L, sendSensor); | |
} | |
void loop() { | |
Blynk.run(); | |
timer.run(); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <ESP8266WiFi.h> // Library untuk terhubung ke Wi-Fi | |
#include "Adafruit_MQTT.h" // Library Adafruit MQTT | |
#include "Adafruit_MQTT_Client.h" // Library MQTT Client | |
#include <DHT.h> // Library DHT11 | |
#include <MQUnifiedsensor.h> // Library untuk MQ-135 | |
#define WLAN_SSID "YOUR_WIFI_SSID" // Nama Wi-Fi | |
#define WLAN_PASS "YOUR_WIFI_PASS" // Password | |
#define AIO_SERVER "io.adafruit.com" // Broker atau Server | |
#define AIO_SERVERPORT 1883 // Port MQTT | |
#define AIO_USERNAME "YOUR_USERNAME" // Username Adafruit IO | |
#define AIO_KEY "YOUR_API" // Key Adafruit IO | |
#define Relay1 D0 // Pin Relay 1 di NodeMCU | |
#define Relay2 D1 // Pin Relay 2 di NodeMCU | |
#define LED D2 // Pin LED di NodeMCU | |
#define DHTPIN D4 // Pin DHT di NodeMCU | |
#define DHTTYPE DHT11 // Jenis DHT yang digunakkan | |
#define placa "ESP8266" // Define jenis board yang digunakkan | |
#define Voltage_Resolution 5 // Tegangan yang digunakkan | |
#define pin A0 // Pin yang digunakkkan untuk MQ-135 | |
#define type "MQ-135" // Jenis MQ yang digunakkan | |
#define ADC_Bit_Resolution 10 // Resolusi Bit ADC | |
#define RatioMQ135CleanAir 3.6 // Nilau Udara dianggap bersih | |
DHT dht(DHTPIN, DHTTYPE); // Aktifkan fungsi DHT | |
MQUnifiedsensor MQ135(placa, Voltage_Resolution, ADC_Bit_Resolution, pin, type); // Aktifkan fungsi MQ | |
char str_hum[8]; // Membuat Variable Char str_hum dengan panjang 8 karakter | |
char str_temp[8]; // Membuat Variable Char str_temp dengan panjang 8 karakter | |
char str_co[8]; // Membuat Variable Char str_co dengan panjang 8 karakter | |
char str_co2[8]; // Membuat Variable Char str_co2 dengan panjang 8 karakter | |
unsigned long durasiKirim = 0; // Untuk membantu fungsi Millis | |
unsigned long jedaKirim = 6000; // Untuk membantu fungsi Millis | |
WiFiClient client; // Mengaktifkan fungsi WiFi Client | |
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY); // Aktifkan fungsi MQTT dan check informasi ke Adafruit IO | |
Adafruit_MQTT_Subscribe lampu1 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/led"); // Fungsi untuk Subscribe ke Topik LED | |
Adafruit_MQTT_Subscribe lampu2 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/relay1"); // Fungsi untuk Subscribe ke Topik Relay1 | |
Adafruit_MQTT_Subscribe lampu3 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/relay2"); // Fungsi untuk Subscribe ke Topik Relay2 | |
Adafruit_MQTT_Publish suhu = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/suhu"); // Fungsi untuk Publish ke Topik Suhu | |
Adafruit_MQTT_Publish kelembapan = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/kelembapan"); // Fungsi untuk Publish ke Topik kelembapan | |
Adafruit_MQTT_Publish KCO = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/CO"); // Fungsi untuk Publish ke Topik CO | |
Adafruit_MQTT_Publish KCO2 = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/CO2"); // Fungsi untuk Publish ke Topik CO2 | |
void MQTT_connect(); // Untuk terhubung ke Adafruit MQTT | |
void setup() { | |
Serial.begin(115200); // Baundrate untuk Komunikasi Serial | |
pinMode(LED, OUTPUT); // Set LED sebagai Output | |
pinMode(Relay1, OUTPUT); // Set Relay1 sebagai Output | |
pinMode(Relay2, OUTPUT); // Set Relay2 sebagai Output | |
digitalWrite(LED, LOW); // Set Nilai LED | |
digitalWrite(Relay1, HIGH); // Set Nilai Relay1 | |
digitalWrite(Relay1, HIGH); // Set Nilai Relay2 | |
dht.begin(); // Memulai fungsi DHT | |
MQ135.setRegressionMethod(1); //_PPM = a*ratio*b // Set Method yang digunakkan untuk MQ-135 | |
MQ135.init(); // Memulai fungsi MQ-135 | |
// Fungsi untuk Kalibrasi MQ-135 | |
float calcR0 = 0; | |
for (int i = 0; i <= 10; i++) { | |
MQ135.update(); | |
calcR0 += MQ135.calibrate(RatioMQ135CleanAir); | |
Serial.print("."); | |
} | |
MQ135.setR0(calcR0 / 10); | |
delay(10); | |
// Untuk memulai terhubung dengan jaringan Wi-Fi | |
WiFi.begin(WLAN_SSID, WLAN_PASS); | |
while (WiFi.status() != WL_CONNECTED) { | |
delay(500); | |
Serial.print("."); | |
} | |
// Subscribe Topik Lampu1, Lampu2, dan Lampu3 | |
mqtt.subscribe(&lampu1); | |
mqtt.subscribe(&lampu2); | |
mqtt.subscribe(&lampu3); | |
} | |
void loop() { | |
unsigned long time = millis(); //Fungsi Millis | |
MQTT_connect(); //Untuk fungsi reconnect ke Adafruit MQTT | |
MQ135.update(); //Update nilai sensor MQ-135 | |
// Pembacaan Nilai CO oleh Sensor MQ-135 | |
MQ135.setA(605.10); MQ135.setB(-3.937); | |
float CO = MQ135.readSensor(); | |
//Pembacaan Nilai CO2 oleh Sensor DHT11 | |
MQ135.setA(110.47); MQ135.setB(-2.862); | |
float CO2 = MQ135.readSensor(); | |
//Pembacaan nilai Suhu Humidity oleh Sensor DHT11 | |
float h = dht.readHumidity(); | |
float t = dht.readTemperature(); | |
//Konversi Variabel Foat / Double ke String dengan 4 nilai di depan koma dan 2 nilai di belakang koma | |
dtostrf(t, 4, 2, str_temp); | |
dtostrf(h, 4, 2, str_hum); | |
dtostrf(CO, 4, 2, str_co); | |
dtostrf(CO2, 4, 2, str_co2); | |
// Pengiriman Nilai Hasil Pembacaan Sensor ke Adafruit IO setiap 6 Detik | |
if ((unsigned long)(time - durasiKirim) >= jedaKirim) { | |
suhu.publish(str_temp); | |
kelembapan.publish(str_hum); | |
KCO.publish(str_co); | |
KCO2.publish(str_co2); | |
durasiKirim = millis(); | |
} | |
// Menjalankan fungsi subscribe | |
Adafruit_MQTT_Subscribe* subscription; | |
// Pembacaan Nilai berdasarkan Subscribe yang diterima | |
while ((subscription = mqtt.readSubscription(5000))) { | |
// Kondisi untuk menghidupkan LED apabila subscribe yang diterima adalah LED | |
if (subscription == &lampu1) { | |
Serial.print(F("Got: ")); | |
Serial.println((char*)lampu1.lastread); | |
if (strcmp((char*)lampu1.lastread, "ON") == 0) { | |
digitalWrite(LED, HIGH); | |
} | |
if (strcmp((char*)lampu1.lastread, "OFF") == 0) { | |
digitalWrite(LED, LOW); | |
} | |
} | |
// Kondisi untuk menghidupkan Relay1 apabila subscribe yang diterima adalah Relay1 | |
if (subscription == &lampu2) { | |
Serial.print(F("Got: ")); | |
Serial.println((char*)lampu2.lastread); | |
if (strcmp((char*)lampu1.lastread, "ON") == 0) { | |
digitalWrite(Relay1, LOW); | |
} | |
if (strcmp((char*)lampu2.lastread, "OFF") == 0) { | |
digitalWrite(Relay1, HIGH); | |
} | |
} | |
// Kondisi untuk menghidupkan Relay2 apabila subscribe yang diterima adalah Relay2 | |
if (subscription == &lampu3) { | |
Serial.print(F("Got: ")); | |
Serial.println((char*)lampu3.lastread); | |
if (strcmp((char*)lampu3.lastread, "ON") == 0) { | |
digitalWrite(Relay2, LOW); | |
} | |
if (strcmp((char*)lampu3.lastread, "OFF") == 0) { | |
digitalWrite(Relay2, HIGH); | |
} | |
} | |
} | |
} | |
// Fungsi untuk koneksi ke Adafruit MQTT | |
void MQTT_connect() { | |
int8_t ret; | |
if (mqtt.connected()) { | |
return; | |
} | |
Serial.print("Connecting to MQTT... "); | |
uint8_t retry = 3; | |
while ((ret = mqtt.connect()) != 0) { | |
Serial.println(mqtt.connectErrorString(ret)); | |
Serial.println("Reconnecting . . ."); | |
mqtt.disconnect(); | |
delay(5000); | |
retry--; | |
if (retry == 0) { | |
while (1); | |
} | |
} | |
Serial.println("MQTT Connected!"); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment