Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 57 additions & 0 deletions .github/workflows/esp32-radio-gateway.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: ESP32 radio gateway firmware

on:
push:
branches:
- main
paths:
- "firmware/radio_gateway_esp32/**"
- ".github/workflows/esp32-radio-gateway.yml"
pull_request:
branches:
- main
paths:
- "firmware/radio_gateway_esp32/**"
- ".github/workflows/esp32-radio-gateway.yml"
workflow_dispatch:

jobs:
build:
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"

- name: Install PlatformIO
run: python -m pip install --upgrade platformio

- name: Compile ESP32 radio gateway
run: pio run -d firmware/radio_gateway_esp32

- name: Prepare firmware artifact
shell: bash
run: |
mkdir -p firmware-artifact
cp firmware/radio_gateway_esp32/.pio/build/esp32dev/firmware.bin firmware-artifact/openmcc-radio-gateway-firmware.bin
cp firmware/radio_gateway_esp32/.pio/build/esp32dev/bootloader.bin firmware-artifact/openmcc-radio-gateway-bootloader.bin
cp firmware/radio_gateway_esp32/.pio/build/esp32dev/partitions.bin firmware-artifact/openmcc-radio-gateway-partitions.bin
cat > firmware-artifact/flash-layout.txt <<'EOF'
ESP32-WROOM-32 / esp32dev flash layout
0x1000 openmcc-radio-gateway-bootloader.bin
0x8000 openmcc-radio-gateway-partitions.bin
0x10000 openmcc-radio-gateway-firmware.bin
EOF

