我是BLE实施的新手,所以请耐心等待。我使用的是Xcode 9.3,iOS版本11.3和PSoC 4200 BLE设备。
我有一个连接到PSoC模块的自定义电路,它输出一个电压,通过uint32数据包发送到我的iOS应用程序。我的下一步是能够创建一个UIButton
对象(现在只是一个开/关)并将其状态传递回PSoC。
忘记用于设置PSoC的软件(赛普拉斯的PSoC Creator 4.0只是fyi),我想知道在Xcode中使用哪种委托方法/方法来实现这个...我最好的猜测是peripheralManager:didReceiveWriteRequests:
协议中的CBPeripheralManagerDelegate
。如果我只能在中心读取特性后才能写回外设,那么我可以暂时使用uint32电压包的最后8位,如果这是该过程所需要的。如果更好地创建一个新的uint8或布尔数据包,并且只使用它作为写入特性而不干预uint32,那么我也可以这样做。
到目前为止,我没有传输时间要求或能耗问题......我只需要将该布尔值发送到PSoC。
非常感谢任何帮助,谢谢。
更新:
调用peripheral:didUpdateValueForCharacteristic:error:
后,我会调用[self getTransducerData:characteristic withPeripheral:peripheral error:error];
以下是该方法中发生的情况(我添加了我认为使用writeValue:forCharacteristic:type:
的适当方式)
- (void)getTransducerData:(CBCharacteristic*)characteristic withPeripheral:(CBPeripheral*)peripheral
error:(NSError*)error {
NSData* data = [characteristic value];
const uint8_t *reportData = [data bytes];
uint32_t v0 = (uint32_t)reportData[0];
uint32_t v1 = (uint32_t)reportData[1] << 8;
uint32_t v2 = (uint32_t)reportData[2] << 16;
//uint32_t v3 = (uint32_t)reportData[3] << 24;
int32_t voltage = v0 | v1 | v2; //| v3;
if ((characteristic.value) || !error) {
/* _captureOn is the boolean value after my UIButton object receives a touch.
On and Off.
If it's on, notify the peripheral with the last 8 bits of the uint32_t characteristic with 0x01.*/
if (_captureOn) {
uint8_t temp[4];
temp[0] = v0;
temp[1] = v1;
temp[2] = v2;
temp[3] = 0x01;
NSData *data = [NSData dataWithBytesNoCopy:temp length:4 freeWhenDone:YES];
[peripheral writeValue:data forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse];
}
self.transducerValue = voltage;
self.realVoltage = voltage/1000000.0;
//self.levelView.value = self.realVoltage;
if (self.realVoltage <= _originalHigh && self.realVoltage >= _originalLow) {
self.testerVoltage = self.realVoltage;
self.middleTachometer.currentLevel = (float)self.realVoltage;
self.transducerPosition.text = [NSString stringWithFormat:@"%0.3lf V", self.realVoltage];
}
}
}