Files
LoraTestSystemRX_TX/README.md
2026-01-17 09:53:08 +02:00

5.9 KiB
Raw Blame History

LoRa генератор сигналів (TX/RX)

Цей workspace містить дві окремі прошивки ESP-IDF для ESP32 з LR1121 по SPI, I2C OLED та 5-позиційним джойстиком:

  • apps/tx — передавач.
  • apps/rx — приймач.

Спільні драйвери та утиліти лежать у components/.

Структура

components/
  common/        # базова інформація про чип, роль
  input/         # джойстик через ADC (резистивний дільник)
  lora_radio/    # LR1121 (SPI, busy/dio1), налаштування пінів через Kconfig
  ui/            # I2C OLED (за замовчуванням SSD1306 128x64)
apps/
  tx/            # прошивка передавача + sdkconfig.defaults
  rx/            # прошивка приймача + sdkconfig.defaults

Збірка

Вкажіть потрібний застосунок через -C, окремі build-директорії краще розділяти:

  • Передавач: idf.py -C apps/tx -B build-tx -DSDKCONFIG_DEFAULTS=sdkconfig.defaults build
  • Приймач: idf.py -C apps/rx -B build-rx -DSDKCONFIG_DEFAULTS=sdkconfig.defaults build

Налаштування

  • Піни LR1121 (SPI CS/MOSI/MISO/SCK, BUSY, DIO1, RST) та радіо-параметри налаштовуються в apps/*/sdkconfig.defaults (Kconfig у components/lora_radio). BUSY має бути підключений; дозволяється ставити -1 на RST/DIO1 (немає лінії), але без RST складніше відновлюватись після зависань, без DIO1 — робота тільки через опитування статусу.
  • Роль пристрою визначається CONFIG_LORA_ROLE_TX / CONFIG_LORA_ROLE_RX (див. components/common/Kconfig).
  • OLED: виберіть I2C порт/адресу/пін SDA/SCL/RST та розмір дисплея через components/ui/Kconfig (дефолт — SSD1306 128x64, addr 0x3C).
  • Джойстик: один ADC канал з резистивним дільником на кожну кнопку. Вкажіть канал та очікувані рівні АЦП (CONFIG_JOYSTICK_ADC_LEVEL_*) і допуск (CONFIG_JOYSTICK_ADC_TOLERANCE).

Екрани та керування (OLED + джойстик)

Джойстик: LEFT/RIGHT — перемикання екранів, UP/DOWN — змінити поточне значення, CENTER — підтвердити/оновити (або toggle на деяких екранах).

RX

  • FREQ: робоча частота (крок 1МГц) у межах вибраного band. CENTER просто повторно застосовує параметри.
  • BAND: вибір діапазону (430, 868, 915МГц; Lband 1.5251.660 ГГц; Sband 1.92.1 ГГц; 2.4 ГГц ISM 24002483.5 МГц). FREQ клампиться всередині band.
  • BANDW: смуга (BW) 125/250/500кГц.
  • SPREAD: LoRa SF 5…12.
  • CODERATE: LoRa CR 4/5…4/8.
  • PAYLOAD: відображає останній прийнятий пакет (ASCII до 31 символа), нижче завжди показані метрики SNR/RSSI/статус.
  • BOOT: перезавантаження в ROM bootloader (USB CDC/JTAG) для прошивки. CENTER запускає перезавантаження; підключіть USB і запускайте флешер.

TX

  • FREQ: робоча частота (крок 1МГц) у межах вибраного band.
  • BAND: діапазони як у RX (430/868/915/L/S/2.4G), FREQ клампиться всередині band.
  • BANDW: смуга (BW) 125/250/500кГц.
  • SPREAD: LoRa SF 5…12.
  • CODERATE: LoRa CR 4/5…4/8.
  • POWER: вихідна потужність у dBm. Ліміт суб‑ГГц до +22dBm, для HF (L/S/2.4 ГГц) до ~+13dBm, мінімум 17dBm.
  • PAYLOAD: вибір фрази для передачі з готового списку PING 1PING 10 (UP/DOWN гортає).
  • PERIOD: період автопередачі в мс (100…60000, крок 100).
  • TX: enable/disable автопередачу (UP=ON, DOWN=OFF, CENTER=tgl).
  • BOOT: перезавантаження в ROM bootloader (USB CDC/JTAG) для прошивки. CENTER запускає перезавантаження; підключіть USB і запускайте флешер.

У кожному екрані нижні рядки відображають SNR/RSSI/стан IRQ з радіо. Застосування параметрів відбувається одразу після зміни (через lora_radio_apply_params).

USB JSON API

  • Працює через USB Serial/JTAG (CDC ACM). Читайте/пишіть рядки UTF-8 із завершенням \n.
  • Команди:
    • {"cmd":"get_status"} — повертає JSON зі статусом/параметрами.
    • {"cmd":"set_params","params":{"band":"430","freq_mhz":433,"bw_khz":125,"sf":7,"cr":5,"tx_power_dbm":14,"period_ms":1000,"tx_enabled":true,"payload":"PING 1"}} — застосувати параметри (RX ігнорує TX-поля).
    • {"cmd":"reboot_bootloader"} — перезавантаження в ROM bootloader.
  • Відповідь status для TX: role, freq_mhz, bw_khz, sf, cr, band, tx_power_dbm, period_ms, tx_enabled, snr_db, rssi_dbm, last_status. Для RX додається payload (останній прийнятий пакет).
  • Готовий GUI-клієнт: py_app/ (PyQt6), відправляє set_params одразу після зміни полів.

збірка IDF_TARGET=esp32s3 idf.py -C apps/tx -B build-tx -DSDKCONFIG_DEFAULTS=sdkconfig.defaults build