蓝海峰 發表於 2019-11-20 16:48:00

iOS——蓝牙开发

<h3>一、理论概念:</h3>
<p>1.当前ios中开发蓝牙所运用的系统库是&lt;CoreBluetooth/CoreBluetooth.h&gt;。</p>
<p>2.蓝牙外设必须为4.0及以上(2.0需要MFI认证),否则无法开发,蓝牙4.0设备因为低耗电,所以也叫做BLE。</p>
<p>3.CoreBluetooth框架的核心其实是两个东西,peripheral和central, 可以理解成外设和中心,就是你的苹果手机就是中心,外部蓝牙称为外设。</p>
<div>
<div>4.服务和特征(service and characteristic):简而言之,外部蓝牙中它有若干个服务service(服务你可以理解为蓝牙所拥有的能力),而每个服务service下拥有若干个特征characteristic(特征你可以理解为解释这个服务的属性)。</div>
<div>
<div>
<div>
<p>5.Descriptor(描述)用来描述characteristic变量的属性。例如,一个descriptor可以规定一个可读的描述,或者一个characteristic变量可接受的范围,或者一个characteristic变量特定的单位。</p>
<p>6.我们使用的蓝牙硬件模块是在淘宝上买的, 大概十多元一个, ios大概每次可以接受90个字节, 安卓大概每次可以接收20个字节, 具体数字可能会浮动, 应该与蓝牙模块有关。</p>
<h3>二、蓝牙连接的主要步骤</h3>
<pre class="line-numberslanguage-undefined"><code class="language-undefined">   a、创建一个CBCentralManager实例来进行蓝牙管理;<br></code></pre>
<pre class="line-numberslanguage-objectivec"><code class="language-objectivec"><span class="token keyword">self<span class="token punctuation">.centralManager <span class="token operator">= <span class="token punctuation">[<span class="token punctuation"> initWithDelegate<span class="token punctuation">:<span class="token keyword">self queue<span class="token punctuation">:nil<span class="token punctuation">]<span class="token punctuation">;</span></span></span></span></span></span></span></span></span></span></span></code><br><br></pre>
<pre class="line-numberslanguage-undefined"><code class="language-undefined">b、搜索扫描外围设备;<br></code></pre>
<pre class="line-numberslanguage-objectivec"><code class="language-objectivec"><span class="token comment">/**
*--初始化成功自动调用
*--必须实现的代理,用来返回创建的centralManager的状态。
*--注意:必须确认当前是CBCentralManagerStatePoweredOn状态才可以调用扫描外设的方法:
scanForPeripheralsWithServices
*/
<span class="token operator">- <span class="token punctuation">(<span class="token keyword">void<span class="token punctuation">)centralManagerDidUpdateState<span class="token punctuation">:<span class="token punctuation">(CBCentralManager <span class="token operator">*<span class="token punctuation">)central<span class="token punctuation">{
    <span class="token keyword">switch <span class="token punctuation">(central<span class="token punctuation">.state<span class="token punctuation">) <span class="token punctuation">{
      <span class="token keyword">case CBCentralManagerStateUnknown<span class="token punctuation">:
            <span class="token function">NSLog<span class="token punctuation">(<span class="token string">@"&gt;&gt;&gt;CBCentralManagerStateUnknown"<span class="token punctuation">)<span class="token punctuation">;
            <span class="token keyword">break<span class="token punctuation">;
      <span class="token keyword">case CBCentralManagerStateResetting<span class="token punctuation">:
            <span class="token function">NSLog<span class="token punctuation">(<span class="token string">@"&gt;&gt;&gt;CBCentralManagerStateResetting"<span class="token punctuation">)<span class="token punctuation">;
            <span class="token keyword">break<span class="token punctuation">;
      <span class="token keyword">case CBCentralManagerStateUnsupported<span class="token punctuation">:
            <span class="token function">NSLog<span class="token punctuation">(<span class="token string">@"&gt;&gt;&gt;CBCentralManagerStateUnsupported"<span class="token punctuation">)<span class="token punctuation">;
            <span class="token keyword">break<span class="token punctuation">;
      <span class="token keyword">case CBCentralManagerStateUnauthorized<span class="token punctuation">:
            <span class="token function">NSLog<span class="token punctuation">(<span class="token string">@"&gt;&gt;&gt;CBCentralManagerStateUnauthorized"<span class="token punctuation">)<span class="token punctuation">;
            <span class="token keyword">break<span class="token punctuation">;
      <span class="token keyword">case CBCentralManagerStatePoweredOff<span class="token punctuation">:
            <span class="token function">NSLog<span class="token punctuation">(<span class="token string">@"&gt;&gt;&gt;CBCentralManagerStatePoweredOff"<span class="token punctuation">)<span class="token punctuation">;
            <span class="token keyword">break<span class="token punctuation">;
      <span class="token keyword">case CBCentralManagerStatePoweredOn<span class="token punctuation">:
      <span class="token punctuation">{
            <span class="token function">NSLog<span class="token punctuation">(<span class="token string">@"&gt;&gt;&gt;CBCentralManagerStatePoweredOn"<span class="token punctuation">)<span class="token punctuation">;
            <span class="token comment">// 开始扫描周围的外设。
            <span class="token comment">/*
             -- 两个参数为Nil表示默认扫描所有可见蓝牙设备。
             -- 注意:第一个参数是用来扫描有指定服务的外设。然后有些外设的服务是相同的,比如都有FFF5服务,那么都会发现;而有些外设的服务是不可见的,就会扫描不到设备。
             -- 成功扫描到外设后调用didDiscoverPeripheral
             */
            <span class="token punctuation">[<span class="token keyword">self<span class="token punctuation">.centralManager scanForPeripheralsWithServices<span class="token punctuation">:nil options<span class="token punctuation">:nil<span class="token punctuation">]<span class="token punctuation">;
      <span class="token punctuation">}
            <span class="token keyword">break<span class="token punctuation">;
      <span class="token keyword">default<span class="token punctuation">:
            <span class="token keyword">break<span class="token punctuation">;
    <span class="token punctuation">}
<span class="token punctuation">}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code><br><br></pre>
<pre class="line-numberslanguage-objectivec"><code class="language-objectivec"><span class="token macro property">#<span class="token directive keyword">pragma mark 发现外设
<span class="token operator">- <span class="token punctuation">(<span class="token keyword">void<span class="token punctuation">)centralManager<span class="token punctuation">:<span class="token punctuation">(CBCentralManager <span class="token operator">*<span class="token punctuation">)central didDiscoverPeripheral<span class="token punctuation">:<span class="token punctuation">(CBPeripheral <span class="token operator">*<span class="token punctuation">)peripheral advertisementData<span class="token punctuation">:<span class="token punctuation">(NSDictionary<span class="token operator">&lt;NSString <span class="token operator">*<span class="token punctuation">,id<span class="token operator">&gt; <span class="token operator">*<span class="token punctuation">)advertisementData RSSI<span class="token punctuation">:<span class="token punctuation">(NSNumber <span class="token operator">*<span class="token punctuation">)RSSI<span class="token punctuation">{
    <span class="token function">NSLog<span class="token punctuation">(<span class="token string">@"Find device:%@"<span class="token punctuation">, <span class="token punctuation"><span class="token punctuation">)<span class="token punctuation">;
    <span class="token keyword">if <span class="token punctuation">(<span class="token operator">!<span class="token punctuation"><span class="token punctuation">]<span class="token punctuation">) <span class="token punctuation">{
      <span class="token function">NSLog<span class="token punctuation">(<span class="token string">@"Find device:%@"<span class="token punctuation">, <span class="token punctuation"><span class="token punctuation">)<span class="token punctuation">;
      <span class="token keyword">if <span class="token punctuation">(peripheral<span class="token operator">!=nil<span class="token punctuation">) <span class="token punctuation">{
            <span class="token keyword">if <span class="token punctuation">(<span class="token punctuation"><span class="token operator">!=nil<span class="token punctuation">) <span class="token punctuation">{
                <span class="token keyword">if <span class="token punctuation">(<span class="token punctuation">[<span class="token punctuation"> hasPrefix<span class="token punctuation">:<span class="token string">@"根据设备名过滤"<span class="token punctuation">]<span class="token punctuation">) <span class="token punctuation">{
                  <span class="token punctuation"><span class="token punctuation">]<span class="token punctuation">;
                     <span class="token comment">// 停止扫描, 看需求决定要不要加
<span class="token comment">//                  ;
                  <span class="token comment">// 将设备信息传到外面的页面(VC), 构成扫描到的设备列表
                  <span class="token keyword">if <span class="token punctuation">(<span class="token punctuation">[<span class="token keyword">self<span class="token punctuation">.delegate respondsToSelector<span class="token punctuation">:<span class="token keyword">@selector<span class="token punctuation">(dataWithBluetoothDic<span class="token punctuation">:<span class="token punctuation">)<span class="token punctuation">]<span class="token punctuation">) <span class="token punctuation">{
                        <span class="token punctuation">[<span class="token keyword">self<span class="token punctuation">.delegate dataWithBluetoothDic<span class="token punctuation">:_deviceDic<span class="token punctuation">]<span class="token punctuation">;
                  <span class="token punctuation">}
                <span class="token punctuation">}
            <span class="token punctuation">}
      <span class="token punctuation">}
    <span class="token punctuation">}
