last commit

This commit is contained in:
2026-01-22 13:00:58 +03:00
parent ad20ba3325
commit 72e2e88e7b
13 changed files with 851 additions and 243 deletions

231
README.md
View File

@@ -1,114 +1,183 @@
# Грузоблочный тренажер - Android приложение
# Тренировочное приложение КГЭУ
Android приложение для управления грузоблочным тренажером с ESP32 микроконтроллером.
Android-приложение для проведения и учёта тренировок с использованием тренажёра, подключённого к ESP32.
## Функциональность
## Описание
1. **Регистрация участника** - добавление и выбор участника тренировки
2. **Выбор режима упражнений** - выбор готового сценария или создание индивидуального
3. **Пуск и останов упражнения** - управление тренировкой
4. **Подсчет подъемов** - в режиме на время считаются выполненные подъемы
5. **Отсчет времени** - в режиме на количество отсчитывается время выполнения
6. **Кардиодатчик** - отображение показаний пульса в реальном времени через Bluetooth
7. **Печать отчетов** - вывод результатов тренировки на принтер
Приложение позволяет:
- Регистрировать участников тренировок
- Создавать и выбирать сценарии упражнений
- Проводить тренировки с автоматическим подсчётом подъёмов
- Отслеживать пульс через Bluetooth-кардиодатчик
- Просматривать статистику тренировок
## Технологии
## Режимы тренировок
- Kotlin
- Jetpack Compose
- Room Database
- WebSocket (OkHttp) для связи с ESP32
- Bluetooth LE для кардиодатчика
- Navigation Component
### Режим на время (TIME_BASED)
- Задаётся время выполнения упражнения в секундах
- Приложение считает количество выполненных подъёмов
- Норматив: минимальное количество подъёмов за заданное время
## Настройка
### Режим на количество (COUNT_BASED)
- Задаётся целевое количество подъёмов
- Приложение засекает время выполнения
- Норматив: максимальное время для выполнения заданного количества подъёмов
### WebSocket подключение к ESP32
## Технические требования
В файле `MainActivity.kt` измените URL WebSocket:
- Android 14 (API 34) или выше
- Bluetooth для подключения кардиодатчика
- WiFi для подключения к ESP32
```kotlin
val websocketUrl = "ws://192.168.1.100:81" // Замените на IP вашего ESP32
```
## Подключение к оборудованию
ESP32 должен отправлять сообщения в формате JSON:
### ESP32
Приложение подключается к ESP32 по TCP/IP. ESP32 должен отправлять JSON-сообщения с положением груза:
```json
{"position": "top"} // или "bottom"
{"position": "top"} // Груз вверху
{"position": "middle"} // Груз в движении
{"position": "bottom"} // Груз внизу
```
### Bluetooth кардиодатчик
Поддерживаемые значения `position`:
- `top`, `up` — верхнее положение
- `middle`, `moving`, `in_motion`, `motion` — груз в движении
- `bottom`, `down` — нижнее положение
Приложение автоматически сканирует и подключается к Bluetooth устройствам с Heart Rate Service (UUID: 0000180d-0000-1000-8000-00805f9b34fb).
### Кардиодатчик
Приложение поддерживает Bluetooth-кардиодатчики с протоколом Heart Rate Service (стандартный BLE профиль).
## Сборка проекта
### Требования
- Android Studio Ladybug (2024.2) или новее
- JDK 11
- Android SDK 36
### Шаги сборки
1. Клонируйте репозиторий:
```bash
git clone <url-репозитория>
cd AndroidStudioProjects
```
2. Откройте проект в Android Studio:
- File → Open → выберите папку проекта
3. Дождитесь синхронизации Gradle (происходит автоматически)
4. Соберите проект:
- Build → Make Project (Ctrl+F9)
## Установка на телефон
### Способ 1: Через Android Studio (рекомендуется для разработки)
1. Включите на телефоне **Режим разработчика**:
- Настройки → О телефоне → 7 раз нажмите на "Номер сборки"
2. Включите **Отладку по USB**:
- Настройки → Для разработчиков → Отладка по USB → Включить
3. Подключите телефон к компьютеру USB-кабелем
4. Разрешите отладку на телефоне (появится диалог при первом подключении)
5. В Android Studio выберите ваше устройство в выпадающем списке устройств (рядом с кнопкой Run)
6. Нажмите **Run** (Shift+F10) или зелёную кнопку ▶
### Способ 2: Установка APK-файла
1. Соберите релизный APK:
- Build → Build Bundle(s) / APK(s) → Build APK(s)
- APK будет в папке `app/build/outputs/apk/debug/`
2. Скопируйте APK на телефон любым способом:
- Через USB-кабель
- Через облачное хранилище
- Через мессенджер
3. На телефоне разрешите установку из неизвестных источников:
- Настройки → Безопасность → Неизвестные источники (или аналогичный пункт)
4. Откройте APK-файл на телефоне и установите
### Способ 3: Через ADB (командная строка)
1. Установите ADB (входит в Android SDK Platform Tools)
2. Подключите телефон с включённой отладкой по USB
3. Проверьте подключение:
```bash
adb devices
```
4. Установите APK:
```bash
adb install app/build/outputs/apk/debug/app-debug.apk
```
Или соберите и установите одной командой:
```bash
./gradlew installDebug
```
## Разрешения приложения
При первом запуске приложение запросит разрешения:
- Bluetooth
- Location (требуется для Bluetooth LE сканирования на Android 12+)
- **Bluetooth** — для подключения к кардиодатчику
- **Nearby Devices** — для сканирования Bluetooth-устройств
- **Internet/Network** — для подключения к ESP32
## Структура проекта
```
app/src/main/java/ru/kgeu/training/
├── bluetooth/ # Работа с Bluetooth (кардиодатчик)
├── data/
│ ├── dao/ # Data Access Objects для Room
│ ├── database/ # Room Database
│ ├── model/ # Модели данных
│ └── repository/ # Репозиторий для работы с данными
├── network/
│ └── WebSocketClient.kt # WebSocket клиент для ESP32
├── bluetooth/
│ └── HeartRateMonitor.kt # Bluetooth сервис для кардиодатчика
│ ├── dao/ # Data Access Objects для Room
│ ├── database/ # Конфигурация базы данных
│ ├── model/ # Модели данных (Participant, Scenario, Session)
│ └── repository/ # Репозиторий для работы с данными
├── network/ # TCP-клиент для ESP32
├── ui/
│ ├── navigation/ # Навигация
│ ├── screen/ # UI экраны
│ ├── theme/ # Тема приложения
│ └── viewmodel/ # ViewModels
── util/
└── PrintUtil.kt # Утилита для печати
│ ├── navigation/ # Навигация приложения
│ ├── screen/ # Экраны (Compose)
│ ├── theme/ # Тема приложения
│ └── viewmodel/ # ViewModels
── util/ # Вспомогательные утилиты
├── MainActivity.kt # Главная Activity
└── TrainingApplication.kt # Application класс
```
## Режимы упражнений
## Настройка подключения к ESP32
### Режим на время
- Устанавливается целевое время (в секундах)
- Считается количество выполненных подъемов
- Тренировка завершается по истечении времени
IP-адрес и порт ESP32 можно настроить в приложении перед началом тренировки.
### Режим на количество
- Устанавливается целевое количество подъемов
- Отсчитывается время выполнения
- Тренировка завершается при достижении цели
По умолчанию:
- Порт: 8080 (или настраиваемый)
- Протокол: TCP
## База данных
## Решение проблем
Приложение использует Room Database для хранения:
- Участников тренировок
- Сценариев упражнений (готовых и пользовательских)
- Сессий тренировок с результатами
### Не подключается к ESP32
1. Проверьте, что телефон и ESP32 в одной WiFi-сети
2. Проверьте правильность IP-адреса и порта
3. Убедитесь, что ESP32 запущен и слушает указанный порт
## Печать
### Не подключается кардиодатчик
1. Убедитесь, что Bluetooth включён на телефоне
2. Проверьте, что кардиодатчик активен и не подключён к другому устройству
3. Перезапустите кардиодатчик
Функция печати использует стандартную систему печати Android и поддерживает:
- Печать на принтеры через Wi-Fi
- Сохранение в PDF
- Отправку по email
### Приложение не устанавливается
1. Проверьте версию Android (требуется 14+)
2. Убедитесь, что разрешена установка из неизвестных источников
3. Удалите предыдущую версию приложения, если она установлена
## Требования
- Android 8.0 (API 26) или выше
- Поддержка Bluetooth LE
- Подключение к сети для WebSocket
## Разработка
Для сборки проекта используйте:
```bash
./gradlew assembleDebug
```
Для установки на устройство:
```bash
./gradlew installDebug
```
## Лицензия
Разработано для КГЭУ (Казанский государственный энергетический университет).