diff --git a/Kode Program Arduino/dht_lux_soil_d1mini_mqtt.2.ino b/Kode Program Arduino/dht_lux_soil_d1mini_mqtt.2.ino new file mode 100644 index 0000000..d60a489 --- /dev/null +++ b/Kode Program Arduino/dht_lux_soil_d1mini_mqtt.2.ino @@ -0,0 +1,170 @@ +//Libraries +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define I2C_ADDRESS 0x48 + +// inisiasi sensor DHT21 +#define DHTPIN D6 //pin DHT +#define DHTTYPE DHT21 //DHT 21 (AM2301) + +// Sensor variable +int MQTTLED = D3; +int WIFILED = D5; +const int SoilSensor = A0;//Inisialisasi sensor Soil Moisture + +float voltage = 0.0; //batery level +float hum; //Stores humidity value +float temp; //Stores temperature value +float lux; //Stores light intensity value +float tanah; +int thresholdValue = 800; // tresshold +DHT dht(DHTPIN, DHTTYPE); //Initialize DHT sensor for normal 16mhz Arduino +Adafruit_TSL2561_Unified tsl = Adafruit_TSL2561_Unified(TSL2561_ADDR_FLOAT, 12345);//untuk mengidentifikasi sensor jika ada beberapa sensor yang digunakan dalam sistem. +ADS1115_WE adc = ADS1115_WE(I2C_ADDRESS); + +// inisisasi mqtt broker +//MQTT config +bool useMQTT = true; +const char* mqttServer = "192.168.43.27"; +const char* mqttUsername = ""; +const char* mqttPassword = ""; +char outTopic[] = "SHT1/sensor"; + +WiFiClient espClient; +PubSubClient client(espClient); +// char outTopic[] = "pnbp_d2/sensor"; +char buffer[256]; + +//mengatur LED jika MQTT Terhubung + void reconnect() { + while (!client.connected()) { + Serial.print("Attempting MQTT connection..."); + if (client.connect(mqttServer, mqttUsername, mqttPassword)) { + Serial.println("MQTT connected"); + digitalWrite(MQTTLED, LOW); + } + else { + digitalWrite(MQTTLED, HIGH); + Serial.print("failed, rc="); + Serial.print(client.state()); + Serial.println(" try again in 3 seconds"); + delay(2000); + digitalWrite(MQTTLED, LOW); + delay(1000);} + } + } +//membaca tegangan dari sensor ADS1115 yang terhubung dengan baterai. + float readChannel(ADS1115_MUX channel) { + float voltage = 0.0; + adc.setCompareChannels(channel); + adc.startSingleMeasurement(); + while(adc.isBusy()){} + voltage = adc.getResult_V(); // Mendapatkan hasil tegangan dalam volt + return voltage; + } + +// config sensor TSL2561 + void configureSensor(void){ + tsl.enableAutoRange(true); /* Auto-gain ... switches automatically between 1x and 16x */ + tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_13MS); /* fast but low resolution */ + // Serial.println("------------------------------------"); + // Serial.print ("Gain: "); Serial.println("Auto"); + // Serial.print ("Timing: "); Serial.println("13 ms"); + // Serial.println("------------------------------------"); + } +// interval loop +unsigned long interval=2000; // the time we need to wait +unsigned long previousMillis=0; // millis() returns an unsigned long. + +void setup(){ + Serial.begin(115200); + pinMode(MQTTLED, OUTPUT); + pinMode(WIFILED, OUTPUT); + /////////////////////// + // Setup wifi manager + WiFiManager wm; + //wm.resetSettings(); + bool res; + res = wm.autoConnect("SKK_SOILDHTLUX","password"); // password protected ap + if(!res) { + Serial.println("Failed to connect"); + digitalWrite(WIFILED, HIGH); + } + else { + Serial.println("connected... :)"); + digitalWrite(WIFILED, LOW); + } + // Set MQTT Connection + client.setServer(mqttServer, 1883); + //////////// + + dht.begin();//DHT21 + Wire.begin();//Inisialisasi I2C pada pin default SDA dan SCL Untuk TSL2561 + if(!adc.init()){ + Serial.println("ADS1115 not connected!"); + } + adc.setVoltageRange_mV(ADS1115_RANGE_6144); + + // Setup sensors INTENSITAS CAHAYA + configureSensor(); + if(!tsl.begin()){ //menginisialisasi sensor TSL2561 dan memverifikasi koneksi melalui alamat I2C yang ditentukan. + Serial.print("Ooops, no TSL2561 detected ... Check your wiring or I2C ADDR!"); + //while(1); + } + Serial.println(""); + } + +//Membaca nilai Sensor Soil, DHT21 dan Baterai +void readsensor() { + voltage = readChannel(ADS1115_COMP_0_GND); + tanah = analogRead(SoilSensor); + hum = dht.readHumidity(); + temp= dht.readTemperature(); + + ///////////Membaca nilai sensor TSL2561 + sensors_event_t event; + tsl.getEvent(&event);//memanggil fungsi getEvent dari library Adafruit_TSL2561_U untuk membaca data dari sensor TSL2561 + if (event.light) { + lux = event.light; + } + else { + Serial.println("Sensor overload"); + } + + //////////////Untuk Menampilkan Nilai Sensor pada serial Monitor + Serial.print("Kelembapan tanah: "); Serial.println(tanah); + Serial.print("Kelembapan: "); Serial.println(hum); + Serial.print("Temperature: "); Serial.print(temp); Serial.println(" Celsius"); + Serial.print("Intensitas Cahaya: "); Serial.print(lux); Serial.println(" lux"); + Serial.print("Tegangan: "); Serial.print(voltage); Serial.println(" VDC "); + + // create json to data publish sensor (Untuk Mengirim Nilai Sensor Pada MQTT) + StaticJsonDocument<200> doc; + doc["soil"] = tanah; + doc["humidity"] = hum; + doc["temperature"] = temp; + doc["intensity"] = lux; + doc["batlevel"] = voltage; + serializeJson(doc, buffer); + client.publish("outTopic", buffer); +} + +void loop() +{ + if (!client.connected()) { + reconnect(); + } + client.loop(); + unsigned long currentMillis = millis(); + if ((unsigned long)(currentMillis - previousMillis) >= interval){ + readsensor(); + previousMillis = millis(); + } +} diff --git a/Kode Program Arduino/pompaair.ino b/Kode Program Arduino/pompaair.ino new file mode 100644 index 0000000..0e3e795 --- /dev/null +++ b/Kode Program Arduino/pompaair.ino @@ -0,0 +1,94 @@ +#include +#include + +// Update these with your network credentials +const char* ssid = "Dispenduk Kecamatan Balung"; +const char* password = "iyainaja"; + +// Update the MQTT server to your broker's address +const char* mqtt_server = "192.168.43.27"; + +WiFiClient espClient; +PubSubClient client(espClient); + +const int relayPin = D1; // GPIO5 pada D1 Mini + +void setup() { + Serial.begin(115200); + setup_wifi(); + client.setServer(mqtt_server, 1883); + client.setCallback(callback); + + pinMode(relayPin, OUTPUT); + digitalWrite(relayPin, LOW); // Matikan relay pada awal +} +//memulai koneksi WiFi +void setup_wifi() { + delay(10); + Serial.println(); + Serial.print("Connecting to "); + Serial.println(ssid); + + WiFi.begin(ssid, password); + + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + + Serial.println(""); + Serial.println("WiFi connected"); + Serial.println("IP address: "); + Serial.println(WiFi.localIP()); +} +//Proses Subscribe MQTT +void callback(char* topic, byte* payload, unsigned int length) { + Serial.print("Message arrived ["); + Serial.print(topic); + Serial.print("] "); + + String message; + for (unsigned int i = 0; i < length; i++) { //Mengonversi payload pesan dari byte array menjadi string. + message += (char)payload[i]; + } + Serial.println(message); //Mencetak pesan yang telah diterima dan dikonversi ke string ke Serial Monitor + + if (String(topic) == "home/switch/status") { + if (message == "Off") { + digitalWrite(relayPin, LOW); // Matikan relay + Serial.println("Relay turned Off"); + } else if (message == "On") { + digitalWrite(relayPin, HIGH); // Hidupkan relay + Serial.println("Relay turned On"); + } else { + Serial.println("Invalid message"); + } + } +} +//Fungsi untuk menghubungkan kembali ke MQTT jika Koneksi terputus +void reconnect() { + // Loop until we're reconnected + while (!client.connected()) { + Serial.print("Attempting MQTT connection..."); + // Attempt to connect + if (client.connect("ESP8266Client")) { + Serial.println("connected"); + // Subscribe + client.subscribe("home/switch/status"); + Serial.println("Subscribed to home/switch/status"); + } else { + Serial.print("failed, rc="); + Serial.print(client.state()); + Serial.println(" try again in 5 seconds"); + // Wait 5 seconds before retrying + delay(5000); + } + } +} +//Memastikan MQTT tetap terhubung dan memproses pesan yang masuk. +void loop() { + if (!client.connected()) { + reconnect(); + } + client.loop(); +}