# BLC_BLU **Repository Path**: gitwdd/blc_-blu ## Basic Information - **Project Name**: BLC_BLU - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2025-09-16 - **Last Updated**: 2025-11-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于uni-app的蓝牙Modbus通信应用:从架构设计到实现细节 ![输入图片说明](src/static/gh_423926107f3c_258.jpg) ![输入图片说明](src/static/f19f897f80dd4f3999dd53cabae62f6f.png) ## 项目概述 在工业物联网快速发展的今天,蓝牙通信与Modbus协议的结合为设备互联提供了新的解决方案。本文将深入分析一个基于uni-app框架开发的蓝牙Modbus通信应用,该应用巧妙地将蓝牙低功耗通信与Modbus协议相结合,实现了跨平台的工业设备通信解决方案。 ### 技术栈概览 - **前端框架**: uni-app + Vue.js - **蓝牙通信**: Native.js 原生蓝牙API - **协议支持**: Modbus RTU/ASCII - **样式处理**: SCSS模块化管理 - **平台支持**: H5、Android/iOS App、微信小程序 ## 核心架构设计 ### 1. 分层架构模式 该应用采用了清晰的分层架构,将蓝牙通信层与Modbus协议层完全分离: ``` ┌─────────────────────────────────────┐ │ 用户界面层 (UI Layer) │ ├─────────────────────────────────────┤ │ 业务逻辑层 (Logic Layer) │ ├─────────────────────────────────────┤ │ Modbus协议层 (Protocol Layer) │ ├─────────────────────────────────────┤ │ 蓝牙通信层 (Transport Layer) │ ├─────────────────────────────────────┤ │ 硬件抽象层 (HAL Layer) │ └─────────────────────────────────────┘ ``` ### 2. 核心类设计 #### BluetoothModbus 核心类 `BluetoothModbus` 类是整个应用的核心,它封装了蓝牙通信和Modbus协议的所有功能: ```javascript class BluetoothModbus { constructor() { // 蓝牙连接状态管理 this.state = BLUETOOTH_STATE.DISCONNECTED; // 设备信息 this.deviceId = ""; this.deviceName = ""; // UUID配置 this.serviceId = ""; this.writeId = ""; this.notifyId = ""; // 模块类型支持 this.moduleType = BLUETOOTH_MODULE_TYPE.NORMAL; // 心跳保活机制 this.heartbeatInterval = null; this.heartbeatPeriod = 30000; this.autoReconnect = true; } } ``` ## 技术特色功能解析 ### 1. 多模块类型支持 应用支持多种蓝牙模块类型,通过预定义的UUID配置实现快速适配: ```javascript // 常规模组UUID const NORMAL_MODULE_UUID = { serviceId: "0000FFE0-0000-1000-8000-00805F9B34FB", writeId: "0000FFE1-0000-1000-8000-00805F9B34FB", notifyId: "0000FFE1-0000-1000-8000-00805F9B34FB", }; // BT16模组UUID const BT16_MODULE_UUID = { serviceId: "0000FFE0-0000-1000-8000-00805F9B34FB", writeId: "0000FFE2-0000-1000-8000-00805F9B34FB", notifyId: "0000FFE1-0000-1000-8000-00805F9B34FB", }; // 低功耗蓝牙通用UUID const BLE_MODULE_UUID = { serviceId: "6E400001-B5A3-F393-E0A9-E50E24DCCA9E", writeId: "6E400002-B5A3-F393-E0A9-E50E24DCCA9E", notifyId: "6E400003-B5A3-F393-E0A9-E50E24DCCA9E", }; ``` ### 2. 智能蓝牙状态检查机制 在执行蓝牙扫描前,应用会智能检查蓝牙适配器状态: ```javascript async checkBluetoothState() { return new Promise((resolve, reject) => { uni.getBluetoothAdapterState({ success: (res) => { if (res.available) { resolve(true); } else { // 尝试初始化蓝牙适配器 uni.openBluetoothAdapter({ success: () => resolve(true), fail: (error) => { this.addLog('错误', `蓝牙初始化失败: ${error.errMsg}`); reject(new Error('蓝牙功能未开启或不可用')); } }); } }, fail: (error) => { reject(new Error(`获取蓝牙状态失败: ${error.errMsg}`)); } }); }); } ``` ### 3. 大数据分片传输机制 为了解决蓝牙MTU限制问题,应用实现了智能的数据分片传输: ```javascript _sendLargeData(buffer) { const maxChunkSize = 20; // 蓝牙MTU通常为20字节 const chunks = []; // 将大数据分割成小块 for (let i = 0; i < buffer.length; i += maxChunkSize) { chunks.push(buffer.slice(i, i + maxChunkSize)); } // 逐块发送 let chunkIndex = 0; const sendNextChunk = () => { if (chunkIndex < chunks.length) { this._sendData(chunks[chunkIndex]); chunkIndex++; setTimeout(sendNextChunk, 50); // 50ms间隔 } }; sendNextChunk(); } ``` ### 4. 完整的Modbus协议支持 应用支持常见的Modbus功能码,并提供了完整的PDU构建和解析功能: ```javascript const MODBUS_FUNCTION_CODE = { READ_COILS: 0x01, // 读线圈 READ_DISCRETE_INPUTS: 0x02, // 读离散输入 READ_HOLDING_REGISTERS: 0x03, // 读保持寄存器 READ_INPUT_REGISTERS: 0x04, // 读输入寄存器 WRITE_SINGLE_COIL: 0x05, // 写单个线圈 WRITE_SINGLE_REGISTER: 0x06, // 写单个寄存器 WRITE_MULTIPLE_COILS: 0x0f, // 写多个线圈 WRITE_MULTIPLE_REGISTERS: 0x10, // 写多个寄存器 }; ``` ### 5. 心跳保活与自动重连 应用实现了智能的心跳保活机制,确保连接稳定性: ```javascript _startHeartbeat() { if (this.heartbeatInterval) { clearInterval(this.heartbeatInterval); } this.heartbeatInterval = setInterval(() => { if (this.state === BLUETOOTH_STATE.CONNECTED) { // 发送心跳数据包 this._sendData(this.heartbeatData); // 检查连接状态 this._checkConnectionStatus(); } }, this.heartbeatPeriod); } ``` ## 用户界面设计亮点 ### 1. 响应式卡片布局 应用采用了现代化的卡片式布局,清晰地分离了蓝牙连接和Modbus通信两大功能区域: ```vue ``` ### 2. 实时状态指示 通过动态的状态指示器,用户可以实时了解蓝牙连接状态: ```javascript computed: { bluetoothStateText() { switch (this.bluetoothState) { case BLUETOOTH_STATE.DISCONNECTED: return '未连接'; case BLUETOOTH_STATE.CONNECTING: return '连接中'; case BLUETOOTH_STATE.CONNECTED: return '已连接'; case BLUETOOTH_STATE.SERVICES_DISCOVERING: return '读取服务中'; case BLUETOOTH_STATE.RECONNECTING: return '重连中'; default: return '未知状态'; } } } ``` ### 3. 智能设备列表管理 设备列表支持实时更新,显示设备名称、ID和信号强度: ```vue {{ device.name || device.localName || '未知设备' }} {{ device.deviceId }} {{ device.RSSI }} dBm ``` ## 错误处理与日志系统 ### 1. 分级日志系统 应用实现了完整的分级日志系统,支持系统、发送、接收、错误等不同类型的日志: ```javascript addLog(type, message) { const timestamp = new Date().toLocaleTimeString(); const logEntry = { type, message, timestamp, id: Date.now() + Math.random() }; this.logs.unshift(logEntry); // 限制日志数量,避免内存溢出 if (this.logs.length > 1000) { this.logs = this.logs.slice(0, 1000); } } ``` ### 2. 异常处理机制 完善的异常处理确保应用的稳定性: ```javascript _handleError(message, error) { console.error(message, error); const errorMessage = error?.message || error?.errMsg || '未知错误'; this.addLog('错误', `${message}: ${errorMessage}`); if (this.onErrorCallback) { this.onErrorCallback({ message, error: errorMessage, timestamp: new Date().toISOString() }); } } ``` ## 性能优化策略 ### 1. 内存管理 - **日志限制**: 限制日志条目数量,防止内存泄漏 - **设备列表优化**: 使用浅拷贝更新设备列表,减少内存占用 - **定时器管理**: 及时清理定时器,避免内存泄漏 ### 2. 网络优化 - **数据分片**: 自动处理大数据分片,适应蓝牙MTU限制 - **重试机制**: 智能重试机制,提高通信成功率 - **连接池管理**: 合理管理蓝牙连接,避免资源浪费 ## 跨平台兼容性 ### 1. uni-app框架优势 通过uni-app框架,应用实现了真正的"一次开发,多端运行": - **H5端**: 支持现代浏览器的Web Bluetooth API - **App端**: 使用Native.js调用原生蓝牙功能 - **小程序端**: 适配微信小程序蓝牙API ### 2. 平台差异处理 ```javascript // 根据平台选择不同的蓝牙实现 if (uni.getSystemInfoSync().platform === 'android') { // Android特定处理 } else if (uni.getSystemInfoSync().platform === 'ios') { // iOS特定处理 } else { // H5或其他平台处理 } ``` ## 安全性考虑 ### 1. 权限管理 应用在manifest.json中声明了必要的蓝牙权限: ```json { "permissions": [ "", "", "", "", "" ] } ``` ### 2. 数据校验 - **CRC校验**: 实现了完整的CRC16校验算法 - **数据格式验证**: 严格验证Modbus数据格式 - **异常响应处理**: 正确处理Modbus异常响应 ## 总结与展望 这个蓝牙Modbus通信应用展现了现代移动应用开发的多个最佳实践: ### 技术亮点 1. **架构清晰**: 分层设计,职责分离 2. **功能完整**: 支持完整的Modbus协议栈 3. **用户友好**: 直观的界面设计和实时状态反馈 4. **跨平台**: 真正的一次开发,多端运行 5. **性能优化**: 内存管理和网络优化并重 ### 应用场景 - **工业自动化**: 设备监控和控制 - **智能家居**: 家电设备通信 - **物联网**: 传感器数据采集 - **设备调试**: 工程师现场调试工具 ### 未来发展方向 1. **协议扩展**: 支持更多工业协议 2. **AI集成**: 智能故障诊断 3. **云端同步**: 数据云端存储和分析 4. **安全增强**: 加密通信和身份认证 这个项目不仅是一个功能完整的蓝牙Modbus通信工具,更是现代跨平台移动应用开发的优秀范例,为工业物联网应用开发提供了宝贵的参考价值。