Software_and_hardware/Сервер.py

80 lines
2.5 KiB
Python
Raw 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.

from flask import Flask, jsonify
from pymodbus.client.serial import ModbusSerialClient
app = Flask(__name__)
# Настройка Modbus клиента
port_Arduino = 'COM3' # Убедитесь, что это правильный порт для вашего компьютера
baudrate = 115200
client = ModbusSerialClient(port=port_Arduino, baudrate=115200, timeout=1, stopbits=1, bytesize=8, parity='N')
# Попытка подключения к Modbus клиенту
try:
if client.connect():
print("Подключение успешно!")
else:
print("Не удалось подключиться к порту.")
except PermissionError as e:
print(f'Ошибка доступа к порту: {e}')
except Exception as e:
print(f'Ошибка подключения: {e}')
STATUS_REGISTER = 0 # Адрес регистра, где хранится статус
@app.route('/modbus-status', methods=['GET'])
def modbus_status():
try:
result = client.read_holding_registers(STATUS_REGISTER, 1)
if result.isError():
return jsonify({'error': 'Не удалось прочитать данные с Arduino'}), 500
else:
connected = bool(result.registers[0])
return jsonify({'connected': connected})
except Exception as e:
return jsonify({'error': str(e)}), 500
@app.route('/')
def index():
return '''
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Статус пина</title>
<style>
#status-circle {
width: 100px;
height: 100px;
border-radius: 50%;
background-color: red;
}
</style>
</head>
<body>
<div id="status-circle"></div>
<script>
function updateStatus() {
fetch('/modbus-status')
.then(response => response.json())
.then(data => {
const circle = document.getElementById('status-circle');
if (data.connected) {
circle.style.backgroundColor = 'green';
} else {
circle.style.backgroundColor = 'red';
}
});
}
setInterval(updateStatus, 1000); // Проверка статуса каждую секунду
</script>
</body>
</html>
'''
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')