Skip to content

Repository files navigation

LBJ Receiver - 列车接近预警接收设备

基于 ESP32 的 TB/T 3504-2018 POCSAG 接收机


项目简介

LBJ Receiver 是一个嵌入式 POCSAG 信号接收设备, 用于接收和解码中国铁路列车接近预警(LBJ)信息. 设备通过 SX1278 射频模块在 821.2375 MHz 频率上接收 FSK 调制的 POCSAG 信号, 解码列车车次、速度、公里标、机车类型、线路名称、GPS 坐标等信息, 并通过 OLED 显示屏、BLE、WiFi Web 界面和 SD 卡日志等多渠道输出.

主要功能

  • POCSAG 信号接收 - SX1278 FSK 直接模式, 1200bps, 4.5kHz 频偏
  • BCH 纠错 - BCH(31,21) + 偶校验, 可纠正 2 位错误
  • LBJ 消息解码 - 基本预警(地址 1234000), 扩展信息(地址 1234002), 时钟校准(地址 1234008)
  • FFSK 报警解码 - 道口报警/解除, 施工防护/解除 (TB/T 3504-2018 第 9.2 节)
  • 自动频率校正(AFC) - 基于 SX1278 FEI 寄存器的实时频率跟踪
  • OLED 显示 - SSD1306 128x64 I2C, 显示列车信息、信号质量、连接状态
  • BLE 推送 - GATT 服务器实时推送 JSON 数据到移动设备
  • WiFi 配置界面 - 暗色主题响应式单页应用, 支持所有参数在线配置
  • SD 卡日志 - NDJSON 格式, 支持 LBJ 数据和 FFSK 报警
  • GBK 编码转换 - 铁路常用汉字查找表, 二分搜索
  • 机车类型查询 - 200+ 条目覆盖蒸汽/内燃/电力/动车

硬件需求

组件 型号 说明
MCU ESP32 (TTGO LoRa32 V1) 内置 WiFi/BLE
射频模块 SX1278 LoRa 芯片, FSK 模式运行
显示屏 SSD1306 128x64 OLED I2C 接口
存储 MicroSD 卡 SPI 模式 (可选)

引脚定义

功能 GPIO 说明
RADIO_SCK 5 SPI 时钟
RADIO_MISO 19 SPI 主入从出
RADIO_MOSI 27 SPI 主出从入
RADIO_CS 18 SPI 片选
RADIO_DIO0 26 射频中断
RADIO_RST 14 射频复位
RADIO_DIO2 32 FSK 直接模式数据输出
I2C_SDA 4 OLED I2C 数据
I2C_SCL 15 OLED I2C 时钟
SD_CS 13 SD 卡片选
LED_PIN 25 板载 LED

软件依赖

版本 用途
RadioLib ^6.3.0 SX1278 射频驱动 (实际安装 6.6.0)
U8g2 ^2.35.6 OLED 显示驱动
ArduinoJson ^7.0.4 JSON 序列化/反序列化
ESPAsyncWebServer ^1.2.4 异步 Web 服务器
AsyncTCP ^1.1.1 异步 TCP 库
NimBLE-Arduino ^2.2.0 BLE GATT 服务器 (实际安装 2.5.0, 使用 NimBLE API)
ESP32AnalogRead ^0.2.1 模拟量读取

编译与烧录

# 编译
pio run -e ttgo-lora32-v1

# 编译并烧录
pio run -t upload

# 串口监视器 (115200 baud)
pio device monitor

# 上传 SPIFFS 文件系统
pio run -t uploadfs

配置

Web 界面

设备启动后, 通过以下地址访问配置界面:

  • STA 模式: http://<设备IP>
  • AP 模式: http://192.168.4.1 (热点名: LBJ-Config-XXXX)

可配置参数

