Join Nostr
2026-05-07 12:55:21 UTC

Andrey Esin on Nostr: Сегодня день Радио, поздравляю всех ...

Сегодня день Радио, поздравляю всех причастных :)

Жутко хочу освободить время и вкатиться в эту тему, это интереснейшее занятие (как мне видится со стороны)

Недавно решил поковырять RDS

Немного справки (для тех кто знает - пропускайте)
Если вы когда-нибудь видели на автомагнитоле название станции вроде ROCK FM, бегущую строку с текстом песни или автоматическую установку времени, значит вы уже пользовались RDS, просто не задумывались об этом

Через RDS станция может передавать:

PS - короткое имя станции
RT - радиотекст
PI - код станции
CT - время станции

Для исследовательского или радиолюбительского проекта это уже набор наблюдаемых цифровых признаков:

на какой частоте что реально вещает
как называется станция
какой у неё PI-код
передаёт ли она радиотекст
насколько корректно у неё выставлено RDS-время
как это всё меняется в разных местах

Что значит я сделал

rds.2big.cc - это веб-приложение для отображения таких наблюдений

Идея простая:

Устройство сканирует FM-диапазон
Ловит станции и читает RDS
Прикладывает к observation своё местоположение в виде QTH/Maidenhead
Отправляет observation в backend
Backend складывает всё в PostgreSQL
Frontend показывает локаторы на карте и даёт посмотреть последние приёмы и историю

Итог - получается живая карта наблюдений по локаторам, а не просто поток сырых логов
Почему здесь именно QTH/Maidenhead


Проект не использует точечные координаты как основной индекс отображения. Вместо этого observations группируются по Maidenhead-локаторам

Это даёт несколько практических преимуществ:

визуализация на карте остаётся простой
можно легко сравнивать районы, а не отдельные GPS-точки
locator хорошо знаком радиолюбителям
анонимность++


Как устроен сканер


Железная часть проекта - это устройство на ESP8266 + SI4703, которое последовательно сканирует FM-частоты и читает RDS

Что делает устройство:

проходит по диапазону FM
измеряет RSSI
ждёт стабилизации RDS-данных
собирает лучшие кандидаты для PI, PS, RT, CT
формирует observation
отправляет его в backend (mqtt/rest)

Вообще изначально была идея увидеть какие станции передают время и насколько оно точно отдаётся

Так же, была попытка запуститься на ESP32 + RDA5807M, но нет - похоже библиотека, которая работает с радио не очень хорошо обрабатывает RDS и часто получал пургу
Почему ESP8266 не использует отдельный GPS-модуль


Можно было бы поставить на сканер внешний GPS-модуль, но для такой задачи это часто избыточно:

лишняя плата
лишнее питание
лишняя антенна
лишняя сложность

Вместо этого проект использует компаньон на Android
Android-компаньон GPSCaster


ndroid-приложение на Kotlin. Оно работает как локальный GPS-ретранслятор для устройств в той же Wi-Fi сети

Что делает GPSCaster:

получает положение телефона через FusedLocationProviderClient
запускает foreground service
держит в памяти последний валидный fix
шлёт UDP broadcast в LAN
слушает UDP-запросы GET_GPS
шлёт GPS в BLE (тут кстати, отдельная идея - в принципе рассылать GPS через BLE advertisement)
отвечает пакетом:


GPS,<unix_timestamp_seconds>,<lat>,<lon>,<accuracy_meters>
Порт протокола: 45454

То есть телефон фактически выступает как "сетевой GPS и источник времени" для ESP8266

Это удобная идея:

телефон и так уже знает точные координаты
не нужно ставить отдельный GNSS-модуль на каждое устройство
можно быстро развернуть систему в машине или в полевых условиях


Как связаны ESP8266 и GPSCaster


Связка работает так:

GPSCaster периодически рассылает в локальную сеть UDP-пакеты с координатами и временем
ESP8266 слушает порт 45454
Если свежих GPS-данных нет, ESP8266 может сам отправить GET_GPS,<device_id>
GPSCaster отвечает текущим fix
ESP8266 получает:


время
latitude
longitude
accuracy



По координатам прошивка вычисляет qth
По времени ставит ts

Если GPS-время не удалось получить:

прошивка пробует NTP
если NTP тоже не дал времени, идёт локальный счётчик от последней успешной синхронизации

Это не полноценный GPS-ресивер, но для задачи сбора подобной информации, более чем подходит
Будет желание - заходите


Если будет интересно - заходите, будем вместе собирать данные - выложу исходники прошивки и протокол передачи данных

#проекты #деньрадио #esp8266 #rds