<span class="token punctuation">}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<pre class="line-numberslanguage-undefined"><code class="language-undefined">cc、连接外围设备;<br></code></pre>
<pre class="line-numberslanguage-objectivec"><code class="language-objectivec"><span class="token comment">// 连接设备(.h中声明出去的接口, 一般在点击设备列表连接时调用)
<span class="token operator">- <span class="token punctuation">(<span class="token keyword">void<span class="token punctuation">)connectDeviceWithPeripheral<span class="token punctuation">:<span class="token punctuation">(CBPeripheral <span class="token operator">*<span class="token punctuation">)peripheral
<span class="token punctuation">{
    <span class="token punctuation">[<span class="token keyword">self<span class="token punctuation">.centralManager connectPeripheral<span class="token punctuation">:peripheral options<span class="token punctuation">:nil<span class="token punctuation">]<span class="token punctuation">;
<span class="token punctuation">}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<pre class="line-numberslanguage-csharp"><code class="language-csharp"><span class="token preprocessor property">#<span class="token directive keyword">pragma mark 连接外设--成功
<span class="token operator">- <span class="token punctuation">(<span class="token keyword">void<span class="token punctuation">)centralManager<span class="token punctuation">:<span class="token punctuation">(CBCentralManager <span class="token operator">*<span class="token punctuation">)central didConnectPeripheral<span class="token punctuation">:<span class="token punctuation">(CBPeripheral <span class="token operator">*<span class="token punctuation">)peripheral<span class="token punctuation">{
    <span class="token comment">//连接成功后停止扫描,节省内存
    <span class="token punctuation"><span class="token punctuation">;
    peripheral<span class="token punctuation">.<span class="token keyword">delegate <span class="token operator">= self<span class="token punctuation">;
    self<span class="token punctuation">.peripheral <span class="token operator">= peripheral<span class="token punctuation">;
    <span class="token comment">//4.扫描外设的服务
    <span class="token comment">/**
   --   外设的服务、特征、描述等方法是CBPeripheralDelegate的内容,所以要先设置代理peripheral.delegate = self
   --   参数表示你关心的服务的UUID,比如我关心的是"FFE0",参数就可以为@[].那么didDiscoverServices方法回调内容就只有这两个UUID的服务,不会有其他多余的内容,提高效率。nil表示扫描所有服务
   --   成功发现服务,回调didDiscoverServices
   */
    <span class="token punctuation"><span class="token punctuation">]<span class="token punctuation">]<span class="token punctuation">;
    <span class="token keyword">if <span class="token punctuation">(<span class="token punctuation"><span class="token punctuation">) <span class="token punctuation">{
       <span class="token comment">// 已经连接
      <span class="token punctuation"><span class="token punctuation">;
    <span class="token punctuation">}
