#include <Arduino.h>
#include <SoftwareSerial.h>
#define MQTT_CONNECT 0x10
#define MQTT_CONNACK 0x20
#define MQTT_PUBLISH 0x30
#define MQTT_SUBSCRIBE 0x82
#define MQTT_SUBACK 0x90
#define MQTT_DISCONNECT 0xE0
SoftwareSerial Serial1(10, 11); // RX, TX
void setup() {
Serial.begin(115200);
Serial1.begin(9600); // Soros port a MQTT klienshez
Serial.println("MQTT Broker Indítás");
}
void loop() {
if (Serial.available()) {
handleMQTTMessage();
}
}
void handleMQTTMessage() {
byte packetType = Serial1.read();
switch (packetType) {
case MQTT_CONNECT:
handleConnect();
break;
case MQTT_PUBLISH:
handlePublish();
break;
case MQTT_SUBSCRIBE:
handleSubscribe();
break;
case MQTT_DISCONNECT:
handleDisconnect();
break;
default:
Serial.println("Ismeretlen üzenettípus.");
}
}
void handleConnect() {
Serial.println("MQTT CONNECT Üzenet Fogadva");
byte connack[] = { MQTT_CONNACK, 0x00, 0x00, 0x00 };
Serial1.write(connack, sizeof(connack));
}
void handlePublish() {
Serial.println("MQTT PUBLISH Üzenet Fogadva");
int topicLength = Serial1.read() << 8 | Serial1.read();
char topic[topicLength + 1];
Serial1.readBytes(topic, topicLength);
topic[topicLength] = '\0';
int messageLength = Serial1.available();
char message[messageLength + 1];
Serial1.readBytes(message, messageLength);
message[messageLength] = '\0';
Serial.print("Téma: ");
Serial.println(topic);
Serial.print("Üzenet: ");
Serial.println(message);
// Üzenet továbbítása minden előfizetőnek (a megvalósítás hiányzik)
}
void handleSubscribe() {
Serial.println("MQTT SUBSCRIBE Üzenet Fogadva");
int topicLength = Serial1.read() << 8 | Serial1.read();
char topic[topicLength + 1];
Serial1.readBytes(topic, topicLength);
topic[topicLength] = '\0';
// Előfizetés regisztrálása (a megvalósítás hiányzik)
byte suback[] = { MQTT_SUBACK, 0x00, 0x00, 0x00, 0x00 };
Serial1.write(suback, sizeof(suback));
}
void handleDisconnect() {
Serial.println("MQTT DISCONNECT Üzenet Fogadva");
// Kapcsolat bontása (a megvalósítás hiányzik)
}