OC
OceanRemote
Low-code IoT platform
← Back to Course

PWM for LED Dimming and Motor Speed

🎛️ PWM - Analog Output on ESP8266

ESP8266 supports PWM on most GPIO pins using the analogWrite() function.

📖 LED Dimming Example:

#define LED_PIN 4

void setup() {
    pinMode(LED_PIN, OUTPUT);
}

void loop() {
    // Fade LED up
    for (int brightness = 0; brightness <= 255; brightness++) {
        analogWrite(LED_PIN, brightness);
        delay(5);
    }
    delay(1000);
    
    // Fade LED down
    for (int brightness = 255; brightness >= 0; brightness--) {
        analogWrite(LED_PIN, brightness);
        delay(5);
    }
    delay(1000);
}
    

💧 Variable Speed Water Pump:

#define PUMP_PIN 4
#define SOIL_DRY 20
#define SOIL_WET 60

void setup() {
    pinMode(PUMP_PIN, OUTPUT);
}

void loop() {
    int moisture = readSoilMoisture();  // Your sensor function
    
    if (moisture < SOIL_DRY) {
        analogWrite(PUMP_PIN, 255);  // Full speed
        Serial.println("Pump: FULL SPEED");
    } 
    else if (moisture < SOIL_WET) {
        int speed = map(moisture, SOIL_DRY, SOIL_WET, 255, 50);
        analogWrite(PUMP_PIN, speed);
        Serial.print("Pump speed: ");
        Serial.println(speed);
    } 
    else {
        analogWrite(PUMP_PIN, 0);  // Off
        Serial.println("Pump: OFF");
    }
    delay(60000);
}
    
⚠️ Important:

For water pumps, use a MOSFET (like IRLZ44N) or motor driver. PWM can damage standard relays!

💡 Key Takeaways:
  • Apply these concepts directly to your farm or project.
  • Take notes on important details for the quiz.
  • Use the button below to track your progress.