<span class="token punctuation">}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code><br><br></pre>
<pre class="line-numberslanguage-objectivec"><code class="language-objectivec"><span class="token macro property">#<span class="token directive keyword">pragma mark 连接外设——失败
<span class="token operator">- <span class="token punctuation">(<span class="token keyword">void<span class="token punctuation">)centralManager<span class="token punctuation">:<span class="token punctuation">(CBCentralManager <span class="token operator">*<span class="token punctuation">)central didFailToConnectPeripheral<span class="token punctuation">:<span class="token punctuation">(CBPeripheral <span class="token operator">*<span class="token punctuation">)peripheral error<span class="token punctuation">:<span class="token punctuation">(NSError <span class="token operator">*<span class="token punctuation">)error<span class="token punctuation">{
    <span class="token function">NSLog<span class="token punctuation">(<span class="token string">@"%@"<span class="token punctuation">, error<span class="token punctuation">)<span class="token punctuation">;
<span class="token punctuation">}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code><br><br></pre>
<pre class="line-numberslanguage-objectivec"><code class="language-objectivec"><span class="token macro property">#<span class="token directive keyword">pragma mark 取消与外设的连接回调
<span class="token operator">- <span class="token punctuation">(<span class="token keyword">void<span class="token punctuation">)centralManager<span class="token punctuation">:<span class="token punctuation">(CBCentralManager <span class="token operator">*<span class="token punctuation">)central didDisconnectPeripheral<span class="token punctuation">:<span class="token punctuation">(CBPeripheral <span class="token operator">*<span class="token punctuation">)peripheral error<span class="token punctuation">:<span class="token punctuation">(NSError <span class="token operator">*<span class="token punctuation">)error<span class="token punctuation">{
    <span class="token function">NSLog<span class="token punctuation">(<span class="token string">@"%@"<span class="token punctuation">, peripheral<span class="token punctuation">)<span class="token punctuation">;
<span class="token punctuation">}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<pre class="line-numberslanguage-undefined"><code class="language-undefined">d、获得外围设备的服务;<br></code></pre>
<pre class="line-numberslanguage-objectivec"><code class="language-objectivec"><span class="token macro property">#<span class="token directive keyword">pragma mark 发现服务回调
<span class="token operator">- <span class="token punctuation">(<span class="token keyword">void<span class="token punctuation">)peripheral<span class="token punctuation">:<span class="token punctuation">(CBPeripheral <span class="token operator">*<span class="token punctuation">)peripheral didDiscoverServices<span class="token punctuation">:<span class="token punctuation">(NSError <span class="token operator">*<span class="token punctuation">)error<span class="token punctuation">{
   
    <span class="token comment">//NSLog(@"didDiscoverServices,Error:%@",error);
    CBService <span class="token operator">* __nullable findService <span class="token operator">= nil<span class="token punctuation">;
    <span class="token comment">// 遍历服务
    <span class="token keyword">for <span class="token punctuation">(CBService <span class="token operator">*service <span class="token keyword">in peripheral<span class="token punctuation">.services<span class="token punctuation">)
    <span class="token punctuation">{
      <span class="token comment">//NSLog(@"UUID:%@",service.UUID);
      <span class="token keyword">if <span class="token punctuation">(<span class="token punctuation">[<span class="token punctuation"> isEqual<span class="token punctuation">:<span class="token punctuation"><span class="token punctuation">]<span class="token punctuation">)
      <span class="token punctuation">{
            findService <span class="token operator">= service<span class="token punctuation">;
      <span class="token punctuation">}
    <span class="token punctuation">}
    <span class="token function">NSLog<span class="token punctuation">(<span class="token string">@"Find Service:%@"<span class="token punctuation">,findService<span class="token punctuation">)<span class="token punctuation">;
    <span class="token keyword">if <span class="token punctuation">(findService<span class="token punctuation">)
      <span class="token punctuation"><span class="token punctuation">;
<span class="token punctuation">}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<pre class="line-numberslanguage-undefined"><code class="language-undefined">e、获得服务的特征;<br><br></code></pre>
<pre class="line-numberslanguage-objectivec"><code class="language-objectivec"><span class="token macro property">#<span class="token directive keyword">pragma mark 发现特征回调
<span class="token comment">/**
--发现特征后,可以根据特征的properties进行:读readValueForCharacteristic、写writeValue、订阅通知setNotifyValue、扫描特征的描述discoverDescriptorsForCharacteristic。
**/
<span class="token operator">- <span class="token punctuation">(<span class="token keyword">void<span class="token punctuation">)peripheral<span class="token punctuation">:<span class="token punctuation">(CBPeripheral <span class="token operator">*<span class="token punctuation">)peripheral didDiscoverCharacteristicsForService<span class="token punctuation">:<span class="token punctuation">(CBService <span class="token operator">*<span class="token punctuation">)service error<span class="token punctuation">:<span class="token punctuation">(NSError <span class="token operator">*<span class="token punctuation">)error<span class="token punctuation">{
    <span class="token keyword">for <span class="token punctuation">(CBCharacteristic <span class="token operator">*characteristic <span class="token keyword">in service<span class="token punctuation">.characteristics<span class="token punctuation">) <span class="token punctuation">{
      <span class="token keyword">if <span class="token punctuation">(<span class="token punctuation"><span class="token punctuation">]<span class="token punctuation">) <span class="token punctuation">{
            
            <span class="token comment">/**
             -- 读取成功回调didUpdateValueForCharacteristic
             */
            <span class="token keyword">self<span class="token punctuation">.characteristic <span class="token operator">= characteristic<span class="token punctuation">;
            <span class="token comment">// 接收一次(是读一次信息还是数据经常变实时接收视情况而定, 再决定使用哪个)
<span class="token comment">//            ;
            <span class="token comment">// 订阅, 实时接收
            <span class="token punctuation"><span class="token punctuation">;
            
            <span class="token comment">// 发送下行指令(发送一条)
            NSData <span class="token operator">*data <span class="token operator">= <span class="token punctuation">[<span class="token string">@"硬件工程师给我的指令, 发送给蓝牙该指令, 蓝牙会给我返回一条数据" dataUsingEncoding<span class="token punctuation">:NSUTF8StringEncoding<span class="token punctuation">]<span class="token punctuation">;
            <span class="token comment">// 将指令写入蓝牙
                <span class="token punctuation">[<span class="token keyword">self<span class="token punctuation">.peripheral writeValue<span class="token punctuation">:data forCharacteristic<span class="token punctuation">:characteristic type<span class="token punctuation">:CBCharacteristicWriteWithResponse<span class="token punctuation">]<span class="token punctuation">;
      <span class="token punctuation">}

      <span class="token comment">/**
         -- 当发现characteristic有descriptor,回调didDiscoverDescriptorsForCharacteristic
         */
      <span class="token punctuation"><span class="token punctuation">;
    <span class="token punctuation">}
