当前位置:   article > 正文

STM32、Spring Boot、MQTT和React Native:智能停车管理系统的全栈开发详解(附代码示例)

STM32、Spring Boot、MQTT和React Native:智能停车管理系统的全栈开发详解(附代码示例)

1. 项目概述

随着城市化进程的加快,停车难已成为许多大中城市面临的普遍问题。为了提高停车效率,改善用户体验,本文设计并实现了一套智能停车管理系统。该系统利用STM32微控制器、各类传感器以及移动应用,实现了停车位实时监控、在线预约和自动支付等功能,为用户提供了便捷的停车服务。

本系统的主要功能包括:

  1. 实时监控停车位状态
  2. 提供停车位在线预约
  3. 自动识别车牌
  4. 移动应用支付功能
  5. 停车数据统计和分析

2. 系统设计

2.1 硬件设计

系统的硬件部分主要包括以下组件:

  • STM32F103微控制器:作为系统的核心控制单元
  • HC-SR04超声波传感器:检测车位是否有车辆占用
  • OV7670摄像头模块:采集车牌图像
  • ESP8266 Wi-Fi模块:实现与服务器的无线通信
  • LED指示灯:显示车位状态(红色表示占用,绿色表示空闲)

硬件连接示意图如下:

2.2 软件设计

软件架构采用前后端分离的设计,具体包括:

  • 前端:使用React Native开发跨平台移动应用
  • 后端:采用Spring Boot框架,提供RESTful API
  • 数据库:使用MySQL存储用户信息、停车记录等数据
  • 消息队列:使用RabbitMQ处理高并发场景下的消息传递
  • 缓存:使用Redis缓存热点数据,提高系统响应速度

软件架构图如下:

3. 代码实现

3.1 STM32固件代码

以下是STM32读取超声波传感器数据并通过MQTT上传的示例代码:

 

  1. #include "stm32f1xx_hal.h"
  2. #include "mqtt.h"
  3. // 定义引脚
  4. #define TRIG_PIN GPIO_PIN_0
  5. #define TRIG_PORT GPIOA
  6. #define ECHO_PIN GPIO_PIN_1
  7. #define ECHO_PORT GPIOA
  8. // 初始化超声波传感器
  9. void init_hcsr04(void) {
  10. GPIO_InitTypeDef GPIO_InitStruct = {0};
  11. // 配置TRIG引脚为输出
  12. GPIO_InitStruct.Pin = TRIG_PIN;
  13. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  14. GPIO_InitStruct.Pull = GPIO_NOPULL;
  15. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  16. HAL_GPIO_Init(TRIG_PORT, &GPIO_InitStruct);
  17. // 配置ECHO引脚为输入
  18. GPIO_InitStruct.Pin = ECHO_PIN;
  19. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  20. GPIO_InitStruct.Pull = GPIO_NOPULL;
  21. HAL_GPIO_Init(ECHO_PORT, &GPIO_InitStruct);
  22. }
  23. // 获取距离数据
  24. uint16_t get_distance(void) {
  25. uint32_t start_time, end_time;
  26. uint16_t distance;
  27. // 发送10us的触发脉冲
  28. HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_SET);
  29. HAL_Delay_us(10);
  30. HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_RESET);
  31. // 等待回波
  32. while(HAL_GPIO_ReadPin(ECHO_PORT, ECHO_PIN) == GPIO_PIN_RESET);
  33. start_time = HAL_GetTick();
  34. while(HAL_GPIO_ReadPin(ECHO_PORT, ECHO_PIN) == GPIO_PIN_SET);
  35. end_time = HAL_GetTick();
  36. // 计算距离 (声速约为340m/s,来回需要除以2)
  37. distance = (end_time - start_time) * 340 / 2 / 1000;
  38. return distance;
  39. }
  40. // MQTT数据上传
  41. void upload_data(uint16_t distance) {
  42. char payload[50];
  43. sprintf(payload, "{\"parkingId\": 1, \"distance\": %d}", distance);
  44. mqtt_publish("parking/status", payload);
  45. }
  46. // 主循环
  47. void main(void) {
  48. // 初始化硬件
  49. HAL_Init();
  50. init_hcsr04();
  51. mqtt_init();
  52. while(1) {
  53. uint16_t dist = get_distance();
  54. // 判断停车位状态
  55. if (dist < 50) { // 如果距离小于50cm,认为有车
  56. HAL_GPIO_WritePin(LED_PORT, LED_PIN_RED, GPIO_PIN_SET);
  57. HAL_GPIO_WritePin(LED_PORT, LED_PIN_GREEN, GPIO_PIN_RESET);
  58. } else {
  59. HAL_GPIO_WritePin(LED_PORT, LED_PIN_RED, GPIO_PIN_RESET);
  60. HAL_GPIO_WritePin(LED_PORT, LED_PIN_GREEN, GPIO_PIN_SET);
  61. }
  62. upload_data(dist);
  63. HAL_Delay(1000); // 每秒检测一次
  64. }
  65. }

