ESP32-WROOM-32にBLE接続する

技術関連

1,アドバタイズをする

ESP32が外部から見られるように、名前をみんなに教えます。

ESP32-ROOM-32のプログラム

#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>

// Notify用のCharacteristicポインタ
BLECharacteristic* pCharacteristic;

// 接続状態のフラグ(オプション)
bool deviceConnected = false;

void setup() {
  Serial.begin(115200);
  Serial.println("BLEサンプル開始");

  // 1. デバイス初期化 & 名前設定
  BLEDevice::init("MyESP32-BLE");

  // 2. サーバー(Peripheral)作成
  BLEServer* pServer = BLEDevice::createServer();

  // 3. サービス作成(任意のUUID)
  BLEService* pService = pServer->createService("12345678-1234-5678-9012-345678901234");

  // 4. キャラクタリスティック作成(読み取り + 通知の権限)
  pCharacteristic = pService->createCharacteristic(
    "abcd1234-abcd-abcd-abcd-abcdefabcdef",
    BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY
  );

  // 5. 初期値設定
  pCharacteristic->setValue("Hello BLE!");

  // 6. Notifyを許可する設定(iOSの一部端末などで必須)
  pCharacteristic->addDescriptor(new BLE2902());

  // 7. サービス開始
  pService->start();

  // 8. アドバタイズ開始
  BLEAdvertising* pAdvertising = BLEDevice::getAdvertising();
  pAdvertising->start();

  Serial.println("アドバタイズ中:MyESP32-BLE");
}

void loop() {
  // 9. 5秒ごとにNotifyで新しいデータを送る
  static unsigned long lastTime = 0;
  if (millis() - lastTime > 5000) {
    lastTime = millis();

    // 送信する文字列を生成(ミリ秒を文字列に)
    String data = "Millis: " + String(millis());
    pCharacteristic->setValue(data.c_str());  // 値をセット
    pCharacteristic->notify();               // 通知送信

    Serial.println("Notify送信: " + data);
  }
}
タイトルとURLをコピーしました