ESP32でBluetooth Low Energy (BLE) 通信を設定します。

  1. 必要なライブラリをインクルードします。
    #include <ArduinoBLE.h>
    
  2. 定数を設定します。UUIDはジェネレータなどで生成してください。
    #define DEVICE_NAME "DEMO"
    #define SERVICE_UUID "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
    #define CHARACTERISTIC_UUID "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
    
  3. 初期化
    BLEService bleService(SERVICE_UUID);
    BLECharacteristic bleCharacteristic(CHARACTERISTIC_UUID, BLERead | BLEWrite, 20);
    
  4. イベントハンドラを追加します。
    /**
     * 書き込み時のイベントハンドラ
     */
    void written(BLEDevice central, BLECharacteristic characteristic) {
      Serial.print("onWrite: ");
      String value = "";
      for (int i = 0; i < characteristic.valueLength(); i++) {
        value += (char)characteristic.value()[i];
      }
      Serial.println(value);
    }
    /**
     * 読み込み時のイベントハンドラ
     */
    void read(BLEDevice central, BLECharacteristic characteristic) {
      Serial.print("read: ");
    
      std::string value = "Hello world!";
      characteristic.writeValue(value.c_str());
    }
    
  5. BLEをセットアップします。
    void setup() {
      if (!BLE.begin()) {
        Serial.println("starting Bluetooth® Low Energy module failed!");
        while (1);
      }
    
      BLE.setLocalName(DEVICE_NAME);
      BLE.setAdvertisedService(bleService);
    
      bleService.addCharacteristic(bleCharacteristic);
      BLE.addService(bleService);
      bleCharacteristic.setEventHandler(BLERead, read);
      bleCharacteristic.setEventHandler(BLEWritten, written);
    
      BLE.advertise();
    }
  6. メインループ
    
    void loop() {
      BLE.poll();
    }
    
  7. 全体
    
    #include <Arduino.h>
    #include <ArduinoBLE.h>
    
    #define DEVICE_NAME "DEMO"
    #define SERVICE_UUID "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
    #define CHARACTERISTIC_UUID "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
    
    BLEService bleService(SERVICE_UUID);
    BLECharacteristic bleCharacteristic(CHARACTERISTIC_UUID, BLERead | BLEWrite, 20);
    
    /**
     * 書き込み時のイベントハンドラ
     */
    void characteristicWritten(BLEDevice central, BLECharacteristic characteristic) {
      Serial.print("onWrite: ");
      String value = "";
      for (int i = 0; i < characteristic.valueLength(); i++) {
        value += (char)characteristic.value()[i];
      }
      Serial.println(value);
    }
    
    /**
     * 読み込み時のイベントハンドラ
     */
    void read(BLEDevice central, BLECharacteristic characteristic) {
      Serial.print("read: ");
    
      std::string value = "Hello world!";
      characteristic.writeValue(value.c_str());
    }
    
    /**
     * 初期化
     */
    void setup() {
      // シリアルポートを初期化
      Serial.begin(115200);
      while (!Serial);
    
      if (!BLE.begin()) {
        Serial.println("starting Bluetooth® Low Energy module failed!");
        while (1);
      }
    
      BLE.setLocalName(DEVICE_NAME);
      BLE.setAdvertisedService(bleService);
    
      bleService.addCharacteristic(bleCharacteristic);
      BLE.addService(bleService);
      bleCharacteristic.setEventHandler(BLERead, read);
      bleCharacteristic.setEventHandler(BLEWritten, written);
    
      BLE.advertise();
    }
    
    /**
     * メインループ
     */
    void loop() {
      BLE.poll();
    }
    
ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。