这段代码实现了以下功能:

  1. 初始化超声波传感器的GPIO引脚
  2. 通过超声波传感器测量距离
  3. 根据测量距离判断停车位状态,并控制LED指示灯
  4. 通过MQTT协议上传停车位状态数据

3.2 Spring Boot后端代码

以下是处理停车位状态更新的Spring Boot控制器示例:

  1. @RestController
  2. @RequestMapping("/api/parking")
  3. public class ParkingController {
  4. @Autowired
  5. private ParkingService parkingService;
  6. @PostMapping("/status")
  7. public ResponseEntity<?> updateStatus(@RequestBody ParkingStatus status) {
  8. try {
  9. ParkingSpot updatedSpot = parkingService.updateParkingStatus(status);
  10. return ResponseEntity.ok(updatedSpot);
  11. } catch (Exception e) {
  12. return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error updating parking status");
  13. }
  14. }
  15. @GetMapping("/available")
  16. public ResponseEntity<?> getAvailableSpots() {
  17. try {
  18. List<ParkingSpot> availableSpots = parkingService.getAvailableSpots();
  19. return ResponseEntity.ok(availableSpots);
  20. } catch (Exception e) {
  21. return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error fetching available spots");
  22. }
  23. }
  24. @PostMapping("/reserve")
  25. public ResponseEntity<?> reserveSpot(@RequestBody ReservationRequest request) {
  26. try {
  27. Reservation reservation = parkingService.reserveSpot(request);
  28. return ResponseEntity.ok(reservation);
  29. } catch (Exception e) {
  30. return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Error reserving spot: " + e.getMessage());
  31. }
  32. }
  33. }

这个控制器实现了以下功能:

  1. 更新停车位状态
  2. 获取可用停车位列表
  3. 预约停车位

3.3 React Native前端代码

以下是React Native应用中显示可用停车位的组件示例:

  1. import React, { useState, useEffect } from 'react';
  2. import { View, Text, FlatList, StyleSheet } from 'react-native';
  3. import axios from 'axios';
  4. const AvailableSpots = () => {
  5. const [spots, setSpots] = useState([]);
  6. useEffect(() => {
  7. const fetchSpots = async () => {
  8. try {
  9. const response = await axios.get('http://api.example.com/parking/available');
  10. setSpots(response.data);
  11. } catch (error) {
  12. console.error('Error fetching available spots:', error);
  13. }
  14. };
  15. fetchSpots();
  16. const interval = setInterval(fetchSpots, 30000); // 每30秒更新一次
  17. return () => clearInterval(interval);
  18. }, []);
  19. const renderSpot = ({ item }) => (
  20. <View style={styles.spotItem}>
  21. <Text>Spot ID: {item.id}</Text>
  22. <Text>Status: {item.status}</Text>
  23. </View>
  24. );
  25. return (
  26. <View style={styles.container}>
  27. <Text style={styles.title}>Available Parking Spots</Text>
  28. <FlatList
  29. data={spots}
  30. renderItem={renderSpot}
  31. keyExtractor={item => item.id.toString()}
  32. />
  33. </View>
  34. );
  35. };
  36. const styles = StyleSheet.create({
  37. container: {
  38. flex: 1,
  39. padding: 10,
  40. },
  41. title: {
  42. fontSize: 20,
  43. fontWeight: 'bold',
  44. marginBottom: 10,
  45. },
  46. spotItem: {
  47. padding: 10,
  48. borderBottomWidth: 1,
  49. borderBottomColor: '#ccc',
  50. },
  51. });
  52. export default AvailableSpots;

这个组件实现了以下功能:

  1. 在组件加载时获取可用停车位数据
  2. 每30秒自动更新数据
  3. 使用FlatList组件展示停车位列表

4. 项目总结

本智能停车管理系统通过整合硬件传感器、微控制器、后端服务和移动应用,实现了停车位的实时监控、在线预约和自动支付等功能,为用户提供了便捷的停车服务。系统的主要特点和优势包括:

  1. 实时监控:利用STM32微控制器和超声波传感器,实现了对停车位状态的实时监测,确保数据的及时性和准确性。

  2. 高效通信:采用MQTT协议进行设备与服务器之间的通信,保证了数据传输的可靠性和实时性。

  3. 可扩展性:采用前后端分离的架构设计,使用Spring Boot构建后端服务,便于系统的扩展和维护。

  4. 用户友好:通过React Native开发的移动应用,为用户提供了直观、易用的界面,方便查看停车位状态和进行预约操作。

  5. 性能优化:引入Redis缓存和RabbitMQ消息队列,有效提高了系统在高并发场景下的性能表现。

在实际应用中,本系统可以显著提高停车场的管理效率,减少用户寻找停车位的时间,从而缓解城市交通压力。同时,系统收集的数据也可用于进一步的分析和优化,如停车位使用率统计、高峰期预测等。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/856142
推荐阅读
相关标签
  

闽ICP备14008679号