#pip install pymodbus flask #pip install pymodbus==2.5.3 #python d:\Антоше\Универ\Гит\Software_and_hardware\Версия_1.0\Server.py import serial from pymodbus.client.sync import ModbusSerialClient as ModbusClient from flask import Flask, render_template import serial.tools.list_ports import time app = Flask(__name__) # Настройка Modbus def find_arduino_port(): ports = list(serial.tools.list_ports.comports()) for port in ports: if "Arduino" in port.description or "CH340" in port.description: return port.device return None # Поиск порта Arduino arduino_port = find_arduino_port() if arduino_port is None: print("Arduino не подключено или не найдено") else: print(f"Подключено к порту: {arduino_port}") # Настройка клиента Modbus modbus_client = ModbusClient(method='rtu', port=arduino_port, baudrate=9600) modbus_client.connect() # Состояние пина (будет обновляться через Modbus) modbus_register = 0 # Регистор Modbus для состояния пина # Функция для вывода состояния пина в консоль def print_pin_state(): result = modbus_client.read_holding_registers(modbus_register, 1, unit=1) if result.isError(): print("Ошибка чтения состояния") return # Состояние пина: 0 - OFF, 1 - ON state = result.registers[0] print(f"Состояние пина: {'Включен' if state == 1 else 'Выключен'}") # Обновление состояния пина каждую секунду def update_state_periodically(): while True: print_pin_state() time.sleep(1) # Запуск обновления состояния в фоновом режиме import threading state_thread = threading.Thread(target=update_state_periodically) state_thread.daemon = True state_thread.start() @app.route('/') def index(): return render_template('index.html', arduino_port=arduino_port) @app.route('/state') def get_state(): # Чтение состояния пина через Modbus result = modbus_client.read_holding_registers(modbus_register, 1, unit=1) if result.isError(): return "Ошибка чтения состояния", 500 # Состояние пина: 0 - OFF, 1 - ON state = result.registers[0] return str(state) if __name__ == '__main__': app.run(debug=True)