from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import sys
import socket
redStrength=255
greenStrength=255
blueStrength=255
# Arduino’s IP address (from Arduino Serial Monitor)
HOST = "192.168.88.120" # Use Your Arduino's IP. It will print when
#You Run the Arduino Server Program
PORT = 12345 # Must match Arduino’s UDP port
# Create a UDP socket
mySocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
mySocket.settimeout(5.0) # 5 seconds timeout for responses
app = QApplication([])
window = QMainWindow()
window.setWindowTitle('Welcome to GUI World')
window.setGeometry(100,100,500,300)
widgetContainer = QWidget()
window.setCentralWidget(widgetContainer)
mainLayout = QVBoxLayout(widgetContainer)
label = QLabel("Welcome to PyQt5!")
label.setAlignment(Qt.AlignCenter)
label.setStyleSheet("font-size: 24px; color: blue; padding: 10px;")
label.setFixedHeight(50)
mainLayout.addWidget(label)
pushButtonLayout = QHBoxLayout()
mainLayout.addLayout(pushButtonLayout)
pushButtonRed = QPushButton("Blink Red!")
pushButtonRed.setStyleSheet("background-color: red; color: white; font-size: 24px; padding:10;")
pushButtonRed.setFixedSize(150,50)
def pushButtonRedClicked():
label.setText("Blink Red!")
label.setStyleSheet(" font-size: 24px;color: red; padding:10;")
cmd ="redblink:5:100:"+str(redStrength)+"\n"
cmdEncoded=cmd.encode()
mySocket.sendto(cmdEncoded, (HOST,PORT))
print('Sent '+cmd+' to HOST',HOST,PORT)
try:
response, server_address = mySocket.recvfrom(1024)
print("Server response:", response.decode())
except socket.timeout:
print("No response received from server within 5 seconds")
pushButtonRed.clicked.connect(pushButtonRedClicked)
pushButtonLayout.addWidget(pushButtonRed)
pushButtonGreen = QPushButton("Blink Green!")
pushButtonGreen.setStyleSheet("background-color: green; color: white; font-size: 24px; padding:10;")
pushButtonGreen.setFixedSize(150,50)
def pushButtonGreenClicked():
label.setText("Blink Green!")
label.setStyleSheet(" font-size: 24px;color: green; padding:10;")
cmd ="greenblink:5:100:"+str(greenStrength)+"\n"
cmdEncoded=cmd.encode()
mySocket.sendto(cmdEncoded, (HOST,PORT))
print('Sent '+cmd+' to HOST',HOST,PORT)
try:
response, server_address = mySocket.recvfrom(1024)
print("Server response:", response.decode())
except socket.timeout:
print("No response received from server within 5 seconds")
pushButtonGreen.clicked.connect(pushButtonGreenClicked)
pushButtonLayout.addWidget(pushButtonGreen)
pushButtonBlue = QPushButton("Blink Blue!")
pushButtonBlue.setStyleSheet("background-color: blue; color: white; font-size: 24px; padding:10;")
pushButtonBlue.setFixedSize(150,50)
def pushButtonBlueClicked():
label.setText("Blink Blue!")
label.setStyleSheet(" font-size: 24px;color: blue; padding:10;")
cmd ="blueblink:5:100:"+str(blueStrength)+"\n"
cmdEncoded=cmd.encode()
mySocket.sendto(cmdEncoded, (HOST,PORT))
print('Sent '+cmd+' to HOST',HOST,PORT)
try:
response, server_address = mySocket.recvfrom(1024)
print("Server response:", response.decode())
except socket.timeout:
print("No response received from server within 5 seconds")
pushButtonBlue.clicked.connect(pushButtonBlueClicked)
pushButtonLayout.addWidget(pushButtonBlue)
toggleButtonLayout = QHBoxLayout()
mainLayout.addLayout(toggleButtonLayout)
toggleButtonRed = QPushButton("Toggle Red")
toggleButtonRed.setCheckable(True)
toggleButtonRed.setStyleSheet("background-color: red; color: white; font-size: 18px; padding:10;")
toggleButtonRed.setFixedSize(150,50)
def toggleRed(checked):
if checked:
label.setText("Red Toggle ON")
label.setStyleSheet(" font-size: 24px;color: red; padding:10;")
cmd="redOn:"+str(redStrength)+"\n"
cmdEncoded=cmd.encode()
mySocket.sendto(cmdEncoded, (HOST,PORT))
print('Sent '+cmd+' to HOST',HOST,PORT)
try:
response, server_address = mySocket.recvfrom(1024)
print("Server response:", response.decode())
except socket.timeout:
print("No response received from server within 5 seconds")
if not checked:
label.setText("Red Toggle OFF")
label.setStyleSheet(" font-size: 24px;color: red; padding:10;")
cmd="redOff:0\n"
cmdEncoded=cmd.encode()
mySocket.sendto(cmdEncoded, (HOST,PORT))
print('Sent '+cmd+' to HOST',HOST,PORT)
try:
response, server_address = mySocket.recvfrom(1024)
print("Server response:", response.decode())
except socket.timeout:
print("No response received from server within 5 seconds")
toggleButtonRed.toggled.connect(toggleRed)
toggleButtonLayout.addWidget(toggleButtonRed)
toggleButtonGreen = QPushButton("Toggle Green")
toggleButtonGreen.setCheckable(True)
toggleButtonGreen.setStyleSheet("background-color: green; color: white; font-size: 18px; padding:10;")
toggleButtonGreen.setFixedSize(150,50)
def toggleGreen(checked):
if checked:
label.setText("Green Toggle ON")
label.setStyleSheet(" font-size: 24px;color: green; padding:10;")
cmd="greenOn:"+str(greenStrength)+"\n"
cmdEncoded=cmd.encode()
mySocket.sendto(cmdEncoded, (HOST,PORT))
print('Sent '+cmd+' to HOST',HOST,PORT)
try:
response, server_address = mySocket.recvfrom(1024)
print("Server response:", response.decode())
except socket.timeout:
print("No response received from server within 5 seconds")
if not checked:
label.setText("Green Toggle OFF")
label.setStyleSheet(" font-size: 24px;color: green; padding:10;")
cmd="greenOff:0\n"
cmdEncoded=cmd.encode()
mySocket.sendto(cmdEncoded, (HOST,PORT))
print('Sent '+cmd+' to HOST',HOST,PORT)
try:
response, server_address = mySocket.recvfrom(1024)
print("Server response:", response.decode())
except socket.timeout:
print("No response received from server within 5 seconds")
toggleButtonGreen.toggled.connect(toggleGreen)
toggleButtonLayout.addWidget(toggleButtonGreen)
toggleButtonBlue = QPushButton("Toggle Blue")
toggleButtonBlue.setCheckable(True)
toggleButtonBlue.setStyleSheet("background-color: blue; color: white; font-size: 18px; padding:10;")
toggleButtonBlue.setFixedSize(150,50)
def toggleBlue(checked):
if checked:
label.setText("Blue Toggle ON")
label.setStyleSheet(" font-size: 24px;color: blue; padding:10;")
cmd="blueOn:"+str(blueStrength)+"\n"
cmdEncoded=cmd.encode()
mySocket.sendto(cmdEncoded, (HOST,PORT))
print('Sent '+cmd+' to HOST',HOST,PORT)
try:
response, server_address = mySocket.recvfrom(1024)
print("Server response:", response.decode())
except socket.timeout:
print("No response received from server within 5 seconds")
if not checked:
label.setText("Blue Toggle OFF")
label.setStyleSheet(" font-size: 24px;color: blue; padding:10;")
cmd="blueOff:0\n"
cmdEncoded=cmd.encode()
mySocket.sendto(cmdEncoded, (HOST,PORT))
print('Sent '+cmd+' to HOST',HOST,PORT)
try:
response, server_address = mySocket.recvfrom(1024)
print("Server response:", response.decode())
except socket.timeout:
print("No response received from server within 5 seconds")
toggleButtonBlue.toggled.connect(toggleBlue)
toggleButtonLayout.addWidget(toggleButtonBlue)
redSlider = QSlider(Qt.Horizontal)
redSlider.setMinimum(0)
redSlider.setMaximum(100)
redSlider.setValue(100)
redSlider.setStyleSheet("""
QSlider::groove:horizontal {background: lightpink; height:20px;border-radius:5px;}
QSlider::handle:horizontal {background: red; margin-top: -10px; margin-bottom: -10px ; height: 40;width: 20px;border-radius: 5px;}
""")
redSlider.setFixedHeight(50)
def updateRedSlider():
global redStrength
label.setText("Red Slider: "+str(redSlider.value()))
label.setStyleSheet("font-size: 24px; color: red; padding:10;")
redStrength = int(redSlider.value()/100*255)
print("Red Strength: ",redStrength)
cmd="redBright:"+str(redStrength)+"\n"
cmdEncoded=cmd.encode()
mySocket.sendto(cmdEncoded, (HOST,PORT))
try:
response,server_address = mySocket.recvfrom(1024)
print("Server response: ",response.decode())
except socket.timeout:
print("No Response for the Server for TimeOut")
redSlider.valueChanged.connect(updateRedSlider)
mainLayout.addWidget(redSlider)
greenSlider = QSlider(Qt.Horizontal)
greenSlider.setMinimum(0)
greenSlider.setMaximum(100)
greenSlider.setValue(100)
greenSlider.setStyleSheet("""
QSlider::groove:horizontal {background: lightgreen; height:20px;border-radius:5px;}
QSlider::handle:horizontal {background: green; margin-top: -10px; margin-bottom: -10px ; height: 40;width: 20px;border-radius: 5px;}
""")
greenSlider.setFixedHeight(50)
def updateGreenSlider():
global greenStrength
label.setText("Green Slider: "+str(greenSlider.value()))
label.setStyleSheet("font-size: 24px; color: green; padding:10;")
greenStrength = int(greenSlider.value()/100*255)
print("Green Strength: ",greenStrength)
cmd="greenBright:"+str(greenStrength)+"\n"
cmdEncoded=cmd.encode()
mySocket.sendto(cmdEncoded, (HOST,PORT))
try:
response,server_address = mySocket.recvfrom(1024)
print("Server response: ",response.decode())
except socket.timeout:
print("No Response for the Server for TimeOut")
greenSlider.valueChanged.connect(updateGreenSlider)
mainLayout.addWidget(greenSlider)
blueSlider = QSlider(Qt.Horizontal)
blueSlider.setMinimum(0)
blueSlider.setMaximum(100)
blueSlider.setValue(100)
blueSlider.setStyleSheet("""
QSlider::groove:horizontal {background: lightblue; height:20px;border-radius:5px;}
QSlider::handle:horizontal {background: blue; margin-top: -10px; margin-bottom: -10px ; height: 40;width: 20px;border-radius: 5px;}
""")
blueSlider.setFixedHeight(50)
def updateBlueSlider():
global blueStrength
label.setText("Blue Slider: "+str(blueSlider.value()))
label.setStyleSheet("font-size: 24px; color: blue; padding:10;")
blueStrength = int(blueSlider.value()/100*255)
print("Blue Strength: ",blueStrength)
cmd="blueBright:"+str(blueStrength)+"\n"
cmdEncoded=cmd.encode()
mySocket.sendto(cmdEncoded, (HOST,PORT))
try:
response,server_address = mySocket.recvfrom(1024)
print("Server response: ",response.decode())
except socket.timeout:
print("No Response for the Server for TimeOut")
blueSlider.valueChanged.connect(updateBlueSlider)
mainLayout.addWidget(blueSlider)
mainLayout.addStretch()
window.show()
sys.exit(app.exec_())