MetaWear Board

The MetaWear interface is a software representation of the MetaWear boards and is the central class of the MetaWear API. It contains methods for connecting, disconnecting, saving and restoring state.

You always get a MetaWear object through the MetaWearScanner , afterwards, keep a reference to it as long as the app is running. From here on assume that inside code blocks device is a MetaWear object reference

Bluetooth LE Connection

Before using any API features, you must first connect to the board with connectAsync. The returned task will finish when a connection has been established and the MetaWear state has been initialized.

device.connectAndSetup().continueWith { t in
    if t.isCancelled {
        print("cancelConnection() called before connection completed")
    } else if t.isFaulted {
        print("Connection Error: \(t.error?.localizedDescription ?? "N/A")")
    } else {
        print("Connection Success")

Conversely, call cancelConnection to close the connection. If there is a pending connectAndSetup task when cancelConnection is called, the connect task will be cancelled.

device.cancelConnection().continueWith { t in

Watching for Disconnects

It is often useful to handle BLE disconnection events. The task returned from connectAndSetup will completes once this device disconnects, either expectedly or unexpectedly.

device.connectAndSetup().continueWith { t in
    t.result?.continueWith { t in
        print("Lost connection")

API Access Queue

The core of this SDK is the MetaWearCpp library, and it’s not indented to be thread safe. Any time you call one of its mbl_mw_* functions you will want to make sure you are on the apiAccessQueue or apiAccessExecutor in order to ensure crash free behavior.

Saving MetaWears

If you expect to re-connect to a specific MetaWear device, you can “remember” it for easy retrieval later on through the MetaWearScanner.

Once you are done with the device, then “forget” it to remove it from the list.


Connection State

Get the state of the SDK connection.

if device.isConnectedAndSetup {


Apple generates a unique identifier for each BLE device. Note, two different Apple devices will generate two different identifiers for the same MetaWear. It might be useful to use device.mac instead.



To fully reset your MetaWear board:

device.connectAndSetup().continueWith(.mainThread) { t in
    device.clearAndReset() // this handles everything for you
    print("Clear and Reset the board")