Добавил изначальные файлы

This commit is contained in:
Антон Перегудин 2025-02-14 19:36:20 +03:00
commit 465df94f07
3 changed files with 108 additions and 0 deletions

View File

@ -0,0 +1,29 @@
#include <SimpleModbusSlave.h>
#define PIN1 7 // Пин для проверки состояния
// Настройка регистров
#define TOTAL_REGS 1
uint16_t regs[TOTAL_REGS] = {0}; // Один регистр для хранения статуса
SimpleModbusSlave slave(1); // Инициализация Slave с ID 1
void setup() {
// Настройка пина как вход
pinMode(PIN1, INPUT);
// Настройка скорости передачи данных
slave.setup(115200); // Установка скорости передачи данных 115200
}
void loop() {
// Чтение состояния пина
int pinState = digitalRead(PIN1);
// Установка регистра в 1, если пин HIGH, иначе 0
regs[0] = (pinState == HIGH) ? 1 : 0;
// Запуск цикла Modbus slave
slave.loop(regs, TOTAL_REGS);
}

79
Сервер.py Normal file
View File

@ -0,0 +1,79 @@
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')

BIN
Снимок.PNG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB