From 97d751f6fb93c790a195cf32e825b54b31f2d7fa Mon Sep 17 00:00:00 2001 From: Moh_Agil_Andriansyah Date: Wed, 17 Jul 2024 11:55:57 +0700 Subject: [PATCH] Upload files to "Code Program Arduino" --- .../dht_lux_soil_d1mini_mqtt.2.ino | 168 ++++++++++++++++++ Code Program Arduino/pompaair.ino | 94 ++++++++++ 2 files changed, 262 insertions(+) create mode 100644 Code Program Arduino/dht_lux_soil_d1mini_mqtt.2.ino create mode 100644 Code Program Arduino/pompaair.ino diff --git a/Code Program Arduino/dht_lux_soil_d1mini_mqtt.2.ino b/Code Program Arduino/dht_lux_soil_d1mini_mqtt.2.ino new file mode 100644 index 0000000..f138c19 --- /dev/null +++ b/Code Program Arduino/dht_lux_soil_d1mini_mqtt.2.ino @@ -0,0 +1,168 @@ +//Libraries +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define I2C_ADDRESS 0x48 + +// inisiasi sensor +#define DHTPIN D6 //pin DHT +#define DHTTYPE DHT21 //DHT 21 (AM2301) + +// Sensor variable +int MQTTLED = D3; +int WIFILED = D5; +const int SoilSensor = A0; + +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); +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"; + +// const char* mqttServer = "103.240.110.132"; +// const char* HostName = "localhost"; +// const char* mqttUser = "arsenet"; +// const char* mqttPassword = "P@ssw0rd@2023"; +WiFiClient espClient; +PubSubClient client(espClient); +// char outTopic[] = "pnbp_d2/sensor"; +char buffer[256]; + + 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);} + } + } + + float readChannel(ADS1115_MUX channel) { + float voltage = 0.0; + adc.setCompareChannels(channel); + adc.startSingleMeasurement(); + while(adc.isBusy()){} + voltage = adc.getResult_V(); // alternative: getResult_mV for Millivolt + 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();//I2C + if(!adc.init()){ + Serial.println("ADS1115 not connected!"); + } + adc.setVoltageRange_mV(ADS1115_RANGE_6144); + // Setup sensors INTENSITAS + configureSensor(); + if(!tsl.begin()){ + Serial.print("Ooops, no TSL2561 detected ... Check your wiring or I2C ADDR!"); + //while(1); + } + Serial.println(""); + } + +void readsensor() { + voltage = readChannel(ADS1115_COMP_0_GND); + tanah = analogRead(SoilSensor); + hum = dht.readHumidity(); + temp= dht.readTemperature(); + /////////// + sensors_event_t event; + tsl.getEvent(&event); + if (event.light) { + lux = event.light; + } + else { + Serial.println("Sensor overload"); + } + ////////////// + 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 + 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/Code Program Arduino/pompaair.ino b/Code Program Arduino/pompaair.ino new file mode 100644 index 0000000..18f88df --- /dev/null +++ b/Code 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 +} + +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()); +} + +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++) { + message += (char)payload[i]; + } + Serial.println(message); + + if (String(topic) == "home/switch/status") { + if (message == "Off") { + digitalWrite(relayPin, LOW); // Hidupkan relay + Serial.println("Relay turned Off"); + } else if (message == "On") { + digitalWrite(relayPin, HIGH); // Matikan relay + Serial.println("Relay turned On"); + } else { + Serial.println("Invalid message"); + } + } +} + +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); + } + } +} + +void loop() { + if (!client.connected()) { + reconnect(); + } + client.loop(); +}