# LBLECentral

這個類別可讓 LinkIt 7697 作為一個 BLE 主控裝置。透過它，可以掃描鄰近的 BLE 周邊裝置，檢查其廣播內容，並且取得其裝置地址。

**LBLECentral** 類別並不提供連線到周邊裝置的服務。開發者應該透過 **LBLEClient** 類別來連線到特定的裝置地址，以存取周邊裝置上面的資料特性。

**LBLECentral** 實際上是一個單件（singleton），開發者不需要創建物件，只需要直接呼叫 `LBLECentral.scan()`，然後就可以用 `LBLECentral.getPeripheralCount()` 來取得掃描到的裝置數量。接著就可以使用比如 `getName()` 跟 `getAddress()` 等方法來取得裝置資訊。如下：

```
// 開始掃描
LBLECentral.scan();
// 等待五秒鐘
for(int i = 0; i < 5; ++i)
{
  delay(1000);
  Serial.print(".");
}
// 印出掃描到的裝置的名字
const int found = LBLECentral.getPeripheralCount();
for (int i = 0; i < found; ++i) {
    Serial.println(LBLECentral.getName(i));
}
```

### 跟掃描相關的 API <a href="#lblecentral-gen-sao-miao-xiang-guan-de-api" id="lblecentral-gen-sao-miao-xiang-guan-de-api"></a>

&#x20;\> scan()

&#x20;\> stopScan()

&#x20;\> getPeripheralCount ()

{% tabs %}
{% tab title="scan()" %}
開始掃描鄰近的周邊裝置。此 API 會讓系統進入掃描狀態，並且在背景持續掃描周邊的 BLE 裝置。

當掃描到新的周邊裝置之後，系統會自動更新內部的資料，開發者可呼叫 **getPeripheralCount()** 來取得當前掃描到的裝置數量，然後根據裝置的索引號（從 0 開始），用 **`getPeripheralName`** 或是 **`isBeacon`** 等 API 來取得每個裝置的資訊。

**Syntax**

**Parameters**

n/a

**Returns**

n/a
{% endtab %}

{% tab title=" stopScan()" %}
停止掃描周邊裝置。掃描到的裝置列表不會被清空，只是不再被更新。

**Syntax**

**Parameters**

n/a

**Returns**

n/a
{% endtab %}

{% tab title="getPeripheralCount ()" %}
取得目前掃描到的周邊裝置數量。

**Syntax**

**Parameters**

n/a

**Returns**

已知的周邊裝置數目
{% endtab %}
{% endtabs %}

### 周邊裝置資訊相關 API <a href="#lblecentral-zhou-bian-zhuang-zhi-zi-xun-xiang-guan-api" id="lblecentral-zhou-bian-zhuang-zhi-zi-xun-xiang-guan-api"></a>

當取得周邊裝置的數量之後，可根據周邊裝置的索引號（從 0 開始，到「周邊裝置的數量 - 1」），透過下列的 API 來取得周邊裝置的相關資訊。要注意的是，因為 BLE 廣播資訊可以高度自訂，不是所有的周邊裝置都會提供同樣的資訊。比如說，有的裝置可能不會提供自己的裝置名稱。在這種情況下，將會得到空白的結果。

&#x20;getAddress()

&#x20;getBLEAddress()

&#x20;getManufacturer()

&#x20;getName()

&#x20;getRSSI()

&#x20;getTxPower()

&#x20;getServiceUuid()

{% tabs %}
{% tab title="getAddress()" %}
根據索引號取得裝置的字串形式位址。

**Syntax**

String addressString = *LBLECentral*.getAddress(index);

**Parameters**

*index* 從 0 到 `(getRemotePeripheralCount() - 1) 之間的索引號。相同的索引號代表相同的裝置。`

**Returns**

該周邊裝置的裝置地址，以字串形式呈現。
{% endtab %}

{% tab title=" getBLEAddress()" %}
根據索引號取得裝置地址。

**Syntax**

LBLEAddress address = *LBLECentral*.getBLEAddress(index);

**Parameters**

*index* 從 0 到 (getRemotePeripheralCount() - 1) 之間的索引號。相同的索引號代表相同的裝置。

**Returns**

一個 **LBLEAddress** 物件，代表裝置地址。
{% endtab %}

{% tab title=" getManufacturer()" %}
取得該裝置的廣播封包內的「製造商資訊」

**Syntax**

String manufacturerName = *LBLECentral*.getManufacturer(index);

**Parameters**

*index* 從 0 到 (getRemotePeripheralCount() - 1) 之間的索引號。相同的索引號代表相同的裝置。

**Returns**

廣播封包內的製造商名稱。如果廣播封包內沒有提供此欄位，則回傳空字串。
{% endtab %}

{% tab title=" getName()" %}
取得裝置的名稱。

**Syntax**

String name = *LBLECentral*.getName(index);

**Parameters**

*index* 從 0 到 (getRemotePeripheralCount() - 1) 之間的索引號。相同的索引號代表相同的裝置。

**Returns**

廣播封包內的裝置名稱。如果廣播封包內沒有提供此欄位，則回傳空字串。

<br>
{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="getRSSI()" %}
取得掃描時的 RSSI 信號強度。

**Syntax**

**Parameters**

*index* 從 0 到 (getRemotePeripheralCount() - 1) 之間的索引號。相同的索引號代表相同的裝置。

**Returns**

RSSI 信號強度，以 dbm 為單位。
{% endtab %}

{% tab title="getTxPower()" %}
取得廣播封包內的 txPower 欄位數值。

**Syntax**

**Parameters**

*index* 從 0 到 (getRemotePeripheralCount() - 1) 之間的索引號。相同的索引號代表相同的裝置。

**Returns**

廣播封包內的 txPower 數值。如果廣播封包內沒有提供此欄位，則回傳 0。取得廣播封包內的 txPower 欄位數值。

**Syntax**

**Parameters**

*index* 從 0 到 (getRemotePeripheralCount() - 1) 之間的索引號。相同的索引號代表相同的裝置。

**Returns**

廣播封包內的 txPower 數值。如果廣播封包內沒有提供此欄位，則回傳 0。
{% endtab %}

{% tab title="getServiceUuid()" %}
取得該裝置廣播的服務 UUID。開發者可以透過此資訊，得知該裝置主要提供哪一個 GATT 服務。

**Syntax**

**Parameters**

*index* 從 0 到 (getRemotePeripheralCount() - 1) 之間的索引號。相同的索引號代表相同的裝置。

**Returns**

廣播封包內的服務 UUID。如果廣播封包內沒有提供此欄位，則回傳無效的 **LBLEUuid** 物件。
{% endtab %}

{% tab title=" getIBeaconInfo()" %}
解析廣播封包內的 iBeacon 資訊欄位

可在此連結中找到 iBeacon 的欄位說明：<https://developer.mbed.org/blog/entry/BLE-Beacons-URIBeacon-AltBeacons-iBeacon/#iBeacon>

**Syntax**

LBLEUuid uuid;

uint16\_t major, minor;

uint8\_t txPower;

bool isIBeacon = *LBLECentral*.getIBeaconInfo(index, uuid, major, minor, txPower);

**Parameters**

|           |                                                |
| --------- | ---------------------------------------------- |
| *index*   | 從 0 到 (getRemotePeripheralCount() - 1) 之間的索引號。 |
| *uuid*    | iBeacon 的 UUID                                 |
| *major*   | iBeacon 的 major ID                             |
| *minor*   | iBeacon 的 minor ID                             |
| *txPower* | iBeacon 的 txPower 資訊                           |

**Returns**

true： 此裝置的廣播封包確實為 iBeacon 格式。

false：此裝置的廣播封包不是 iBeacon 格式，無法解析。
{% endtab %}
{% endtabs %}
