from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import sys
import socket
# Arduino’s IP address (from Arduino Serial Monitor)
HOST = "192.168.88.33" # 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\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\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\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\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\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\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\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\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\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)
mainLayout.addStretch()
window.show()
sys.exit(app.exec_())