- name: Upload compiled firmware
uses: actions/upload-artifact@v4
with:
name: OpenMCC-ESP32-Radio-Gateway
path: firmware-artifact/*
if-no-files-found: error
retention-days: 30
18 changes: 16 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,26 @@
# Changelog

## Radio gateway firmware v0.1.0

- добавлен отдельный PlatformIO-проект `firmware/radio_gateway_esp32` для ESP32-WROOM-32;
- одна прошивка поддерживает альтернативные радиомодули CC1101 и E32-433T30D;
- реализовано применение команд `$CMD,RADIO,...` из существующего RF-интерфейса OpenMCC;
- реализован `RADIO_STATUS`, `GATEWAY_INFO`, `GATEWAY_PING` и `RADIO_OFF`;
- остальные `$CMD,...` автоматически пересылаются в эфир как команды МКА;
- входящие `$TEL/$ACK/$ERR/$INFO` передаются из радиоканала в OpenMCC без изменения;
- для CC1101 реализованы настройка RF, CRC, CCA, RX/TX и выдача RSSI/LQI;
- для E32 реализована запись конфигурации через UART/M0/M1/AUX и прозрачная передача;
- последняя RF-конфигурация сохраняется в NVS ESP32;
- добавлена отдельная GitHub Actions сборка прошивки и готовых `.bin`;
- CI-компиляция прошивки успешно пройдена; физические испытания радиомодулей ещё не выполнены.

## v0.3.0 — Radio controls, command presets and CubeSat model

- добавлена раскрывающаяся схема подключения CC1101 к ESP32-WROOM-32;
- добавлена раскрывающаяся схема подключения E32-433T30D к ESP32-WROOM-32;
- добавлена настройка частоты, мощности и параметров радиоканала прямо из OpenMCC;
- RF-настройки сохраняются локально и формируют будущую команду `$CMD,RADIO,...` для ESP32-шлюза;
- добавлен запрос `RADIO_STATUS` для будущей прошивки радиошлюза;
- RF-настройки сохраняются локально и формируют команду `$CMD,RADIO,...` для ESP32-шлюза;
- добавлен запрос `RADIO_STATUS`;
- добавлен список готовых безопасных команд с пояснениями;
- 3D-модель переработана в более реалистичный 2U CubeSat с фиксированными солнечными панелями;
- удалена условная одиночная штыревая антенна, добавлена раскрытая рулеточная дипольная антенна с двумя противоположными плечами;
Expand Down
78 changes: 49 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,17 @@ OpenMCC можно запускать двумя способами:
- автоматическая сборка установщика через GitHub Actions;
- интерфейс выбора CC1101 или E32-433T30D;
- раскрывающиеся таблицы подключения радиомодулей к ESP32-WROOM-32;
- настройка RF-параметров в интерфейсе с локальным сохранением и формированием команды для будущего ESP32-шлюза;
- готовые примеры безопасных команд в центре команд.
- настройка RF-параметров в интерфейсе;
- готовые примеры команд в центре команд;
- прошивка наземного радиошлюза `ESP32-WROOM-32` для CC1101 и E32-433T30D;
- автоматическая CI-сборка готовых `.bin` прошивки шлюза.

## Что пока не реализовано полностью

- реальная прошивка радиошлюза ESP32-WROOM-32;
- драйвер CC1101 в ESP32;
- драйвер E32-433T30D в ESP32;
- фактическое применение RF-настроек на радиомодуле;
- единый пакетный протокол радиоканала с CRC/подтверждениями;
- аппаратная проверка прошивки шлюза с реальным CC1101/E32;
- бортовая часть радиоканала на МКА;
- расширенный радиопакет с собственным номером пакета/ACK/повторами поверх возможностей модулей;
- встроенная прошивка ESP32 непосредственно из окна OpenMCC;
- TLE/SGP4;
- карта орбиты и радиогоризонт;
- автоматическое сопровождение спутника;
Expand Down Expand Up @@ -90,16 +91,25 @@ examples/arduino_avr_demo/OpenMCC_Arduino_AVR/OpenMCC_Arduino_AVR.ino

## Радиоканал

Наземный шлюз планируется на `ESP32-WROOM-32`.
Наземный шлюз реализован на `ESP32-WROOM-32` как отдельный PlatformIO-проект:

В панели **«Радиоканал ЦУПа»** можно выбрать:
```text
firmware/radio_gateway_esp32/
```

Одна прошивка поддерживает альтернативные варианты:

- `CC1101` — SPI;
- `E32-433T30D` — UART.

После выбора OpenMCC показывает рекомендуемое подключение, питание и параметры радиотракта. Подробно: `docs/RADIO_CONTROL_UI.md`.
После выбора OpenMCC показывает рекомендуемое подключение, питание и параметры радиотракта. Кнопка **«Сохранить / передать в шлюз»** формирует `$CMD,RADIO,...`; прошивка ESP32 принимает эту команду, применяет параметры к выбранному модулю и сохраняет их в NVS. Любые остальные `$CMD,...` пересылаются в радиоканал как команды МКА, а принятые `$TEL/$ACK/$ERR/$INFO` возвращаются в OpenMCC.

Подробно:

- `docs/RADIO_CONTROL_UI.md` — интерфейс RF-настроек;
- `firmware/radio_gateway_esp32/README.md` — прошивка, подключение и протокол шлюза.

До появления прошивки ESP32 кнопка **«Сохранить / передать в шлюз»** всегда сохраняет конфигурацию локально. Если ESP32 подключена, интерфейс дополнительно отправляет команду `$CMD,RADIO,...`; фактическое изменение настроек радиомодуля зависит от будущей прошивки шлюза.
Статус: код прошивки успешно компилируется в GitHub Actions; физические испытания ожидают появления конкретного радиомодуля.

## Архитектура

Expand All @@ -120,7 +130,7 @@ examples/arduino_avr_demo/OpenMCC_Arduino_AVR/OpenMCC_Arduino_AVR.ino
МКА
```

Пока радиошлюз не реализован, основное USB-соединение можно использовать напрямую с демонстрационной Arduino.
Пока физический радиостенд не собран, основное USB-соединение по-прежнему можно проверять напрямую с демонстрационной Arduino.

## Документация

Expand All @@ -130,27 +140,29 @@ examples/arduino_avr_demo/OpenMCC_Arduino_AVR/OpenMCC_Arduino_AVR.ino
- `docs/RADIO_LINK.md` — план двустороннего радиоканала CC1101 / E32;
- `docs/RADIO_CONTROL_UI.md` — подключение и управление радиомодулями из OpenMCC;
- `docs/DESKTOP_APP.md` — сборка, установка и публикация Windows-приложения;
- `firmware/radio_gateway_esp32/README.md` — наземный ESP32-радиошлюз;
- `CHANGELOG.md` — история заметных изменений.

## Основные модули

```text
index.html интерфейс OpenMCC
css/style.css базовые стили
css/layout.css адаптивная компоновка
css/panels.css оформление панелей
css/widgets.css общие элементы управления
css/radio-controls.css RF-настройки и готовые команды v0.3
js/parser.js разбор входящих пакетов
js/logger.js журналирование
js/serial.js основное последовательное соединение
js/ui.js команды аппарату
js/charts.js графики Chart.js
js/rotator.js отдельное соединение с повороткой
js/satellite.js 3D-модель 2U CubeSat
js/help.js подсказки, RF UI и готовые команды
desktop/main.cjs Electron-host и Serial для desktop-версии
package.json конфигурация desktop-сборки
index.html интерфейс OpenMCC
css/style.css базовые стили
css/layout.css адаптивная компоновка
css/panels.css оформление панелей
css/widgets.css общие элементы управления
css/radio-controls.css RF-настройки и готовые команды v0.3
js/parser.js разбор входящих пакетов
js/logger.js журналирование
js/serial.js основное последовательное соединение
js/ui.js команды аппарату
js/charts.js графики Chart.js
js/rotator.js отдельное соединение с повороткой
js/satellite.js 3D-модель 2U CubeSat
js/help.js подсказки, RF UI и готовые команды
desktop/main.cjs Electron-host и Serial для desktop-версии
firmware/radio_gateway_esp32/ прошивка ESP32-WROOM-32 радиошлюза
package.json конфигурация desktop-сборки
```

## Сборка Windows-установщика для разработчика
Expand All @@ -164,6 +176,14 @@ npm run dist:win

GitHub Actions собирает установщик автоматически. После изменения версии `package.json` и слияния в `main` workflow может создать новый GitHub Release с установщиком соответствующей версии.

## Сборка прошивки ESP32

```bash
pio run -d firmware/radio_gateway_esp32
```

Или используйте артефакт workflow **ESP32 radio gateway firmware** на GitHub.

## Важный принцип проекта

OpenMCC должен оставаться независимым от конкретного радиомодуля. CC1101 и E32-433T30D скрываются за ESP32-WROOM-32, а интерфейс телеметрии и команд остаётся единым.
OpenMCC остаётся независимым от конкретного радиомодуля. CC1101 и E32-433T30D скрываются за ESP32-WROOM-32, а интерфейс телеметрии и команд остаётся единым.
31 changes: 15 additions & 16 deletions docs/PROJECT_STATUS.md
Original file line number Diff line number Diff line change
@@ -1,27 +1,33 @@
# OpenMCC — статус проекта

Обновлено для интерфейса v0.2.
Обновлено после реализации наземного радиошлюза ESP32 v0.1.

## Готово и уже работало

| Узел | Статус | Примечание |
|---|---|---|
| Базовый веб-интерфейс | ✅ Готово | Локальная работа через `localhost` |
| Web Serial | ✅ Готово | Arduino / STM32 / ESP32 |
| Базовый веб-интерфейс | ✅ Готово | Локальная работа через `localhost` и desktop-приложение |
| Web Serial / desktop Serial | ✅ Готово | Arduino / STM32 / ESP32 |
| Парсер телеметрии | ✅ Готово | `$TEL`, JSON, простые `KEY=VALUE` |
| Команды | ✅ Готово | `$CMD,...` |
| ACK/ERR/INFO | ✅ Готово | Обрабатываются отдельно от телеметрии |
| Журнал | ✅ Готово | Локальное журналирование событий |
| Chart.js | ✅ Готово | TEMP/VOLT/CURR/RSSI/SNR |
| 3D CubeSat | ✅ Готово | Three.js, OrbitControls |
| 3D CubeSat | ✅ Готово | Three.js, 2U, рулеточная дипольная антенна |
| Поворотка — интерфейс | ✅ Готово | AZ/EL, STOP, HOME, PARK, STATUS |
| Поворотка — симулятор | ✅ Готово | Проверялся без механики |
| Arduino Uno demo | ✅ Готово | Генерирует телеметрию и принимает команды |
| RF-панель OpenMCC | ✅ Готово | CC1101 / E32, подключение и параметры |
| ESP32 radio gateway — исходный код | ✅ Готово | Единая прошивка CC1101/E32 |
| ESP32 radio gateway — CI | ✅ Готово | PlatformIO успешно собирает `.bin` |

## Подготовлено, но не проверено на железе

| Узел | Статус | Что требуется |
|---|---|---|
| ESP32-WROOM-32 radio gateway | 🟡 Software-ready | Прошить реальную плату и проверить USB-протокол |
| CC1101 driver | 🟡 Software-ready | Подключить фактический модуль и проверить TX/RX/RSSI/LQI |
| E32-433T30D driver | 🟡 Software-ready | Подключить фактический модуль, AUX и питание, проверить TX/RX |
| SatNOGS Rotator v3 | 🟡 Ожидает сборки | Собрать механику |
| Arduino Uno + CNC Shield | 🟡 Ожидает проверки | Подключить драйверы, концевики, NEMA17 |
| Прошивка поворотки | 🟡 Ожидает проверки | Калибровка шагов/градус и направлений |
Expand All @@ -30,11 +36,9 @@

| Узел | Статус | Приоритет |
|---|---|---|
| ESP32-WROOM-32 radio gateway | ⬜ Не сделано | Высокий |
| CC1101 driver | ⬜ Не сделано | После закупки |
| E32-433T30D driver | ⬜ Не сделано | После закупки |
| Радиопакет с CRC/ACK | ⬜ Не сделано | Высокий |
| Встроенная прошивка ESP32 из OpenMCC | ⬜ Следующий этап | Высокий |
| Бортовая часть радиоканала | ⬜ Не сделано | Высокий |
| Расширенный пакетный протокол с sequence/ACK/retry | ⬜ Не сделано | После первого RF-стенда |
| TLE | ⬜ Не сделано | Средний |
| SGP4 | ⬜ Не сделано | Средний |
| Карта орбиты | ⬜ Не сделано | Средний |
Expand All @@ -43,13 +47,8 @@

## Следующий разумный этап

**ESP32-WROOM-32 → радиошлюз OpenMCC.**
**Прошивка ESP32 непосредственно из OpenMCC.**

После закупки радиомодуля реализовать один из драйверов:
Подготовить встроенный flasher для `ESP32-WROOM-32`, использующий заранее собранные `.bin`, чтобы оператору не требовались Arduino IDE или PlatformIO. После этого достаточно будет подключить ESP32 по USB, открыть раздел прошивки и нажать кнопку запуска.

```text
CC1101 → SPI
E32-433T30D → UART
```

Внешний протокол OpenMCC при этом оставить одинаковым.
После появления реального CC1101 или E32 необходимо провести аппаратную проверку соответствующего драйвера. До этого нельзя считать радиотракт проверенным, даже несмотря на успешную CI-компиляцию прошивки.
Loading
Loading