基于 STM32 的公交车定位与报站系统

基于 STM32 的公交车定位与报站系统设计

公共交通服务的智能化要求车辆具备精准的定位与语音报站能力。本文设计一种基于 STM32F103C8T6 单片机的公交车定位与报站系统,整合 ATGM336H GPS 模块、OLED12864 显示、JR6001 语音播报、按键阵列与 ESP8266 远程通信模块,实现到站触发语音播报、动态显示站点名称与距离并把车辆位置上传至 APP。

一、系统功能总览

功能编号 功能名称 说明
F1 GPS 定位 ATGM336H 接收 GPS / 北斗
F2 站点触发 按键切换站点
F3 距离计算 与下一站点经纬度比较
F4 语音播报 JR6001 播报到站信息
F5 显示输出 OLED 显示距离与站名
F6 远程监控 ESP8266 + APP
F7 报警功能 按键报警并上传
F8 站点编辑 通过 APP 配置线路站点

二、核心模块选型对比

2.1 主控模块选型

方案 型号 备注
方案 1 STM32F103C8T6 多 USART + I2C 满足多模块
方案 2 51 单片机 资源紧张

选择方案 1:GPS 模块与语音模块都需要 UART。

2.2 GPS 模块选型

方案 型号 卫星系统
方案 1 ATGM336H GPS + 北斗
方案 2 NEO-6M GPS

选择方案 1:国内北斗支持更佳。

2.3 语音播报模块选型

方案 型号 升级方式
方案 1 JR6001 USB 直接拷贝语音
方案 2 AB1000 蓝牙升级

选择方案 1:USB 升级方案便于运维。

2.4 显示模块选型

方案 模块 备注
方案 1 OLED12864 显示站点与距离
方案 2 LCD12864 字符显示

选择方案 1:响应快,对比度高。

2.5 无线模块选型

方案 模块 优势
方案 1 ESP8266 直连 Wi-Fi / 4G 路由
方案 2 SIM800 4G 蜂窝

选择方案 1:便于室内测试。

三、系统接线总表

模块 引脚 单片机端 备注
ATGM336H VCC/GND/TX/RX 3.3 V / GND / PA10 / PA9 UART 9600
OLED12864 VCC/GND/SCL/SDA 3.3 V / GND / PB6 / PB7 I2C
JR6001 VCC/GND/TX/RX/BUSY 5 V / GND / PA3 / PA2 / PA4 UART
按键 ×4 一端/另一端 PB0/PB1/PB2/PB3 / GND 站点切换 / 报警
ESP8266 VCC/GND/TX/RX/CH_PD 3.3 V / GND / PA5 / PA6 / 3.3 V UART

四、系统软件设计

4.1 主程序流程

复制代码
int main(void)
{
    SystemInit();
    GPS_Init();
    OLED_Init();
    JR6001_Init();
    ESP8266_Init();
    ESP8266_JoinAP("bus","pwd");

    while (1)
    {
        NMEA_Data gps = GPS_Parse();
        float dist = Haversine(gps, NextStop_LatLon());
        OLED_Show(gps, dist, NextStop_Name());

        if (Key_SitePressed() || dist < 30)
        {
            JR6001_PlayIndex(cur_site_id);
            cur_site_id++;
        }
        if (Key_AlarmPressed()) JR6001_PlayAlarm();
        ESP8266_Publish(gps, dist, cur_site_id);
        delay_ms(500);
    }
}

4.2 GPS 解析

UART 接收 $GPGGA 语句后提取经纬度,并将字符串转换为浮点数。

4.3 距离计算(Haversine)

复制代码
double Haversine(double lat1, double lon1, double lat2, double lon2)
{
    double R = 6371000.0;
    double dLat = (lat2 - lat1) * M_PI / 180;
    double dLon = (lon2 - lon1) * M_PI / 180;
    double a = sin(dLat/2) * sin(dLat/2)
             + cos(lat1 * M_PI/180) * cos(lat2 * M_PI/180)
             * sin(dLon/2) * sin(dLon/2);
    return 2 * R * asin(sqrt(a));
}

4.4 JR6001 语音播放

通过 UART 发送 0xAA 0x07 0x02 0x00 0xxx 0xBB 协议,其中 0xxx 为语音编号。

4.5 远程上报

ESP8266 通过 MQTT 把 gps_latgps_lngdistance_to_nextcur_site_id 推送给云端,APP 拉取渲染。

五、系统实现与测试

5.1 硬件焊接与测试

GPS 天线朝上固定于车顶,避免金属屏蔽;JR6001 音频输出接车载喇叭。

5.2 软件调试

Keil 5 + ST-Link,结合串口助手观察 GPS 报文与 JR6001 返回的 ACK。

5.3 功能测试结果

测试项目 操作 结果
GPS 室外定位 开阔街道 误差 ≤ 5 m
距离计算 实地模拟两个站点 偏差 ≤ 10 m
语音播报 触发到站按键 1 s 内播放
APP 同步 网页端查看 实时刷新

六、总结

本文围绕 STM32F103C8T6 设计的公交车定位与报站系统整合了 GPS 定位、OLED 显示、JR6001 语音播报与 ESP8266 远程通信,实现了实时站点信息显示、自动语音播报以及云端车辆位置同步。整套方案结构清晰、易于扩展,可为城市公交、长途客运与校园通勤线路提供一套可量产的智能化原型设计。

七、资料内容完整工程资料(原理图、PCB、代码、元件清单)

八、资料获取方式

相关推荐
祖力551 小时前
快速学会51单片机基础
单片机·嵌入式硬件·51单片机
H_oRIZoN_2 小时前
Linux入门DAY41(51 单片机 串口与通信协议)
linux·运维·单片机
jianqiang.xue3 小时前
ESP-IDF保姆级入门41|产品级故障排查与稳定性优化全解:死机复位排查/内存泄漏定位/性能瓶颈分析/长期稳定性测试,掌握量产运维问题定位方法论
单片机·mcu·物联网·esp32
单片机仿真设计4 小时前
【proteus仿真】基于 STM32 的林区环境监控系统设计
stm32·单片机·proteus
Doraemomo5 小时前
IMX6ULL裸机开发——GPIO的使用
单片机·嵌入式硬件
笨笨饿5 小时前
#138_解决Codex要五次回复的问题
linux·stm32·单片机·嵌入式硬件·mcu·物联网·嵌入式实时数据库
晊晌_h6 小时前
嵌入式从0到精通——51单片机(二)
嵌入式硬件·51单片机
云泽8086 小时前
STM32 USART 详解(七):超时设置、非阻塞发送与 ReadLine 实现
stm32·单片机·嵌入式硬件
2401_862880827 小时前
UART 通信协议
单片机·51单片机