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取消。