ESP32 Arduino 连接服务端特征为WriteNoResponse大坑

ESP32作为客户端连接服务端时,当服务端特征为WriteNoResponse,写数据的函数和Write的用法不一样,小白很容易入坑,百度好久没有没有找到解决的方法:

如向服务端特性Write发送数据A1,服务端是可以收到的,代码如下:

  pRemoteCharacteristic = pRemoteService->getCharacteristic(CHARACTERISTIC_UUID); // 尝试获取服务中的特征
  if (pRemoteCharacteristic == nullptr)
  {
    pClient->disconnect();
    return false;
  }
  if (pRemoteCharacteristic->canWrite())
  {
    buf[0] = 0xA1;
    pRemoteCharacteristic->writeValue(buf, 1,ESP_GATT_WRITE_TYPE_RSP);
    Serial.println("写入成功\r\n");
  }

但是向服务端特征WriteNoResponse发送数据A1时,服务端确没有反应,代码如下:

  pRemoteCharacteristic = pRemoteService->getCharacteristic(CHARACTERISTIC_UUID); // 尝试获取服务中的特征
  if (pRemoteCharacteristic == nullptr)
  {
    pClient->disconnect();
    return false;
  }
  if (pRemoteCharacteristic->canWriteNoResponse())
  {
    buf[0] = 0xA1;
    pRemoteCharacteristic->writeValue(buf, 1,ESP_GATT_WRITE_TYPE_NO_RSP);
    Serial.println("写入成功\r\n");
  }

百度很久没有找到解决办法,过一天手贱删除一个参数 居然可以了 ,无语 ,没有想明白,记录下:

  pRemoteCharacteristic = pRemoteService->getCharacteristic(CHARACTERISTIC_UUID); // 尝试获取服务中的特征
  if (pRemoteCharacteristic == nullptr)
  {
    pClient->disconnect();
    return false;
  }
  if (pRemoteCharacteristic->canWriteNoResponse())
  {
    buf[0] = 0xA1;
    pRemoteCharacteristic->writeValue(buf, 1);
    Serial.println("写入成功\r\n");
  }

解决方法:将writeValue(uint8_t* data, size_t length, bool response)中的参数response取消。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值