参数 默认值 说明
target_frequency 821.2375 MHz 接收频率 (821-832 或 400-470 MHz)
initial_ppm 6.0 初始频率偏差 (PPM)
afc_enabled true 自动频率校正开关
bch_enabled true BCH 纠错开关
ble_enabled true BLE 功能开关
ntp_server ntp.ntsc.ac.cn NTP 时间同步服务器
wifi_networks [] WiFi 网络列表 (最多 5 个, 按优先级排序)

协议详情

POCSAG (TB/T 3504-2018 第 9.1 节)

  • 同步码字: 0x7CD215D8
  • 空闲码字: 0x7A89C197
  • 每批 8 帧, 每帧 2 个码字
  • 地址 = 码字 bit[30:13] << 3 | 帧号 (0-7)
  • 消息编码: BCD (4 位/符号, 含 bit-reflection)
  • FEC: BCH(31,21) + 偶校验

LBJ 地址

地址 类型 内容
1234000 列车接近预警 车次、速度、公里标
1234002 扩展信息 机车类型、线路名称、GPS 坐标
1234008 时钟校准 HHMM 时间

FFSK 报警 (TB/T 3504-2018 第 9.2 节)

  • 调制: FFSK, 1200Hz=1, 1800Hz=0, 1200bps
  • FEC: 缩短循环码 (26,16)
  • 校验: CRC-16 (CCITT)
  • 类型: 0x03=道口报警, 0x04=道口解除, 0x05=施工防护, 0x06=施工解除

目录结构

├── src/                         # 应用源码
│   ├── main.cpp                # 入口, 主循环
│   ├── hal.hpp                 # 硬件抽象接口
│   ├── hal_esp32.hpp/cpp       # ESP32 射频驱动 (SX1278 FSK 直接模式)
│   ├── config.hpp/cpp          # 配置管理 (SPIFFS + JSON)
│   ├── data_types.hpp          # 协议常量和数据结构
│   ├── bch_correction.hpp/cpp  # BCH(31,21) 纠错封装
│   ├── pocsag_framer.hpp/cpp   # POCSAG 帧解析状态机
│   ├── pocsag_decoder.hpp/cpp  # POCSAG 码字流解码器
│   ├── lbj_decoder.hpp/cpp     # LBJ 消息解码器
│   ├── ffsk_decoder.hpp/cpp    # FFSK 报警信道解码器
│   ├── afc_controller.hpp/cpp  # 自动频率校正
│   ├── display_service.hpp/cpp # OLED 显示管理
│   ├── network_service.hpp/cpp # WiFi 网络管理
│   ├── ble_service.hpp/cpp     # BLE GATT 服务器
│   ├── web_config_service.hpp/cpp # WiFi Web 配置界面
│   ├── sd_logger.hpp/cpp       # SD 卡 NDJSON 日志
│   ├── output_manager.hpp/cpp  # 输出调度 (串口, SD)
│   ├── gbk_converter.hpp/cpp   # GBK 到 UTF-8 转换
│   ├── loco_table.hpp          # 机车类型查找表
│   └── time_utils.hpp/cpp      # NTP 和时间格式化
├── lib/
│   └── libbch_pocsag/          # BCH(31,21) C 语言库
│       ├── bch.h
│       └── bch.c
├── platformio.ini              # PlatformIO 构建配置
├── ARCHITECTURE.md             # 系统架构文档
└── README.md                   # 本文件

架构概览

射频信号 → SX1278 → DIO2 ISR → 码字队列 → BCH纠错 → POCSAG帧解析 → LBJ解码 → 输出分发
                                                        ↘ FFSK解码 → 输出分发

输出通道: 串口 | SD卡日志 | OLED显示 | BLE推送 | WiFi WebUI(SSE)

详细架构设计请参考 ARCHITECTURE.md.

参考

  • TB/T 3504-2018 列车接近预警系统技术条件
  • POCSAG 协议 (CCIR 推荐书 584)
  • BCH(31,21) 实现: Phil Pemberton 的 Meggitt 译码器

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages