alexCajas / EmbeddedMqttBroker

This is a Mqtt broker for embedded devices, developed in C++, FreeRTOS to use advanced multitasking capabilities, and arduino core. Tested in an Esp32 and esp8266.
https://github.com/alexCajas/EmbeddedMqttBroker
MIT License
71 stars 14 forks source link

How di i puplich a message to a topic from the website #19

Open 0XZEROX0 opened 4 months ago

0XZEROX0 commented 4 months ago

Hey I was trying to make a website that can toggle the state of an LED using the liberally but I don't know how to publish a message from the website to the server here is that code if it help the last part is what should send the message to the MQTT server but It doesn't work

include

include

include "EmbeddedMqttBroker.h"

using namespace mqttBrokerName;

const char ssid = "....."; const char password = "...."; const char *AP_NameChar = "WebServerAndBroker";

/*** mqtt broker ****/ uint16_t mqttPort = 1883; MqttBroker broker(mqttPort);

/** http server ****/ uint16_t httpPort = 80; WiFiServer server(httpPort); WiFiClient httpClient;

void setup() { Serial.begin(115200); // Connect to WiFi network Serial.println(); Serial.println(); Serial.println("http server and mqtt broker"); Serial.print("Connecting to "); Serial.println(ssid);

WiFi.mode(WIFI_STA); //WiFi.mode(WIFI_AP_STA); //MDNS.begin(AP_NameChar,WiFi.localIP());

WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { WiFi.begin(ssid, password); delay(500); Serial.print("."); }

Serial.println(""); Serial.println("WiFi connected");

// Start http server server.begin(); Serial.println("http server started"); // Print the IP address Serial.print("Use this URL to connect: "); Serial.print("http://"); Serial.print(WiFi.localIP()); Serial.println("");

// Start the mqtt broker broker.setMaxNumClients(10); // set according to your system. broker.startBroker(); Serial.println("broker started");

// Print the IP address Serial.print("Use this ip: "); Serial.println(WiFi.localIP()); Serial.print("and this port: "); Serial.println(mqttPort); Serial.println("To connect to mqtt broker"); }

void loop() { // Check if a client has connected httpClient = server.available(); if (!httpClient) { vTaskDelay(10); return; }

boolean wait = true; while (!httpClient.available() and wait) { vTaskDelay(300); wait = false; }

if (!httpClient.available()) { return; }

String request = httpClient.readStringUntil('\r'); Serial.println(request);

httpClient.println("HTTP/1.1 200 OK"); httpClient.println("Content-type:text/html"); httpClient.println();

// Adding the HTML form with a button to toggle the ledControl topic httpClient.println("<!DOCTYPE html>"); httpClient.println(""); httpClient.println("Toggle LED"); httpClient.println(""); httpClient.println("

Toggle LED

"); httpClient.println("<form action=\"/toggle\" method=\"get\">"); httpClient.println("<button type=\"submit\">Toggle LED"); httpClient.println(""); httpClient.println(""); httpClient.println("");

// Handling the toggle request if (request.indexOf("/toggle") != -1) { // Toggle the ledControl topic static bool ledState = false; ledState = !ledState; if (ledState) { broker.publish("ledControl", "1"); } else { broker.publish("ledControl", "0"); } } }