M5でBluetoothを使う備忘録

M5Stack/Stick/AtomでBluetoothを使う情報があまりなかったので備忘録
BLEDevice関連ライブラリに含まれる関数の一覧と説明(リファレンス作りました)

BLEDevice

  1. init(std::string deviceName)
    概要: BLEデバイスを初期化し、デバイス名を設定します。最初に必ず呼び出します。
#include <BLEDevice.h>

void setup() {
  BLEDevice::init("M5Stack_BLE_Server");
}

2. createServer()
概要: 新しいBLEサーバーを作成します。サービスを作成するために使います。

BLEServer *pServer;

void setup() {
  BLEDevice::init("M5Stack_BLE_Server");
  pServer = BLEDevice::createServer();
}

3. createClient()
新しいBLEクライアントを作成します。サーバーに接続するために使います。

BLEClient *pClient;

void setup() {
  BLEDevice::init("");
  pClient = BLEDevice::createClient();
}

4. getScan()
スキャン用のBLEScanオブジェクトを取得します。スキャン開始などに使います。

BLEScan *pScan;

void setup() {
  BLEDevice::init("");
  pScan = BLEDevice::getScan();
}

BLEServer Class

  1. createService(const char* uuid)
    指定したUUIDを持つサービスを作成します。
BLEServer *pServer;
BLEService *pService;

void setup() {
  BLEDevice::init("M5Stack_BLE_Server");
  pServer = BLEDevice::createServer();
  pService = pServer->createService("12345678-1234-5678-1234-56789abcdef0");
}

2. getAdvertising()
広告(アドバタイジング)オブジェクトを取得します。startAdvertising()と組み合わせます。

BLEAdvertising *pAdvertising;

void setup() {
  BLEDevice::init("M5Stack_BLE_Server");
  pAdvertising = BLEDevice::createServer()->getAdvertising();

startAdvertising()
広告を開始してクライアントからの接続を待ち受けます。

BLEServer *pServer;

void setup() {
  BLEDevice::init("M5Stack_BLE_Server");
  pServer = BLEDevice::createServer();
  pServer->getAdvertising()->start();
}

BLEClient Class

connect(BLEAdvertisedDevice* device)
スキャンして見つけたBLEデバイスに接続します。

BLEClient *pClient;
BLEAdvertisedDevice myDevice; // ※通常はスキャン結果から取得

void setup() {
  BLEDevice::init("");
  pClient = BLEDevice::createClient();
  pClient->connect(&myDevice);
}

disconnect()
現在接続中のデバイスとの接続を切断します。

void loop() {
  if (pClient->isConnected()) {
    pClient->disconnect();
  }
}


使い方の例

  1. I2C通信の初期化
M5_EXTIO2 extio2;
if (extio2.begin(&Wire, 21, 22)) {
    Serial.println("EXTIO2 Initialized");
} else {
    Serial.println("EXTIO2 Initialization Failed");
}

2. ピンモードの設定

・全ピンを入力モードに設定する:

extio2.setAllPinMode(DIGITAL_INPUT_MODE);

・ピン2を出力モードに設定する:

extio2.setPinMode(2, DIGITAL_OUTPUT_MODE);

3. デジタル出力

・ピン3をHIGHに設定:

extio2.setDigitalOutput(3, 1);

・全ピンを一括設定:

extio2.setAllDigitalOutputs(0b10101010);

4. アナログ入力の読み取り

uint16_t analogValue = extio2.getAnalogInput(0, _12bit); 
Serial.println(analogValue);

m5Atom matrixの場合、通常のi2C(Wire: SDA=21, SCL=25)がすでにDisplay用で使われているので、
もう一つのi2C(Wire1: SDA=26, SCL=32)を使います。

これを使って前回のコードを直していきます(この件だいぶ悩みました…💦)