CD4051B with ESP8266

CD4051B with ESP8266

This project uses the CD4051B multiplexer with an ESP8266 to read values from two potentiometers and adjust the brightness of two LEDs accordingly.

📜 ESP8266 Code:

#define MUX_A D4
#define MUX_B D3
#define MUX_C D2

#define ANALOG_INPUT A0
#define LED1 D1  // LED controlled by POT1
#define LED2 D0  // LED controlled by POT2

void setup() {
    pinMode(MUX_A, OUTPUT);
    pinMode(MUX_B, OUTPUT);
    pinMode(MUX_C, OUTPUT);
    
    pinMode(LED1, OUTPUT);
    pinMode(LED2, OUTPUT);
    
    Serial.begin(115200);
}

void changeMux(int c, int b, int a) {
    digitalWrite(MUX_A, a);
    digitalWrite(MUX_B, b);
    digitalWrite(MUX_C, c);
    delay(10); // Allow time for signal to settle
}

void loop() {
    int pot1_value, pot2_value;
    
    // Read POT1 (X0 - Pin 13)
    changeMux(LOW, LOW, LOW);
    pot1_value = analogRead(ANALOG_INPUT);

    // Read POT2 (X1 - Pin 14)
    changeMux(HIGH, LOW, LOW);
    pot2_value = analogRead(ANALOG_INPUT);

    // Map potentiometer values (0-1023) to PWM range (0-255)
    int led1_brightness = map(pot1_value, 0, 1023, 0, 255);
    int led2_brightness = map(pot2_value, 0, 1023, 0, 255);

    // Print values to Serial Monitor
    Serial.print("POT1: ");
    Serial.print(pot1_value);
    Serial.print(" | POT2: ");
    Serial.print(pot2_value);
    Serial.print(" || LED1: ");
    Serial.print(led1_brightness);
    Serial.print(" | LED2: ");
    Serial.println(led2_brightness);

    // Set LED brightness using PWM
    analogWrite(LED1, led1_brightness);
    analogWrite(LED2, led2_brightness);

    delay(100);
}
    

⚡ Circuit Connections:

  • **ESP8266 to CD4051B**
    • D4 → MUX_A (Pin 11)
    • D3 → MUX_B (Pin 10)
    • D2 → MUX_C (Pin 9)
    • A0 → Common Output (Pin 3)
    • GND → GND (Pin 8)
    • 3.3V → VCC (Pin 16)
  • **Potentiometers:**
    • POT1 → X0 (Pin 13 of CD4051B)
    • POT2 → X1 (Pin 14 of CD4051B)
  • **LEDs:**
    • D1 (PWM) → LED1
    • D0 (PWM) → LED2

Circuit Diagram