2401_87304997 2026-02-05 08:21 采纳率: 0%
浏览 4

如何在微信小程序和这个蓝牙模块硬件之间进行互传数据

img

img

img


我现在的小程序已经可以发送东西但是我的硬件收不到,我的硬件发送,小程序也收不到,我的硬件已经连在了我的电脑上现在怎么样才能让他们互传数据

  • 写回答

1条回答 默认 最新

  • 檀越@新空间 2026-02-05 08:47
    关注

    上午好☀️☀️☀️️
    本答案参考通义千问

    你目前的问题是:微信小程序与蓝牙模块硬件之间无法正常互传数据,尽管小程序可以发送数据但硬件收不到,硬件发送的数据小程序也收不到。同时,你的硬件已经连接到电脑上,那么你需要解决的是如何让小程序和硬件之间建立稳定的通信链路,并确保数据能够正确传输。


    一、问题分析

    1. 可能的原因

    • 微信小程序的蓝牙 API 使用不当
    • 蓝牙模块未正确配置(如波特率、协议等)
    • 硬件端没有实现正确的接收逻辑
    • 小程序与硬件之间的数据格式不一致(如编码方式、包头包尾等)
    • 蓝牙连接状态不稳定或未成功建立连接
    • 没有开启蓝牙广播/扫描权限
    • 硬件未处于可连接状态(如未进入配对模式)

    二、解决方案

    1. 确认蓝牙模块是否支持串口通信(SPP)或 BLE 协议

    重点:蓝牙模块必须支持串口通信(SPP)或 BLE 协议,否则无法与小程序通信。

    • 如果使用的是 经典蓝牙(SPP),需要确保硬件支持 SPP 模式。
    • 如果使用的是 BLE(低功耗蓝牙),则需在小程序中使用 wx.createBLEConnection 等相关接口。

    2. 检查硬件是否已正确连接到电脑

    重点:硬件连接到电脑后,需通过串口调试工具验证是否能正常收发数据。

    • 使用串口助手(如 XCOM、SecureCRT、Putty 等)连接硬件。
    • 发送测试数据,观察是否能收到响应。
    • 如果硬件无法正常收发数据,可能是硬件配置错误或固件问题。

    3. 在小程序中启用蓝牙功能并进行扫描和连接

    重点:必须先调用 wx.openBluetoothAdapter 打开蓝牙,再调用 wx.startBluetoothDevicesDiscovery 扫描设备。

    // 打开蓝牙
    wx.openBluetoothAdapter({
      success: function () {
        console.log('蓝牙打开成功');
        // 开始扫描设备
        wx.startBluetoothDevicesDiscovery({
          success: function () {
            console.log('开始扫描设备');
          },
          fail: function (err) {
            console.error('扫描失败', err);
          }
        });
      },
      fail: function (err) {
        console.error('蓝牙打开失败', err);
      }
    });
    

    4. 连接蓝牙设备并获取服务 ID 和特征值 ID

    重点:必须获取正确的 serviceId 和 characteristicId 才能进行读写操作。

    // 扫描到设备后,连接设备
    wx.createBLEConnection({
      deviceId: device.id,
      success: function () {
        console.log('连接成功');
        // 获取服务列表
        wx.getBLEDeviceServices({
          deviceId: device.id,
          success: function (res) {
            console.log('服务列表:', res.services);
            const serviceId = res.services[0].uuid;
            // 获取特征值列表
            wx.getBLEDeviceCharacteristics({
              deviceId: device.id,
              serviceId: serviceId,
              success: function (res) {
                console.log('特征值列表:', res.characteristics);
                const characteristicId = res.characteristics[0].uuid;
                // 设置监听,用于接收硬件发送的数据
                wx.onBLECharacteristicValueChange(function (res) {
                  console.log('接收到数据:', res.value);
                });
              }
            });
          }
        });
      }
    });
    

    5. 发送数据到蓝牙模块

    重点:发送数据前,必须确保已经连接并获取了特征值 ID。

    // 将字符串转换为 Array Buffer
    function stringToArrayBuffer(str) {
      const buffer = new ArrayBuffer(str.length);
      const dataView = new DataView(buffer);
      for (let i = 0; i < str.length; i++) {
        dataView.setUint8(i, str.charCodeAt(i));
      }
      return buffer;
    }
    
    // 发送数据
    wx.writeBLECharacteristicValue({
      deviceId: device.id,
      serviceId: serviceId,
      characteristicId: characteristicId,
      value: stringToArrayBuffer("Hello from MiniProgram"),
      success: function () {
        console.log('数据发送成功');
      },
      fail: function (err) {
        console.error('发送失败', err);
      }
    });
    

    6. 硬件端设置(示例:Arduino + HC-05 模块)

    重点:硬件端需要配置为串口通信模式,并且监听串口输入。

    void setup() {
      Serial.begin(9600); // 设置波特率为 9600
    }
    
    void loop() {
      if (Serial.available()) {
        char c = Serial.read();
        Serial.print(c); // 回显接收到的数据
      }
    }
    

    7. 调试建议

    • 使用串口助手验证硬件是否能正常接收和发送数据。
    • 在小程序中打印所有回调信息,判断连接、读写是否成功。
    • 确保小程序中使用的蓝牙模块名称和地址与实际硬件匹配。

    三、常见问题排查清单

    1. ✅ 是否开启了蓝牙权限?
    2. ✅ 是否成功连接了蓝牙设备?
    3. ✅ 是否获取到了正确的 serviceId 和 characteristicId?
    4. ✅ 数据格式是否一致(如 UTF-8、ASCII 等)?
    5. ✅ 硬件是否处于可连接状态?
    6. ✅ 是否在小程序中注册了 onBLECharacteristicValueChange 监听?

    四、代码修改建议(如果当前代码存在问题)

    如果你的代码中缺少以下内容,请补充:

    • 蓝牙初始化和连接流程
    • 数据发送和接收的回调函数
    • 数据格式转换(ArrayBuffer)

    五、总结

    | 问题点 | 解决方案 | |--------|----------| | 无法连接蓝牙设备 | 确认设备是否在扫描范围内,检查蓝牙是否开启 | | 数据发送后硬件无响应 | 检查硬件是否正确配置,是否支持串口通信 | | 小程序无法接收数据 | 确保已注册 onBLECharacteristicValueChange 监听 | | 数据格式不一致 | 统一使用 UTF-8 或 ASCII 编码 |


    如果你能提供具体的代码片段或硬件型号,我可以进一步帮助你定位问题。希望以上内容对你有所帮助!

    评论

报告相同问题?

问题事件

  • 创建了问题 2月5日