前提・実現したいこと
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)
実行したソースコード
Node.js
1'use strict'; 2 3const noble = require('noble'); 4const serviceuuid = `a6ad91bd376e465f8c6c460fd3e15038`; 5const charauuid = `80d881a61ab347f08c752c31eac31f43`; 6 7//キャラクタリスティックにアクセスしてデータやりとり 8const accessChara = (chara) => { 9 console.log('-----Start GATT Access-----') 10 chara.notify(true, (err) => { 11 if (err) { 12 console.log('listen notif error', err) 13 } else { 14 console.log('listen notif') 15 } 16 }); 17 chara.on('data', (data, isNotif) => { 18 const jsonStr = data.toString('utf-8'); 19 const jsonData = JSON.parse(jsonStr); 20 console.log(jsonData); 21 }); 22} 23 24 25//discovered BLE device 26const discovered = (peripheral) => { 27 console.log(`BLE Device Found: ${peripheral.advertisement.localName}(${peripheral.uuid}) RSSI${peripheral.rssi}`); 28 29 if(peripheral.advertisement.localName === 'SAKETAMU'){ 30 noble.stopScanning(); 31 console.log('device found'); 32 console.log(`service discover...`); 33 34 peripheral.connect(error => { 35 if (error) { 36 console.log("connection error:", error) 37 } else { 38 console.log("device connected"); 39 } 40 41 peripheral.discoverServices([],(err, services) => { 42 if (error) { 43 console.log("discover service error", error) 44 } 45 console.log('discover service'); 46 services.forEach(service => { 47 if(service.uuid === serviceuuid){ 48 service.discoverCharacteristics([], (error, charas) => { 49 console.log('discover chara'); 50 charas.forEach(chara => { 51 if(chara.uuid === charauuid){ 52 console.log("found chara: ", chara.uuid) 53 accessChara(chara); 54 } 55 }); 56 }); 57 } 58 }); 59 }); 60 }); 61 } 62} 63 64//BLE scan start 65const scanStart = () => { 66 noble.startScanning(); 67 noble.on('discover', discovered); 68} 69 70if(noble.state === 'poweredOn'){ 71 scanStart(); 72}else{ 73 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
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。