// --- SENDER (Client A) ---
#include <WiFi.h>
#include <PubSubClient.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server = "test.mosquitto.org"; // Öffentlicher Test-Broker
WiFiClient espClient;
PubSubClient client(espClient);
const int RED_BUTTON_PIN = 15;
const int GREEN_BUTTON_PIN = 16;
const int BLUE_BUTTON_PIN = 17;
bool lastRedButtonState = HIGH;
bool lastGreenButtonState = HIGH;
bool lastBlueButtonState = HIGH;
void setup() {
Serial.begin(115200);
pinMode(RED_BUTTON_PIN, INPUT_PULLUP);
pinMode(GREEN_BUTTON_PIN, INPUT_PULLUP);
pinMode(BLUE_BUTTON_PIN, INPUT_PULLUP);
// 1. WiFi Verbindung
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi verbunden!");
// 2. MQTT Verbindung
client.setServer(mqtt_server, 1883);
}
void reconnect() {
while (!client.connected()) {
Serial.print("Verbinde mit MQTT...");
// Einzigartige ID erzeugen
if (client.connect("ESP32_Sender_Unique_ID_123")) {
Serial.println("verbunden!");
} else {
delay(5000);
}
}
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// Button Logik
int red_reading = digitalRead(RED_BUTTON_PIN);
if (red_reading == LOW && lastRedButtonState == HIGH) {
Serial.println("Click! Sende Signal...");
// WICHTIG: Das "Topic" muss eindeutig sein, damit wir uns finden
client.publish("mein/eigenes/projekt/led", "TOGGLER");
delay(200); // Debounce
}
lastRedButtonState = red_reading;
int green_reading = digitalRead(GREEN_BUTTON_PIN);
if (green_reading == LOW && lastGreenButtonState == HIGH) {
Serial.println("Click! Sende Signal...");
// WICHTIG: Das "Topic" muss eindeutig sein, damit wir uns finden
client.publish("mein/eigenes/projekt/led", "TOGGLEG");
delay(200); // Debounce
}
lastRedButtonState = green_reading;
int blue_reading = digitalRead(BLUE_BUTTON_PIN);
if (blue_reading == LOW && lastBlueButtonState == HIGH) {
Serial.println("Click! Sende Signal...");
// WICHTIG: Das "Topic" muss eindeutig sein, damit wir uns finden
client.publish("mein/eigenes/projekt/led", "TOGGLEB");
delay(200); // Debounce
}
lastBlueButtonState = blue_reading;
}