1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

久しぶりに Mac + Node.js で noble(フォーク版 2種)を使った BLEスキャンを試す【2025年5月版】

Last updated at Posted at 2025-05-29

はじめに

昨年、以下の記事を書いた時に試した Mac での BLEスキャンを、久しぶりに試してみた話です。

●Mac で noble を使って BLE対応のデバイスをスキャンする+α(2024年5月版) - Qiita
 https://qiita.com/youtoy/items/44216ea20c6506d80ed8

BLEスキャンを試す

去年と同じパッケージで試す

昨年やそれ以前も、よく以下を使っていました。

●@abandonware/noble - npm
 https://www.npmjs.com/package/@abandonware/noble

これは、長年アップデートがされていない noble のフォーク版です(※ 4ヶ月前に更新されているようです)。今回も、まずはこれを試しておきます。

パッケージのインストール

以下のコマンドでパッケージをインストールします。

npm install @abandonware/noble

昨年と同様、いくつかのワーニングが出ます。

image.png

コードと実行結果

今回のお試し用のコードは、以下の通りです。

app.js
const noble = require("@abandonware/noble");

noble.on("stateChange", async (state) => {
  if (state === "poweredOn") {
    console.log("Bluetooth がオンになりました。スキャンを開始します…");
    // 第1引数に空配列を渡すと、全てのサービスUUIDを対象にスキャン
    // 第2引数 true で重複通知を許可(継続的に情報を取得したい場合)
    try {
      await noble.startScanningAsync([], true);
    } catch (err) {
      console.error("スキャン開始エラー:", err);
    }
  } else {
    console.log("Bluetooth がオフです。スキャンを停止します。");
    try {
      await noble.stopScanningAsync();
    } catch (err) {
      console.error("スキャン停止エラー:", err);
    }
  }
});

noble.on("discover", (peripheral) => {
  console.log(`発見: ${peripheral.advertisement.localName}`);
  console.log(`${peripheral}`);
});

noble.on("warning", (message) => {
  console.warn("warning:", message);
});
noble.on("error", (err) => {
  console.error("error:", err);
});

上記を実行した結果、以下などのスキャン結果が大量に表示されるのが確認できました。

image.png

別のパッケージを試す

他に、生成AI+検索を使ってみたり、npm のページで検索してみたりしたところ、noble のフォーク版で以下が出てきました。

●@stoprocent/noble - npm
 https://www.npmjs.com/package/@stoprocent/noble

こちらは、9日前に更新されているようです。また上記のページや以下のページを見ると、このフォーク版の追加機能について書かれています。

●stoprocent/noble: A Node.js BLE (Bluetooth Low Energy) central module
 https://github.com/stoprocent/noble?tab=readme-ov-file#about-this-fork

具体的には以下のとおりです。

image.png

余談

npm のページで検索していて以下を見かけたのですが、この中で @stoprocent/noble が使われていました。

●@matter/nodejs-ble - npm
 https://www.npmjs.com/package/@matter/nodejs-ble

パッケージのインストール

以下のコマンドでパッケージをインストールします。

npm install @stoprocent/noble

こちらも少しワーニングがでました。

image.png

コードと実行結果

今回のお試し用のコードは、以下の通りです。

app.mjs
import noble from "@stoprocent/noble";

try {
  await noble.waitForPoweredOnAsync();
  await noble.startScanningAsync();

  for await (const peripheral of noble.discoverAsync()) {
    console.log(
      `Found device: ${peripheral.advertisement.localName || "Unknown"}`
    );
    console.log(`${peripheral}`);

    if (peripheral.advertisement.localName === "MyDevice") {
      break;
    }
  }

  await noble.stopScanningAsync();
} catch (error) {
  console.error("Discovery error:", error);
  await noble.stopScanningAsync();
}

上記を実行した結果、以下などのスキャン結果が大量に表示されるのが確認できました。

image.png

おわりに

これまでよく「@abandonware/noble」を使っていましたが、今回初めて試した「@stoprocent/noble」を、今後しばらく試してみようかと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?