server.py 3.15 KB
Newer Older
Agrigor's avatar
Agrigor committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
###############################################################################
########################## IMPORT LIBRARIES ###################################
###############################################################################

import RPi.GPIO as GPIO
import time
import signal
import sys
import socket

###############################################################################
########################## GLOBAL CONSTANTS ###################################
###############################################################################

# Network Constants
TARGET_IP = sys.argv[1]
TARGET_PORT = 50000
UDP = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

###############################################################################
########################## CLASS DEFINITION ###################################
###############################################################################

class Buzzer:
    def __init__(self, number, board_pin, bounce=300):
        self.number = number
        self.pin = board_pin
        self.bounce = bounce
        GPIO.setmode(GPIO.BOARD)
        GPIO.setup(self.pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
        self.create_event()

    def create_event(self):
        GPIO.add_event_detect(self.pin, GPIO.RISING, callback=self.event, bouncetime=self.bounce)

    def event(self, channel):
        msg = "Button " + str(self.number) + " pressed"
        print(msg)
        UDP.sendto(str.encode(msg), (TARGET_IP, TARGET_PORT))

###############################################################################
########################## DEFINITION FUNCTIONS ###############################
###############################################################################

def init():
    # Initialize target ip adress
    try:
        socket.inet_aton(TARGET_IP)
    except socket.error:
        print("First Argument was no valid IP-Address")
        sys.exit(0)
    else:
        # Initialize signal handling for interrupt by CTRL+C or kill command
        signal.signal(signal.SIGINT, quit)


# Things to be done while ending programm
def quit(signal, frame):
    GPIO.cleanup()
    UDP.close()
    print("\n Bye Bye")
    sys.exit(0)

###############################################################################
################################## MAIN #######################################
###############################################################################

# Mainfunction which includes the whole program
def main():

    # Initialize
    init()

    # Initialize GPIO pins
    b1 = Buzzer(1, 35)
    b2 = Buzzer(2, 36)
    b3 = Buzzer(3, 37)
    b4 = Buzzer(4, 38)

    while True:
        # Do nothing
        time.sleep(0.1)

###############################################################################
################################# PROGRAM #####################################
###############################################################################

# Start Server
main()

###############################################################################
#################################### END ######################################
###############################################################################