From ad276591fc8aa4214710c4fb9aa5e3e7653ee435 Mon Sep 17 00:00:00 2001 From: Karl Hudgell Date: Fri, 20 Sep 2024 17:23:30 +0100 Subject: [PATCH] initial work on buttons --- buttons.py | 56 +++++++++++++++++++++++++++++++++++++++++++++++++ media_change.sh | 0 2 files changed, 56 insertions(+) create mode 100644 buttons.py mode change 100644 => 100755 media_change.sh diff --git a/buttons.py b/buttons.py new file mode 100644 index 0000000..e6154d0 --- /dev/null +++ b/buttons.py @@ -0,0 +1,56 @@ +import os +import RPi.GPIO as GPIO +import time +from dotenv import load_dotenv +from lib.mqtt import create_client, update_disc, control_player, create_config, check_current_disc + +# Load the .env file +load_dotenv() + +# Define the MQTT server details +broker = os.environ.get("broker") +port = int(os.environ.get("port")) +# MQTT username and password +username = os.environ.get("username") +password = os.environ.get("password") + +#print(f"Broker: {broker}, Port: {port}, Username: {username}") + +client = create_client(broker, port, username, password) + +create_config(client) + +# Set up GPIO pins for each button +BUTTON_PINS = [17, 18, 27] # Replace with your GPIO pin numbers + +GPIO.setmode(GPIO.BCM) # Use BCM numbering + +# Set up each button pin as input with internal pull-up resistors +for pin in BUTTON_PINS: + GPIO.setup(pin, GPIO.IN, pull_up_down=GPIO.PUD_UP) + +# Callback functions to handle button presses +def button_callback_1(channel): + print("Button 1 pressed!") + control_player(client, "PLAY") + +def button_callback_2(channel): + print("Button 2 pressed!") + control_player(client, "PAUSE") + +def button_callback_3(channel): + print("Button 3 pressed!") + +# Add event detection for each button press +GPIO.add_event_detect(BUTTON_PINS[0], GPIO.FALLING, callback=button_callback_1, bouncetime=200) +GPIO.add_event_detect(BUTTON_PINS[1], GPIO.FALLING, callback=button_callback_2, bouncetime=200) +GPIO.add_event_detect(BUTTON_PINS[2], GPIO.FALLING, callback=button_callback_3, bouncetime=200) + +try: + # Keep the script running to detect button presses + while True: + time.sleep(1) # Sleep to reduce CPU usage +except KeyboardInterrupt: + pass +finally: + GPIO.cleanup() # Clean up GPIO on exit diff --git a/media_change.sh b/media_change.sh old mode 100644 new mode 100755