CCCPaste

"WiFi Potentiometer" rev_08

/********* 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: "WiFi Potentiometer"
	- Source Code NOT compiled for: ESP32 DevKit V1
	- Source Code created on: 2024-09-14 23:42:54

********* 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 2 different */
	/* Adafruit DS3502 Potentiometer one is connected to */
	/* 0x28 the other to 0x2A. Read the MQTT topic and */
	/* the payload. */
/****** END SYSTEM REQUIREMENTS *****/

/****** DEFINITION OF LIBRARIES *****/
#include   // https://github.com/adafruit/Adafruit_DS3502
#include              // Include WiFi library
#include      // Include PubSubClient library for MQTT

/****** FUNCTION PROTOTYPES *****/
void setup(void);
void loop(void);

/***** DEFINITION OF ANALOG INPUT PINS *****/
const uint8_t Potentiometer_Potentiometer_Vout_PIN_D4 = D4;

/***** DEFINITION OF LIBRARIES CLASS INSTANCES *****/
Adafruit_DS3502 ds3502_1; // Create an instance of the Adafruit_DS3502 class for address 0x28
Adafruit_DS3502 ds3502_2; // Create an instance of the Adafruit_DS3502 class for address 0x2A

// WiFi and MQTT configuration
const char* ssid = "YOUR_SSID";          // Replace with your WiFi SSID
const char* password = "YOUR_PASSWORD";  // Replace with your WiFi password
const char* mqtt_server = "YOUR_MQTT_BROKER_IP"; // Replace with your MQTT broker IP
const char* mqtt_user = "YOUR_MQTT_USERNAME";    // Replace with your MQTT username
const char* mqtt_password = "YOUR_MQTT_PASSWORD"; // Replace with your MQTT password

WiFiClient espClient;             // Create a WiFi client
PubSubClient client(espClient);   // Create a PubSubClient object

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

    // Initialize the potentiometer pin as input
    pinMode(Potentiometer_Potentiometer_Vout_PIN_D4, INPUT);

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

    // Initialize the MQTT client
    client.setServer(mqtt_server, 1883);
    
    // Initialize the DS3502 chips
    if (!ds3502_1.begin(0x28) || !ds3502_2.begin(0x2A)) {
        Serial.println("Couldn't find DS3502 chips");
        while (1); // Halt if the chips are not found
    }
    Serial.println("Found DS3502 chips");
}

void loop(void)
{
    // Ensure the MQTT client is connected
    if (!client.connected()) {
        // Attempt to reconnect
        if (client.connect("ESP32Client", mqtt_user, mqtt_password)) {
            Serial.println("Connected to MQTT broker");
        } else {
            Serial.print("Failed to connect to MQTT broker, rc=");
            Serial.print(client.state());
            delay(2000);
            return; // Exit loop if not connected
        }
    }
    client.loop(); // Maintain MQTT connection

    // Example wiper values to set and read voltage
    for (uint8_t wiper_value : {0, 63, 127}) {
        ds3502_1.setWiper(wiper_value); // Set the wiper of the first potentiometer
        ds3502_2.setWiper(wiper_value); // Set the wiper of the second potentiometer

        // Read the voltage from the potentiometer
        float voltage = analogRead(Potentiometer_Potentiometer_Vout_PIN_D4) * (5.0 / 1024);
        Serial.print("Wiper voltage with wiper set to ");
        Serial.print(wiper_value);
        Serial.print(": ");
        Serial.print(voltage);
        Serial.println(" V");

        // Publish the wiper value to MQTT
        String topic = "home/potentiometer/wiper";
        String payload = String(wiper_value);
        client.publish(topic.c_str(), payload.c_str());

        delay(1000); // Wait for a second before the next iteration
    }
}

/* END CODE */