62 lines
1.9 KiB
Python
62 lines
1.9 KiB
Python
# main.py
|
|
# MicroPython script for ESP8266 (using uPyCraft)
|
|
# Controls an LED based on an LDR sensor reading.
|
|
|
|
from machine import Pin, ADC
|
|
import time
|
|
|
|
# --- Configuration ---
|
|
# LDR Sensor connected to the only ADC pin (A0 on most boards).
|
|
# The ADC reads values from 0 (Darkest) to 1024 (Brightest) on the ESP8266.
|
|
LDR_PIN = 0
|
|
adc = ADC(LDR_PIN)
|
|
|
|
# LED connected to a digital pin (D4/GPIO2 is common on NodeMCU).
|
|
# If you are using the built-in LED, setting Pin(2, Pin.OUT) is correct.
|
|
# Note: The built-in LED on many ESP8266 boards is ACTIVE-LOW (0=ON, 1=OFF).
|
|
LED_PIN = 2
|
|
led = Pin(LED_PIN, Pin.OUT)
|
|
|
|
# Threshold: Adjust this value based on your LDR/resistor setup and environment.
|
|
# Values below this threshold will be considered "dark" (LED ON).
|
|
LIGHT_THRESHOLD = 500
|
|
|
|
print("LDR Sensor and LED control starting...")
|
|
|
|
def set_led_state(is_dark):
|
|
"""Sets the LED state based on whether it is dark or bright."""
|
|
|
|
# We use active-low logic for the built-in LED (0=ON, 1=OFF)
|
|
if is_dark:
|
|
led.value(0) # Turn LED ON
|
|
print("-> DARK: LED ON")
|
|
else:
|
|
led.value(1) # Turn LED OFF
|
|
print("-> BRIGHT: LED OFF")
|
|
|
|
try:
|
|
while True:
|
|
# Read the analog value from the LDR (0-1024)
|
|
ldr_value = adc.read()
|
|
|
|
print(f"LDR Reading: {ldr_value}")
|
|
|
|
# Check if the reading is below the set threshold
|
|
if ldr_value < LIGHT_THRESHOLD:
|
|
set_led_state(True)
|
|
else:
|
|
set_led_state(False)
|
|
|
|
# Wait for a short period before reading again
|
|
time.sleep(1)
|
|
|
|
except KeyboardInterrupt:
|
|
# Gracefully handle stop command in the REPL
|
|
led.value(1) # Turn LED OFF on exit
|
|
print("\nScript stopped by user.")
|
|
|
|
# Clean up is not strictly necessary in MicroPython's simple loop,
|
|
# but good for habit.
|
|
finally:
|
|
pass
|