/********* 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 */