#include #include #ifdef LED #undef LED #endif #define LED 23 // GPIO 5 (D1) for LED bool led_State = false; #define REL1 32 // GPIO 5 (D1) for LED bool rel1_State = false; #define REL2 33 // GPIO 5 (D1) for LED bool rel2_State = false; #define REL3 25 // GPIO 5 (D1) for LED bool rel3_State = false; #define REL4 26 // GPIO 5 (D1) for LED bool rel4_State = false; // WiFi settings const char *ssid = "Acasuca_2.4G"; // Replace with your WiFi name const char *password = "kNY2ph3mmrnT6zk4"; // Replace with your WiFi password // MQTT Broker settings const char *mqtt_broker = "masserv.utcluj.ro"; // EMQX broker endpoint const char *mqtt_topic = "mass/esp8266"; // MQTT topic const char *mqtt_username = "iot_client"; // MQTT username for authentication const char *mqtt_password = "ASA123"; // MQTT password for authentication const int mqtt_port = 1883; // MQTT port (TCP) WiFiClient espClient; PubSubClient mqtt_client(espClient); void connectToWiFi(); void connectToMQTTBroker(); void mqttCallback(char *topic, byte *payload, unsigned int length); void setup() { pinMode(LED, OUTPUT); digitalWrite(LED, LOW); pinMode(REL1, OUTPUT); digitalWrite(REL1, LOW); pinMode(REL2, OUTPUT); digitalWrite(REL2, LOW); pinMode(REL3, OUTPUT); digitalWrite(REL3, LOW); pinMode(REL4, OUTPUT); digitalWrite(REL4, LOW); Serial.begin(115200); connectToWiFi(); mqtt_client.setServer(mqtt_broker, mqtt_port); mqtt_client.setCallback(mqttCallback); connectToMQTTBroker(); } void connectToWiFi() { WiFi.begin(ssid, password); Serial.print("Connecting to WiFi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\nConnected to the WiFi network"); } void connectToMQTTBroker() { while (!mqtt_client.connected()) { String client_id = "esp32-client-" + String(WiFi.macAddress()); Serial.printf("Connecting to MQTT Broker as %s.....\n", client_id.c_str()) ; if (mqtt_client.connect(client_id.c_str(), mqtt_username, mqtt_password)) { Serial.println("Connected to MQTT broker"); mqtt_client.subscribe(mqtt_topic); // Publish message upon successful connection mqtt_client.publish(mqtt_topic, "Hi mass I'm ESP32 4 Channels Relay ^^"); } else { Serial.print("Failed to connect to MQTT broker, rc="); Serial.print(mqtt_client.state()); Serial.println(" try again in 5 seconds"); delay(5000); } } } void mqttCallback(char *topic, byte *payload, unsigned int length) { Serial.print("Message received on topic: "); Serial.println(topic); Serial.print("Message:"); String message; for (int i = 0; i < length; i++) { message += (char) payload[i]; // Convert *byte to string } // Read Temperature if "temp" message is received if (message == "temp") { int temperature = analogRead(A0); mqtt_client.publish(mqtt_topic, String(temperature).c_str(), true); Serial.print("Temperature is:"); Serial.println(temperature); } // LED Control the LED based on the message received if (message == "ledon" && !led_State) { digitalWrite(LED, HIGH); // Turn on the LED led_State = true; Serial.println("LED is turned on"); } if (message == "ledoff" && led_State) { digitalWrite(LED, LOW); // Turn off the LED led_State = false; Serial.println("LED is turned off"); } // R1 Control the Relay based on the message received if (message == "onr1" && !rel1_State) { digitalWrite(REL1, HIGH); // Turn on the LED rel1_State = true; Serial.println("Rel1 is turned on"); } if (message == "offr1" && rel1_State) { digitalWrite(REL1, LOW); // Turn off the LED rel1_State = false; Serial.println("Rel1 is turned off"); } // R2 Control the Relay based on the message received if (message == "onr2" && !rel2_State) { digitalWrite(REL2, HIGH); // Turn on the LED rel2_State = true; Serial.println("Rel2 is turned on"); } if (message == "offr2" && rel2_State ) { digitalWrite(REL2, LOW); // Turn off the LED rel2_State = false; Serial.println("Rel2 is turned off"); } // R3 Control the Relay based on the message received if (message == "onr3" && !rel3_State) { digitalWrite(REL3, HIGH); // Turn on the LED rel3_State = true; Serial.println("Rel3 is turned on"); } if (message == "offr3" && rel3_State) { digitalWrite(REL3, LOW); // Turn off the LED rel3_State = false; Serial.println("Rel3 is turned off"); } // R4 Control the Relay based on the message received if (message == "onr4" && !rel4_State) { digitalWrite(REL4, HIGH); // Turn on the LED rel4_State = true; Serial.println("Rel4 is turned on"); } if (message == "offr4" && rel4_State) { digitalWrite(REL4, LOW); // Turn off the LED rel4_State = false; Serial.println("Rel4 is turned off"); } Serial.println(); Serial.println("-----------------------"); } void loop() { if (!mqtt_client.connected()) { connectToMQTTBroker(); } mqtt_client.loop(); }