CCCPaste

"MQTT Potentiometer" rev_07

/********* Pleasedontcode.com **********

	Pleasedontcode thanks you for automatic code generation! Enjoy your code!

	- Terms and Conditions:
	You have a non-exclusive, revocable, worldwide, royalty-free license
	for personal and commercial use. Attribution is optional; modifications
	are allowed, but you're responsible for code maintenance. We're not
	liable for any loss or damage. For full terms,
	please visit pleasedontcode.com/termsandconditions.

	- Project: "MQTT Potentiometer"
	- Source Code compiled for: ESP32 DevKit V1
	- Source Code created on: 2024-09-14 22:53:45

********* Pleasedontcode.com **********/

/****** SYSTEM REQUIREMENTS *****/
/****** SYSTEM REQUIREMENT 1 *****/
	/* Connect the ESP32 Dev board to an Home Assistant */
	/* MQTT Broker. The Broker need a username and */
	/* Password for authentifikation. Add the Adafruit */
	/* DS3502 Potentiometer. Read the MQTT topic and the */
	/* payload. */
/****** END SYSTEM REQUIREMENTS *****/

/****** DEFINITION OF LIBRARIES *****/
#include   // https://github.com/adafruit/Adafruit_DS3502
#include              // Library for WiFi connectivity
#include      // Library for MQTT

/****** FUNCTION PROTOTYPES *****/
void setup(void);
void loop(void);
void mqttCallback(char* topic, byte* payload, unsigned int length);

/***** DEFINITION OF ANALOG INPUT PINS *****/
// Define the pin for the potentiometer output. Using pin number directly for ESP32.
const uint8_t Potentiometer_Potentiometer_Vout_PIN = 4; // Changed from D4 to 4

/***** DEFINITION OF LIBRARIES CLASS INSTANCES *****/
Adafruit_DS3502 ds3502;  // Instantiate the DS3502 object
WiFiClient wifiClient;    // Create a WiFi client
PubSubClient mqttClient(wifiClient); // Create an MQTT client

// WiFi and MQTT credentials
const char* ssid = "Your_SSID";           // Replace with your WiFi SSID
const char* password = "Your_PASSWORD";   // Replace with your WiFi password
const char* mqttServer = "mqtt.example.com"; // Replace with your MQTT broker address
const int mqttPort = 1883;                 // Replace with your MQTT broker port
const char* mqttUser = "Your_MQTT_User";  // Replace with your MQTT username
const char* mqttPassword = "Your_MQTT_Password"; // Replace with your MQTT password
const char* mqttTopic = "potentiometer/set"; // MQTT topic to subscribe to

void setup(void)
{
    // Initialize serial communication for debugging
    Serial.begin(115200);
    // Wait until serial port is opened
    while (!Serial) { delay(1); }

    // Set the pin mode for the potentiometer output
    pinMode(Potentiometer_Potentiometer_Vout_PIN, INPUT); // Updated pin reference

    // Initialize the DS3502 chip
    if (!ds3502.begin()) {
        Serial.println("Couldn't find DS3502 chip");
        while (1);  // Halt execution if the chip is not found
    }
    Serial.println("Found DS3502 chip");

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

    // Set up MQTT client
    mqttClient.setServer(mqttServer, mqttPort);
    mqttClient.setCallback(mqttCallback);

    // Connect to MQTT broker
    while (!mqttClient.connected()) {
        Serial.print("Connecting to MQTT...");
        if (mqttClient.connect("ESP32Client", mqttUser, mqttPassword)) {
            Serial.println("connected");
            mqttClient.subscribe(mqttTopic); // Subscribe to the topic
        } else {
            Serial.print("failed, rc=");
            Serial.print(mqttClient.state());
            delay(2000);
        }
    }
}

void loop(void)
{
    mqttClient.loop(); // Maintain MQTT connection

    // Example of reading the wiper value and sending it to MQTT
    uint8_t currentWiperValue = ds3502.getWiper(); // Get the current wiper value
    float voltage = analogRead(Potentiometer_Potentiometer_Vout_PIN) * (5.0 / 1024); // Read voltage
    Serial.print("Current wiper voltage: ");
    Serial.print(voltage);
    Serial.println(" V");

    // Publish the current wiper value to MQTT
    mqttClient.publish("potentiometer/status", String(currentWiperValue).c_str());
    delay(5000); // Delay for readability
}

// Callback function to handle incoming MQTT messages
void mqttCallback(char* topic, byte* payload, unsigned int length) {
    // Convert payload to string
    String message;
    for (int i = 0; i < length; i++) {
        message += (char)payload[i];
    }

    // Set the wiper based on the received message
    int newWiperValue = message.toInt(); // Convert the message to an integer
    if (newWiperValue >= 0 && newWiperValue <= 127) {
        ds3502.setWiper(newWiperValue); // Set the wiper value
        Serial.print("Wiper set to: ");
        Serial.println(newWiperValue);
    } else {
        Serial.println("Invalid wiper value received");
    }
}

/* END CODE */