<span class="token punctuation">}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<pre class="line-numberslanguage-undefined"><code class="language-undefined">f、从外围设备读取数据;<br></code></pre>
<pre class="line-numberslanguage-objectivec"><code class="language-objectivec"><span class="token macro property">#<span class="token directive keyword">pragma mark - 获取值
<span class="token operator">- <span class="token punctuation">(<span class="token keyword">void<span class="token punctuation">)peripheral<span class="token punctuation">:<span class="token punctuation">(CBPeripheral <span class="token operator">*<span class="token punctuation">)peripheral didUpdateValueForCharacteristic<span class="token punctuation">:<span class="token punctuation">(CBCharacteristic <span class="token operator">*<span class="token punctuation">)characteristic error<span class="token punctuation">:<span class="token punctuation">(NSError <span class="token operator">*<span class="token punctuation">)error<span class="token punctuation">{
    <span class="token comment">// characteristic.value就是蓝牙给我们的值(我这里是json格式字符串)
    NSData <span class="token operator">*jsonData <span class="token operator">= <span class="token punctuation"><span class="token punctuation">;
      NSDictionary <span class="token operator">*dataDic <span class="token operator">= <span class="token punctuation"><span class="token punctuation">;
    <span class="token comment">// 将字典传出去就可以使用了
<span class="token punctuation">}

