以下の内容はhttps://shuzo-kino.hateblo.jp/entry/2024/08/07/233853より取得しました。


M5stamp S3で BLEビーコンで遊んでみる その1:まずは書いてみる

M5stamp S3にはESP32-S3FN8が搭載されているのでBLEにも対応しています。
別件でBLEビーコンを実験してみたかったので、Google大本営謹製のEDDYstoneという実装をお借りして、色々実験してみようと思います。

実際のところ

実装のうち、Eddystone-URL……名前そのまんまの通り、URLを発行する実装です。
あまり長大なのは送れず、頭と尻尾を除いた本体17バイトほど。

#include <M5StampS3.h>
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
#include <BLEAdvertising.h>

// Eddystone-URLの設定
#define EDDYSTONE_URL_FRAME_TYPE 0x10
#define TX_POWER 0xEE  // -18dBm
const char* url = "https://example.com";

void setup() {
  M5.begin();
  
  // BLEデバイスの初期化
  BLEDevice::init("M5StampS3-Eddystone");
  
  // BLEサーバーの作成
  BLEServer *pServer = BLEDevice::createServer();
  
  // アドバタイジングの設定
  BLEAdvertising *pAdvertising = pServer->getAdvertising();
  
  // Eddystone-URLフレームの作成
  uint8_t eddystoneData[20];
  int dataLength = 0;
  
  eddystoneData[dataLength++] = EDDYSTONE_URL_FRAME_TYPE;
  eddystoneData[dataLength++] = TX_POWER;
  
  // URLエンコーディング
  eddystoneData[dataLength++] = 0x03;  // https://
  for (int i = 0; i < strlen(url); i++) {
    eddystoneData[dataLength++] = url[i];
  }
  
  // アドバタイジングデータの設定
  pAdvertising->setAdvertisementData(BLEAdvertisementData()
    .setFlags(0x06)  // BR/EDR Not Supported & LE General Discoverable Mode
    .setManufacturerData(std::string((char*)eddystoneData, dataLength)));
  
  // アドバタイジング開始
  pAdvertising->start();
  
  Serial.println("Eddystone-URL Beacon started");
}

void loop() {
  // メインループは空のままでOK
}



以上の内容はhttps://shuzo-kino.hateblo.jp/entry/2024/08/07/233853より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14