如何在 ios 中通过蓝牙接收简单的整数值

Posted

技术标签:

【中文标题】如何在 ios 中通过蓝牙接收简单的整数值【英文标题】:How can I receive simple integer values over bluetooth in ios 【发布时间】:2014-06-13 14:28:50 【问题描述】:

我正在尝试学习如何将一些传感器插入 Arduino 板,以通过蓝牙与带有 Red Bear Labs 迷你板的 iPhone 通信,但遇到了障碍。

传感器获得读数,并通过 BLE 发送到手机。到目前为止,我已经连接到设备,并且我找回了看似数据但我无法理解的数据。

我写了一个看起来像这样的小草图,用来模拟传感器数据。

#include <SoftwareSerial.h>
SoftwareSerial bluetooth(5, 6);

void setup() 
  bluetooth.begin(57600);


void loop() 
  //int reading = analogRead(2);
  int reading = 123; // fake reading
  byte lowerByte = (byte) reading & 0xFF;
  byte upperByte = (byte) (reading >> 8) & 0xFF;
  bluetooth.write(reading);
  bluetooth.write(upperByte);
  bluetooth.write(lowerByte);
  delay(1000);

ios 中,我发送一个调用来读取数据,然后通过一段代码接收数据,如下所示:

- (void)peripheral:(CBPeripheral *)peripheral 
didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic 
             error:(NSError *)error

    Byte data[20];
    static unsigned char buf[512];
    static int len = 0;
    NSInteger data_len;

    if (!error && [characteristic.UUID isEqual:[CBUUID UUIDWithString:@RBL_CHAR_TX_UUID]])
            data_len = characteristic.value.length;
            [characteristic.value getBytes:data length:data_len];

            if (data_len == 20)
                memcpy(&buf[len], data, 20);
                len += data_len;

                if (len >= 64)
                    [[self delegate] bleDidReceiveData:buf length:len];
                    len = 0;
                
             else if (data_len < 20) 
                memcpy(&buf[len], data, data_len);
                len += data_len;

                [[self delegate] bleDidReceiveData:buf length:len];
                len = 0;
            
        
    ...

但是当我查看返回的数据时,这对我来说完全没有意义..(我会尽快挖出一个例子)。

有谁知道我遗漏了一个简单的步骤,或者我可以看看一个很好的例子来尝试更好地理解这一点?

【问题讨论】:

【参考方案1】:

我终于意识到数据是正确的,我不得不通过位移来“拉出”数据。

UInt16 value;
UInt16 pin;

for (int i = 0; i < length; i+=3) 
  pin = data[i];
  value = data[i+2] | data[i+1] << 8;
  NSLog(@"Pin: %d", pin);
  NSLog(@"Value %d",value);

【讨论】:

另一种选择是将数据转换为 uint16 *,然后使用 CFSwapInt16LittleToHost。

以上是关于如何在 ios 中通过蓝牙接收简单的整数值的主要内容,如果未能解决你的问题,请参考以下文章

iOS中通过蓝牙的多点连接框架:如何确定消息是不是“旧”?

如何实现在 Flutter 中通过蓝牙打印字符串?

在 Android 中通过蓝牙接收音频

捕获文件在 C# 中通过蓝牙发送

如何在 Lua 中通过 ESP32 和 NodeMCU 使用蓝牙

如何在 iOS 中通过键盘显示 UIView