🎉 Added script and README

This commit is contained in:
Finn Christiansen 2023-09-21 22:39:47 +02:00
parent 71b73f08b6
commit 8fd14a3170
2 changed files with 107 additions and 1 deletions

View file

@ -1,2 +1,41 @@
# rpi-nightlight # Raspberry Pi nightlight
A simple Python script which turns your Raspberry Pi into a motion activated nightlight.
## Installation
You will need the following dependencies:
```
pip3 install RPi.GPIO rpi-ws281x
```
Clone this repo or just download the python script and put it into `/usr/local/bin` for example and make it executeable.
```
chmod +x /usr/local/bin/nightlight.py
```
Probably you want to start this script at boot, put this in `/etc/cron.d/nightlight`
```
@reboot root /usr/local/bin/nightlight.py > /dev/null 2>&1
```
## GPIO PINs
Connect the PIR sensor as following (I have used a HC-SR501):
```
VCC: 5V
DATA: GPIO 23
GND: GND
```
Connect the Neopixel strip (some ws281x will do) as following:
```
VCC: 5V
DATA: GPIO 18
GND: GND
```

67
nightlight.py Executable file
View file

@ -0,0 +1,67 @@
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
from rpi_ws281x import PixelStrip, Color, Adafruit_NeoPixel
SENSOR_PIN = 23
LIGHT_SENSOR_PIN = 21
GPIO.setmode(GPIO.BCM)
GPIO.setup(SENSOR_PIN, GPIO.IN)
GPIO.setup(LIGHT_SENSOR_PIN, GPIO.IN)
LED_COUNT = 15
led_duration = 0
strip = Adafruit_NeoPixel(LED_COUNT, 18, 800000, 5, False, 255)
strip.begin()
def turn_on_light(channel):
if GPIO.input(LIGHT_SENSOR_PIN):
# motion detected
# reset LED duration
global led_duration
led_duration = 0
colorWipe(strip, Color(255, 0, 32))
else:
# there was motion but it is not dark yet
colorWipe(strip, Color(0, 0, 0))
def turn_off_light(channel):
# turn off light
colorWipe(strip, Color(0, 0, 0))
def colorWipe(strip, color, wait_ms=100):
for i in range(strip.numPixels()):
strip.setPixelColor(i, color)
strip.show()
time.sleep(wait_ms / 1000.0)
try:
GPIO.add_event_detect(
SENSOR_PIN, GPIO.RISING, callback=turn_on_light
)
GPIO.add_event_detect(
LIGHT_SENSOR_PIN, GPIO.RISING, callback=turn_off_light, bouncetime=500
)
while True:
if strip.getPixelColor(0) > 0:
# check if LED is on for more than X seconds
if led_duration > 180:
# turn off LED
colorWipe(strip, Color(0, 0, 0))
led_duration = 0
else:
led_duration += 1
else:
led_duration = 0
time.sleep(1)
except KeyboardInterrupt:
colorWipe(strip, Color(0, 0, 0))
print("Exiting...")
GPIO.cleanup()