#include <IRremote.h>
#include <WiFi.h>
#include <PubSubClient.h>
const int RECV_PIN = 2; // IR Receiver pin
IRrecv irrecv(RECV_PIN);
decode_results results;
const int ledPin = 4; // LED pin
bool ledState = false;
// WiFi & MQTT Configuration
const char* ssid = "Wokwi-GUEST"; // Wokwi default WiFi
const char* password = "";
const char* mqttServer = "broker.hivemq.com";
const int mqttPort = 1883;
const char* mqttTopicIR = "wokwi/ir";
const char* mqttTopicLED = "wokwi/led";
const char* mqttTopicSub = "wokwi/command";
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
irrecv.enableIRIn(); // Start IR receiver
// Connect to WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnected to WiFi!");
// Connect to MQTT
client.setServer(mqttServer, mqttPort);
client.setCallback(callback);
reconnectMQTT();
}
void reconnectMQTT() {
while (!client.connected()) {
Serial.println("Connecting to MQTT...");
if (client.connect("Arduino_Client")) {
Serial.println("Connected to MQTT!");
client.subscribe(mqttTopicSub); // Subscribe for LED control
} else {
Serial.print("Failed, state: ");
Serial.println(client.state());
delay(2000);
}
}
}
void callback(char* topic, byte* payload, unsigned int length) {
String message = "";
for (unsigned int i = 0; i < length; i++) {
message += (char)payload[i];
}
Serial.print("MQTT Message received on topic ");
Serial.println(topic);
Serial.println("Message: " + message);
if (message == "ON") {
digitalWrite(ledPin, HIGH);
client.publish(mqttTopicLED, "ON");
} else if (message == "OFF") {
digitalWrite(ledPin, LOW);
client.publish(mqttTopicLED, "OFF");
}
}
void loop() {
if (!client.connected()) {
reconnectMQTT();
}
client.loop();
// Check for IR remote input
if (irrecv.decode(&results)) {
Serial.print("IR Received: ");
Serial.println(results.value, HEX);
// Publish IR code via MQTT
char irMessage[10];
sprintf(irMessage, "0x%X", results.value);
client.publish(mqttTopicIR, irMessage);
// Toggle LED on specific IR codes (change as per your remote)
if (results.value == 0xFFA25D) { // Example IR code
ledState = !ledState;
digitalWrite(ledPin, ledState);
client.publish(mqttTopicLED, ledState ? "ON" : "OFF");
}
irrecv.resume(); // Ready for next input
}
}