<span class="token macro property">#<span class="token directive keyword">pragma mark - 中心读取外设实时数据
<span class="token operator">- <span class="token punctuation">(<span class="token keyword">void<span class="token punctuation">)peripheral<span class="token punctuation">:<span class="token punctuation">(CBPeripheral <span class="token operator">*<span class="token punctuation">)peripheral didUpdateNotificationStateForCharacteristic<span class="token punctuation">:<span class="token punctuation">(CBCharacteristic <span class="token operator">*<span class="token punctuation">)characteristic error<span class="token punctuation">:<span class="token punctuation">(NSError <span class="token operator">*<span class="token punctuation">)error<span class="token punctuation">{
    <span class="token keyword">if <span class="token punctuation">(characteristic<span class="token punctuation">.isNotifying<span class="token punctuation">) <span class="token punctuation">{
      <span class="token punctuation"><span class="token punctuation">;
    <span class="token punctuation">} <span class="token keyword">else <span class="token punctuation">{
      <span class="token function">NSLog<span class="token punctuation">(<span class="token string">@"Notification stopped on %@.Disconnecting"<span class="token punctuation">, characteristic<span class="token punctuation">)<span class="token punctuation">;
      <span class="token function">NSLog<span class="token punctuation">(<span class="token string">@"%@"<span class="token punctuation">, characteristic<span class="token punctuation">)<span class="token punctuation">;
      <span class="token punctuation">[<span class="token keyword">self<span class="token punctuation">.centralManager cancelPeripheralConnection<span class="token punctuation">:peripheral<span class="token punctuation">]<span class="token punctuation">;
    <span class="token punctuation">}
<span class="token punctuation">}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<pre class="line-numberslanguage-undefined"><code class="language-undefined">g、给外围设备发送(写入)数据。<br></code></pre>
<pre class="line-numberslanguage-objectivec"><code class="language-objectivec"><span class="token comment">// 上文中发现特征之后, 发送下行指令的时候其实就是向蓝牙中写入数据
<span class="token comment">// 例:
<span class="token comment">// 发送检查蓝牙命令
<span class="token operator">- <span class="token punctuation">(<span class="token keyword">void<span class="token punctuation">)writeCheckBleWithBle
<span class="token punctuation">{
    _style <span class="token operator">= <span class="token number">1<span class="token punctuation">;
    <span class="token comment">// 发送下行指令(发送一条)
    NSData <span class="token operator">*data <span class="token operator">= <span class="token punctuation">[<span class="token string">@"硬件工程师提供给你的指令, 类似于5E16010203...这种很长一串" dataUsingEncoding<span class="token punctuation">:NSUTF8StringEncoding<span class="token punctuation">]<span class="token punctuation">;
    <span class="token punctuation">[<span class="token keyword">self<span class="token punctuation">.peripheral writeValue<span class="token punctuation">:data forCharacteristic<span class="token punctuation">:<span class="token keyword">self<span class="token punctuation">.characteristic type<span class="token punctuation">:CBCharacteristicWriteWithResponse<span class="token punctuation">]<span class="token punctuation">;
<span class="token punctuation">}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code><br><br><br></pre>
<pre class="line-numberslanguage-objectivec"><code class="language-objectivec"><span class="token operator">- <span class="token punctuation">(<span class="token keyword">void<span class="token punctuation">)scanDevice
<span class="token punctuation">{
    <span class="token keyword">if <span class="token punctuation">(_centralManager <span class="token operator">== nil<span class="token punctuation">) <span class="token punctuation">{
    <span class="token keyword">self<span class="token punctuation">.centralManager <span class="token operator">= <span class="token punctuation">[<span class="token punctuation"> initWithDelegate<span class="token punctuation">:<span class="token keyword">self queue<span class="token punctuation">:nil<span class="token punctuation">]<span class="token punctuation">;
    <span class="token punctuation"><span class="token punctuation">;
   <span class="token punctuation">}
<span class="token punctuation">}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<pre class="line-numberslanguage-csharp"><code class="language-csharp"><span class="token preprocessor property">#<span class="token directive keyword">pragma mark 断开连接
<span class="token operator">- <span class="token punctuation">(<span class="token keyword">void<span class="token punctuation">)disConnectPeripheral<span class="token punctuation">{
    <span class="token comment">/**
   -- 断开连接后回调didDisconnectPeripheral
   -- 注意断开后如果要重新扫描这个外设,需要重新调用;
   */
    <span class="token punctuation"><span class="token punctuation">;
<span class="token punctuation">}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<pre class="line-numberslanguage-csharp"><code class="language-csharp"><span class="token preprocessor property">#<span class="token directive keyword">pragma mark 停止扫描外设
<span class="token operator">- <span class="token punctuation">(<span class="token keyword">void<span class="token punctuation">)stopScanPeripheral<span class="token punctuation">{
    <span class="token punctuation"><span class="token punctuation">;
<span class="token punctuation">}</span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<pre class="line-numberslanguage-undefined"><code class="language-undefined">&nbsp;</code></pre>
</div>
</div>
</div>
<br><br></div><br><br>
来源:https://www.cnblogs.com/ZsjXxy/p/11898793.html
頁: [1]
查看完整版本: iOS——蓝牙开发