# mqtt_motor_control.py import paho.mqtt.client as mqtt import time # Настройки MQTT MQTT_BROKER = "192.168.31.225" # Адрес MQTT брокера MQTT_PORT = 1883 # Порт MQTT MQTT_USER = "test" # Имя пользователя MQTT_PASSWORD = "1234" # Пароль MQTT_CONTROL_TOPIC = "motor/control/command" # Топик для управления двигателем MQTT_DRIVER_TOPIC = "motor/control/driver" # Топик для управления драйвером MQTT_SPEED_TOPIC = "motor/control/step_per_sec" # Топик для установки скорости шагов в секунду MQTT_RPM_TOPIC = "motor/control/rpm" # Топик для установки скорости оборотов в минуту def on_connect(client, userdata, flags, rc): if rc == 0: print("Connected to MQTT broker") else: print(f"Failed to connect, return code {rc}") def send_command(topic, command): """Отправка команды в MQTT топик""" client.publish(topic, command) print(f"Sent command: {command} to topic {topic}") def main(): # Создание клиента MQTT global client client = mqtt.Client() # Установка учетных данных client.username_pw_set(MQTT_USER, MQTT_PASSWORD) # Установка функции обратного вызова при подключении client.on_connect = on_connect # Подключение к брокеру try: client.connect(MQTT_BROKER, MQTT_PORT, 60) client.loop_start() # Запуск цикла обработки в отдельном потоке print("MQTT Motor Controller") print("Commands:") print(" start - запустить двигатель") print(" stop - остановить двигатель") print(" turnon - включить управление двигателем") print(" turnoff - выключить управление двигателем") print(" rpm - установить скорость оборотов (например: rpm 200)") print(" speed - установить скорость шагов в секунду (например: speed 2000)") print(" exit - выход") while True: command = input("\nEnter command: ").strip() if command == "exit": break elif command == "start": send_command(MQTT_CONTROL_TOPIC, "start") elif command == "stop": send_command(MQTT_CONTROL_TOPIC, "stop") elif command == "turnon": send_command(MQTT_DRIVER_TOPIC, "turnon") elif command == "turnoff": send_command(MQTT_DRIVER_TOPIC, "turnoff") elif command.startswith("speed "): try: speed = int(command.split()[1]) send_command(MQTT_SPEED_TOPIC, str(speed)) except ValueError: print("Invalid speed value. Please enter a number.") elif command.startswith("rpm "): try: rpm = int(command.split()[1]) send_command(MQTT_RPM_TOPIC, str(rpm)) except ValueError: print("Invalid speed value. Please enter a number.") else: print("Unknown command. Use 'start', 'stop', 'speed ', or 'exit'") except KeyboardInterrupt: print("\nShutting down...") except Exception as e: print(f"Error: {e}") finally: client.loop_stop() client.disconnect() print("Disconnected") if __name__ == "__main__": main()