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

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

Недавно решил поковырять 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

    RDS Scanner Observations

    @stadtneurotikr Immahin homma de #fdp drin. Dann is sicha, dass jemand de #grünen bremsd. Gez.:#rds #csu

    Unfurl @ Noordspace - 19 Apr feat. RDS, robbin, Eversines

    #SESH #RDS #robbin #Eversines

    https://sesh.sx/e/1972079

    Unfurl | Noordspace | SESH

    ...

    SESH
    @Volksverpetzer Und? Des mocha mia a boid bei uns . Gez.: #rds #csu
    【小ネタ】RDS/AuroraのバックアップをAWS Backupで行う時の注意点 - Qiita

    はじめに ※本記事は2026年4月時点の仕様と検証結果に基づいています 記事をご覧頂きありがとうございます! RDS/Aurora のバックアップをRDS/Auroraの標準機能で行うのか、AWS Backupで行うかで悩むことがあると思います。その上で、AWS Back...

    Qiita

    The node can be used as an admin controller to deploy & monitor more nodes & clusters. For example, you can install these 6 OPTIONAL extra modules for advanced use cases:

    MinIO S3-compatible object storage service; used as an optional central backup server for PGSQL.

    Redis Deploy Redis servers in standalone master-replica, sentinel, and native cluster mode.

    Ferret Native support for FerretDB — adding MongoDB wire protocol compatibility to Postgres!

    Docker Launch optional docker daemons to run other stateless parts besides Pigsty RDS.

    Juice JuiceFS can mount S3/MinIO, and even PostgreSQL as a filesystem shared by multi users.

    Vibe Vibe coding environment with VS Code Server, JupyterLab, Node.js, and Claude Code.

    Of course, you can deploy different kinds of HA PostgreSQL clusters on multiple nodes, as much as you want.

    #minio #redis #ferret #docker #juicefs #postgres #rds #citus #patroni

    @diebayern So gäd des bei uns in Bayern. Gez.: #rds csu
    @stadtneurotikr Do schauma erschdamal. Gez.: #rds #csu
    @nolympia_muenchen Wos a guade Idee is, sog in Bayern immer no i. #rds #csu