Node.jsむけBLEライブラリnoble実行で「Error: Cannot find module 'xpc-connection'」が出る。
解決済
回答 2
投稿
- 評価
- クリップ 1
- VIEW 3,915
前提・実現したいこと
MacBook Air (11-inch, Early 2015,)OS X Yosemiteバーション10.10.5でBLEデータを受け取るセントラルにしようとしています。
① Node.jsをnode.jsの本家サイトからダウンロード
② nobleのインストール
③ 下記「実行したソースコードの「app.js」ファイルを作成
④ BLEデータの受け取りができるか、Node.jsむけBLEライブラリのnobleを使用したapp.jsファイルをターミナルで実行しました。
そうしたところ以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
Nakamu-no-MacBook-Air-8:ble_central nakamu$ node app.js
internal/modules/cjs/loader.js:583
throw err;
^
Error: Cannot find module 'xpc-connection'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15)
at Function.Module._load (internal/modules/cjs/loader.js:507:25)
at Module.require (internal/modules/cjs/loader.js:637:17)
at require (internal/modules/cjs/helpers.js:22:18)
at Object.<anonymous> (/Users/nakamu/Desktop/ble_central/node_modules/noble/lib/mac/yosemite.js:7:21)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
実行したソースコード
'use strict';
const noble = require('noble');
const serviceuuid = `a6ad91bd376e465f8c6c460fd3e15038`;
const charauuid = `80d881a61ab347f08c752c31eac31f43`;
//キャラクタリスティックにアクセスしてデータやりとり
const accessChara = (chara) => {
console.log('-----Start GATT Access-----')
chara.notify(true, (err) => {
if (err) {
console.log('listen notif error', err)
} else {
console.log('listen notif')
}
});
chara.on('data', (data, isNotif) => {
const jsonStr = data.toString('utf-8');
const jsonData = JSON.parse(jsonStr);
console.log(jsonData);
});
}
//discovered BLE device
const discovered = (peripheral) => {
console.log(`BLE Device Found: ${peripheral.advertisement.localName}(${peripheral.uuid}) RSSI${peripheral.rssi}`);
if(peripheral.advertisement.localName === 'SAKETAMU'){
noble.stopScanning();
console.log('device found');
console.log(`service discover...`);
peripheral.connect(error => {
if (error) {
console.log("connection error:", error)
} else {
console.log("device connected");
}
peripheral.discoverServices([],(err, services) => {
if (error) {
console.log("discover service error", error)
}
console.log('discover service');
services.forEach(service => {
if(service.uuid === serviceuuid){
service.discoverCharacteristics([], (error, charas) => {
console.log('discover chara');
charas.forEach(chara => {
if(chara.uuid === charauuid){
console.log("found chara: ", chara.uuid)
accessChara(chara);
}
});
});
}
});
});
});
}
}
//BLE scan start
const scanStart = () => {
noble.startScanning();
noble.on('discover', discovered);
}
if(noble.state === 'poweredOn'){
scanStart();
}else{
noble.on('stateChange', scanStart);
試したこと
① 最初、nobleのインストールもできていなかったのか
Error: Cannot find module 'noble'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15)
at Function.Module._load (internal/modules/cjs/loader.js:507:25)
at Module.require (internal/modules/cjs/loader.js:637:17)
at require (internal/modules/cjs/helpers.js:22:18)
at Object.<anonymous> (/Users/nakamu/Desktop/app.js:3:15)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
のエラーがでいたので
mkdir ble_central
cd ble_central
touch app.js
npm init -y
npm i --save noble
でインストールし直しました。
インストールする過程で下記メッセージも出ていました(^^;;
Nakamu-no-MacBook-Air-8:ble_central nakamu$ npm i --save noble
> xpc-connection@0.1.4 install /Users/nakamu/Desktop/ble_central/node_modules/xpc-connection
> node-gyp rebuild
gyp ERR! configure error
gyp ERR! stack Error: Command failed: /Users/nakamu/anaconda/bin/python -c import sys; print "%s.%s.%s" % sys.version_info[:3];
gyp ERR! stack File "<string>", line 1
gyp ERR! stack import sys; print "%s.%s.%s" % sys.version_info[:3];
gyp ERR! stack ^
gyp ERR! stack SyntaxError: invalid syntax
gyp ERR! stack
gyp ERR! stack at ChildProcess.exithandler (child_process.js:294:12)
gyp ERR! stack at ChildProcess.emit (events.js:182:13)
gyp ERR! stack at maybeClose (internal/child_process.js:962:16)
gyp ERR! stack at Socket.stream.socket.on (internal/child_process.js:381:11)
gyp ERR! stack at Socket.emit (events.js:182:13)
gyp ERR! stack at Pipe._handle.close (net.js:610:12)
gyp ERR! System Darwin 14.5.0
gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /Users/nakamu/Desktop/ble_central/node_modules/xpc-connection
gyp ERR! node -v v10.15.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN ble_central@1.0.0 No description
npm WARN ble_central@1.0.0 No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: bluetooth-hci-socket@0.5.1 (node_modules/bluetooth-hci-socket):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for bluetooth-hci-socket@0.5.1: wanted {"os":"linux,android,win32","arch":"any"} (current: {"os":"darwin","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: xpc-connection@0.1.4 (node_modules/xpc-connection):
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: xpc-connection@0.1.4 install: `node-gyp rebuild`
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: Exit status 1
+ noble@1.9.1
added 4 packages from 4 contributors and audited 107 packages in 8.094s
found 3 low severity vulnerabilities
run `npm audit fix` to fix them, or `npm audit` for details
② app.jsを実行したら上記「発生している問題・エラーメッセージ」に記載のエラーが発生
エラーメッセージの中にある「xpc-connection」は
OS X Lionから採用されたXPCサービスだと他のサイトなどに書き込みがありました。
ということは、Yosemiteから最新バージョンにアップデートすると解決されるのかなど
アドバイスいただけると助かります。
スペックの低いMacBook Airのため、できればYosemiteのままで解決できると助かります。
補足情報(FW/ツールのバージョンなど)
Node.js バージョン v10.15.0
わかりづらくて申し訳ありませんが宜しくお願い致しますm(_ _)m
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
check解決した方法
+1
いろいろ調べたところ、「xpc-connection」を、Node@10で実行するとエラーが出るというのを見つけました。
Node@8にバージョンを下げると実行が完了できたとのことでした。
(参考)
https://github.com/line/line-simple-beacon/issues/7
ということで、
npm -v
2.15.11
node -v
v4.7.2
とバージョンを下げて
$ node app.js
を実行したところ下記のとおり、BLEデバイスにアドバイタズしてGATTにアクセスできました!
BLE Device Found: SAKETAMU(000000aaaa00000a0a00aa0aa000a00a) RSSI-37
device found
service discover...
device connected
discover service
discover chara
found chara: 88a888a88aa888a88a888a88aaa88a88
-----Start GATT Access-----
listen notif
BLEデバイスに正式なファームを書き込んでないので、値が取れていないのが、
まだ気になりますが。。。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
gyp ERR! stack Error: Command failed: /Users/nakamu/anaconda/bin/python -c import sys; print "%s.%s.%s" % sys.version_info[:3];
gyp ERR! stack File "<string>", line 1
gyp ERR! stack import sys; print "%s.%s.%s" % sys.version_info[:3];
gyp ERR! stack ^
gyp ERR! stack SyntaxError: invalid syntax
()なしの print で syntax error になるのって、スクリプトが python2 を想定しているのに使われたのが python3 であるときに出る典型的なエラーですね。
PATH をいじって "python" が python2 を指している状況にしてから再インストールするといける気がします。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.34%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる