This commit is contained in:
Your Name 2024-11-22 08:34:08 +01:00
commit db798b1368
2 changed files with 114 additions and 26 deletions

View File

@ -1064,45 +1064,43 @@ class RelayControl(QtWidgets.QMainWindow):
def __init__(self, ui):
super().__init__()
self.ui = ui
# self.timer = QtCore.QTimer(self)
# self.timer.timeout.connect(self.update_frame)
# # Populate the model dropdown menu
# self.populate_model_dropdown()
self.ui.startSpotlightBtn.clicked.connect(self.spot_on)
self.ui.stopSpotlightBtn.clicked.connect(self.spot_off)
# self.scene = QtWidgets.QGraphicsScene(self)
# self.ui.graphicsView.setScene(self.scene)
self.r = sainsmartrelay.SainsmartRelay()
# def populate_model_dropdown(self):
# """Populate the dropdown menu with model files from the models directory."""
# models_dir = "models"
# model_files = [f for f in os.listdir(models_dir) if f.endswith(".pt")]
# self.ui.modelComboBox.clear()
# self.ui.modelComboBox.addItems(model_files)
def spot_on(self):
# Start the YOLOv8 camera stream (only if not already started)
# if self.yolo_stream is None:
# self.yolo_stream = YOLOv8CameraStream(model_path="models/yolov8m_seg_e300.pt", logging_level="high")
# # self.yolo_stream.start() # Start the YOLOv8 stream
# self.timer.start(30) # Start the timer to update the frame every 30ms (about 33 FPS)
print("Turn on light clicked")
self.r.turn_on(1)
def spot_off(self):
# # Stop the camera stream and processing
# if self.yolo_stream is not None:
# self.timer.stop() # Stop the timer
# self.yolo_stream.cap.release() # Release the camera resource
# self.yolo_stream = None # Reset the YOLOv8 stream object
# self.scene.clear() # Clear the displayed frame from the graphicsView
# print("Camera stream stopped and resources released.")
print("Turn off light clicked")
self.r.turn_off(1)
def red_on(self):
print("Red light is on")
self.r.turn_on(2)
def red_off(self):
print("Red light is off")
self.r.turn_off(2)
def yellow_on(self):
print("Yellow light is on")
self.r.turn_on(3)
def yellow_off(self):
print("Yellow light is off")
self.r.turn_off(3)
def green_on(self):
print("Green light is on")
self.r.turn_on(4)
def green_off(self):
print("Green light is off")
self.r.turn_off(4)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)

90
wledControl.py Normal file
View File

@ -0,0 +1,90 @@
import serial
import time
class WLEDController:
def __init__(self, port: str, baud_rate: int = 115200, timeout: float = 1.0):
"""
Initialize the WLEDController.
:param port: The serial port to which the ESP32 is connected (e.g., '/dev/ttyUSB0').
:param baud_rate: The baud rate for the serial connection.
:param timeout: The timeout for serial communication in seconds.
"""
self.port = port
self.baud_rate = baud_rate
self.timeout = timeout
self.connection = None
def connect(self):
"""Establish the serial connection."""
try:
self.connection = serial.Serial(
self.port, self.baud_rate, timeout=self.timeout
)
print(f"Connected to {self.port}")
except serial.SerialException as e:
print(f"Failed to connect to {self.port}: {e}")
def disconnect(self):
"""Close the serial connection."""
if self.connection and self.connection.is_open:
self.connection.close()
print(f"Disconnected from {self.port}")
def send_command(self, command: str):
"""
Send a command to the WLED device.
:param command: The JSON command string to send.
"""
if not self.connection or not self.connection.is_open:
raise ConnectionError("Serial connection is not open.")
try:
self.connection.write(command.encode('utf-8'))
print(f"Sent command: {command}")
except serial.SerialException as e:
print(f"Failed to send command: {e}")
def switch_to_red(self):
"""Switch the light to red."""
self.send_command('{"ps":"1"}')
def switch_to_yellow(self):
"""Switch the light to yellow."""
self.send_command('{"ps":"2"}')
def switch_to_green(self):
"""Switch the light to green."""
self.send_command('{"ps":"3"}')
def turn_off_all(self):
"""Turn off all lights."""
self.send_command('{"ps":"4"}')
def change_effect(self):
"""Change the color effect."""
self.send_command('{"ps":"5"}')
# Example usage:
if __name__ == "__main__":
controller = WLEDController(port="/dev/ttyUSB0")
controller.connect()
try:
controller.switch_to_red()
time.sleep(2) # Wait for 2 seconds
controller.switch_to_yellow()
time.sleep(2) # Wait for 2 seconds
controller.switch_to_green()
time.sleep(2) # Wait for 2 seconds
controller.change_effect()
time.sleep(2) # Wait for 2 seconds
controller.turn_off_all()
time.sleep(2) # Wait for 2 seconds
finally:
controller.disconnect()