Software_and_hardware/Версия_1.0/Server.py

78 lines
2.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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)