#include <math.h>
#include <WiFi.h>
#include <PubSubClient.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server = "mqtt.eclipseprojects.io"; // Example public broker
const char* mqtt_topic = "esp32/test/topic"; // Topic to subscribe to
WiFiClient espClient;
PubSubClient client(espClient);
void connectMQTT() {
while (!client.connected()) {
Serial.println("Attempting MQTT connection...");
// Create a unique client ID
String clientId = "ESP32Client-" + String(random(0xffff), HEX);
if (client.connect(clientId.c_str())) {
Serial.println("Connected to MQTT broker");
client.subscribe(mqtt_topic);
} else {
Serial.print("Failed to connect, state: ");
Serial.println(client.state());
delay(5000);
}
}
}
void callback(char* topic, byte* payload, unsigned int length) {
String message = "";
for (int i = 0; i < length; i++) {
message += (char)payload[i];
}
Serial.print("Received message: ");
Serial.println(message);
}
const int pwmPin = 13;
const int frequency = 5000;
const uint8_t resolution = 8;
const float fixedDutyCyclePercent = 75.0;
const uint32_t maxDutyCycle = (1 << resolution) - 1;
uint32_t percentageToDuty(float percentage) {
if (percentage < 0.0) {
percentage = 0.0;
} else if (percentage > 100.0) {
percentage = 100.0;
}
return (uint32_t)round((percentage / 100.0) * maxDutyCycle);
}
void connectWiFi() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
Serial.println("WiFi Connected");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
}
void setup() {
connectWiFi();
}
void setup() {
Serial.begin(115200);
Serial.println("ESP32 Fixed PWM (Percentage Input) Example (Pin-Based API)");
// 1. Configure and attach the PWM pin using LEDC
ledcAttach(pwmPin, frequency, resolution);
Serial.printf("Attached PWM to GPIO %d\n", pwmPin);
Serial.printf("Frequency: %d Hz, Resolution: %d bits (Max Duty Value: %u)\n",frequency, resolution, maxDutyCycle);
uint32_t calculatedDutyValue = percentageToDuty(fixedDutyCyclePercent);
Serial.printf("Requested Duty Cycle: %.2f %%\n", fixedDutyCyclePercent);
Serial.printf("Calculated Raw Duty Value: %u\n", calculatedDutyValue);
ledcWrite(pwmPin, calculatedDutyValue);
Serial.printf("Set fixed duty cycle %u on pin %d\n", calculatedDutyValue,pwmPin);
Serial.println("PWM signal is now active.");
}
void loop() {
delay(1000);
}