Light Control with AND Condition in MicroPython for ESP32 and ESP8266

In this project, you will learn how to control an Light Control with AND Condition in MicroPython for ESP32 and ESP8266. The LED will only turn on when both conditions are met: a button is pressed, and the light sensor reading is low (indicating darkness). This project helps you understand how to use the and operator in MicroPython to combine multiple conditions. By using boolean logic, you can control hardware based on multiple inputs, which is a key concept in many IoT and automation projects.

Data Types and Variable Table for Light Control with AND Condition:

Data Type Variable Name Description Example Value
Boolean button_pressed Stores the state of the button (True/False) True
Integer light_level Stores the reading from the light sensor 300
Boolean led_state Controls whether the LED is on or off True or False

In this project, boolean variables track whether the button is pressed and if the light sensor reading is low, while the integer variable stores the light sensor reading.

Syntax Table for Light Control with AND Condition in MicroPython:

Function Syntax Example
Read button input button.value() if button.value() == 1:
Read light sensor value adc.read() light_level = adc.read()
Apply AND condition if condition1 and condition2: if button_pressed and light_level < 500:
Set LED state led.value() led.value(1) (Turn LED on)

Required Components:

  • ESP32 or ESP8266
  • 1 LED
  • 1 Button
  • 1 Light Sensor (LDR)
  • 1 Resistor (220Ω for LED, 10kΩ for LDR)
  • Breadboard
  • Jumper wires

Circuit Diagram:

               LED          ESP32/ESP8266

               —–          ————

               Anode  ——> GPIO5 (Pin 5)

               Cathode ——> GND

 

                Button        ESP32/ESP8266

               —–          ————

               One Leg ——> GPIO4 (Pin 4)

               Other Leg —-> GND

 

                LDR           ESP32/ESP8266

               —–          ————

               One Leg ——> GPIO32 (Pin 32)

               Other Leg —-> GND through 10kΩ resistor

 

Circuit Connection Table:

Component Connection ESP32/ESP8266 Pin Explanation
LED Anode Connect to GPIO5 GPIO5 on ESP32/ESP8266 Controls the LED ON/OFF state
LED Cathode Connect to GND GND on ESP32/ESP8266 Completes the LED circuit
Button (Leg 1) Connect to GPIO4 GPIO4 on ESP32/ESP8266 Detects button presses
Button (Leg 2) Connect to GND GND on ESP32/ESP8266 Completes the button circuit
LDR (Leg 1) Connect to GPIO32 GPIO32 on ESP32/ESP8266 Measures light levels
LDR (Leg 2) Connect to GND through 10kΩ resistor GND Acts as a voltage divider to ensure accurate light sensor readings

Warnings:

  • Make sure the LED has a 220Ω resistor to prevent it from burning out due to excessive current.
  • Use a 10kΩ pull-down resistor with the light sensor (LDR) to ensure stable and accurate readings.

Circuit Analysis:

  • The button is connected to GPIO4 and is used to trigger the LED when pressed.
  • The light sensor (LDR) is connected to GPIO32 and acts as a voltage divider to measure the ambient light level. The ESP32/ESP8266 will read the voltage drop across the LDR to determine whether the environment is dark or bright.
  • The LED is connected to GPIO5 and will turn on when the button is pressed, and the light sensor detects low light conditions.

Installing MicroPython and Required Libraries:

Install MicroPython on ESP32/ESP8266: To get started, ensure that you have MicroPython installed on your ESP32 or ESP8266. You can flash the MicroPython firmware using esptool or Thonny:
esptool.py –chip esp32 erase_flash

esptool.py –chip esp32 write_flash -z 0x1000 esp32-20210902-v1.17.bin

  1. No Additional Libraries Needed: The built-in machine module is sufficient for handling GPIO pins and analog input for this project.

Writing the MicroPython Code for Light Control with AND Condition:

import machine

import time

 

# Initialize the LED (GPIO5), button (GPIO4), and light sensor (GPIO32)

led = machine.Pin(5, machine.Pin.OUT)

button = machine.Pin(4, machine.Pin.IN)

adc = machine.ADC(machine.Pin(32))  # ADC channel for the light sensor

 

# Set the threshold for low light condition (adjust based on your environment)

light_threshold = 500

 

while True:

    # Read the button state (pressed or not)

    button_pressed = button.value() == 1

    

    # Read the light level from the light sensor (ADC)

    light_level = adc.read()

 

    # Check if both the button is pressed AND the light level is low

    if button_pressed and light_level < light_threshold:

        led.value(1)  # Turn the LED ON

        print(“LED ON – Button Pressed and Light is Low”)

    else:

        led.value(0)  # Turn the LED OFF

        print(“LED OFF”)

 

    # Delay to avoid rapid state changes

    time.sleep(0.1)

Explanation of the Code:

  1. LED, button, and light sensor are initialized using GPIO pins.
  2. The ADC (Analog to Digital Converter) reads the light level from the light sensor.
  3. The program continuously checks if the button is pressed and if the light level is below the threshold. If both conditions are true (using the AND condition), the LED turns on.
  4. If either condition is false, the LED remains off.

Running the Code and Checking the Output:

  1. Upload the code to your ESP32/ESP8266 using Thonny or another MicroPython IDE.
  2. Press the button in a low-light environment to see the LED turn on.

The output on the serial monitor will show:
LED ON – Button Pressed and Light is Low

LED OFF

Expanding the Project:

  • Add a Buzzer: Include a buzzer that sounds when the button is pressed and light conditions are met.
  • Adjust the Light Sensitivity: Use a potentiometer to adjust the light sensor’s sensitivity to changing light conditions.
  • Wireless Control: Connect the project to a mobile app using Wi-Fi to control the LED remotely, based on light sensor input.

Common Problems and Solutions:

  1. Problem: The LED does not turn on when the button is pressed.
    • Solution: Double-check the button wiring and ensure that GPIO4 is properly connected to the button. Also, confirm that the light sensor reading is below the threshold.
  2. Problem: The light sensor is giving inconsistent readings.
    • Solution: Ensure the 10kΩ pull-down resistor is connected correctly to stabilize the readings from the light sensor.
  3. Problem: The LED remains on even when the light level is not low.
    • Solution: Adjust the light threshold value to better match your environment’s lighting conditions.

FAQ:

Q: Can I use a different GPIO pin for the button or LED?
A: Yes, you can change the GPIO pin assignments in the code by updating the pin numbers during initialization, such as button = machine.Pin(pin_number, machine.Pin.IN).

Q: How do I adjust the light sensitivity of the sensor?
A: Modify the light_threshold value in the code to change the point at which the LED turns on or off based on the light sensor’s readings.

Q: What happens if the button is pressed but the light level is not low?
A: The LED will remain off unless both the button is pressed and the light level is below the specified threshold. This is because the project uses the AND operator, meaning both conditions must be true for the LED to turn on.

Q: Can I use a different sensor instead of the light sensor (LDR)?
A: Yes, you can use other sensors, such as a temperature or motion sensor. Just update the code to read the appropriate sensor values and modify the threshold or conditions accordingly.

Conclusion:

In this project, you learned how to control an LED using the AND condition in MicroPython for ESP32 and ESP8266. By using a combination of a button press and a light sensor reading, you successfully controlled the LED based on multiple conditions. This project is an excellent introduction to working with boolean logic in hardware projects, enabling you to combine multiple inputs for complex control scenarios. With some adjustments, this project can be expanded into an advanced light control system, making it a great building block for future projects.