
基于 STM32 的公交车定位与报站系统设计一、系统功能总览二、核心模块选型对比2.1 主控模块选型2.2 GPS 模块选型2.3 语音播报模块选型2.4 显示模块选型2.5 无线模块选型三、系统接线总表四、系统软件设计4.1 主程序流程4.2 GPS 解析4.3 距离计算Haversine4.4 JR6001 语音播放4.5 远程上报五、系统实现与测试5.1 硬件焊接与测试5.2 软件调试5.3 功能测试结果六、总结基于 STM32 的公交车定位与报站系统设计公共交通服务的智能化要求车辆具备精准的定位与语音报站能力。本文设计一种基于 STM32F103C8T6 单片机的公交车定位与报站系统整合 ATGM336H GPS 模块、OLED12864 显示、JR6001 语音播报、按键阵列与 ESP8266 远程通信模块实现到站触发语音播报、动态显示站点名称与距离并把车辆位置上传至 APP。一、系统功能总览功能编号功能名称说明F1GPS 定位ATGM336H 接收 GPS / 北斗F2站点触发按键切换站点F3距离计算与下一站点经纬度比较F4语音播报JR6001 播报到站信息F5显示输出OLED 显示距离与站名F6远程监控ESP8266 APPF7报警功能按键报警并上传F8站点编辑通过 APP 配置线路站点二、核心模块选型对比2.1 主控模块选型方案型号备注方案 1STM32F103C8T6多 USART I2C 满足多模块方案 251 单片机资源紧张选择方案 1GPS 模块与语音模块都需要 UART。2.2 GPS 模块选型方案型号卫星系统方案 1ATGM336HGPS 北斗方案 2NEO-6MGPS选择方案 1国内北斗支持更佳。2.3 语音播报模块选型方案型号升级方式方案 1JR6001USB 直接拷贝语音方案 2AB1000蓝牙升级选择方案 1USB 升级方案便于运维。2.4 显示模块选型方案模块备注方案 1OLED12864显示站点与距离方案 2LCD12864字符显示选择方案 1响应快对比度高。2.5 无线模块选型方案模块优势方案 1ESP8266直连 Wi-Fi / 4G 路由方案 2SIM8004G 蜂窝选择方案 1便于室内测试。三、系统接线总表模块引脚单片机端备注ATGM336HVCC/GND/TX/RX3.3 V / GND / PA10 / PA9UART 9600OLED12864VCC/GND/SCL/SDA3.3 V / GND / PB6 / PB7I2CJR6001VCC/GND/TX/RX/BUSY5 V / GND / PA3 / PA2 / PA4UART按键 ×4一端/另一端PB0/PB1/PB2/PB3 / GND站点切换 / 报警ESP8266VCC/GND/TX/RX/CH_PD3.3 V / GND / PA5 / PA6 / 3.3 VUART四、系统软件设计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 距离计算Haversinedouble 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_lat、gps_lng、distance_to_next、cur_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、代码、元件清单八、资料获取方式