Android/OSX - 使用 NodeJS 和 Phonegap,通过蓝牙通话

Android/OSX - Using NodeJS and Phonegap, Speak over Bluetooth

我正在尝试制作一个通过蓝牙在 OSX 10.10.1(最终将是 Linux)和我的 Android(Nexus 5、5.0.1)上进行通信的小应用程序。 1).

在 OSX,我 运行 NodeJS 0.10.35 bluetooth-serial-port。根据我找到的一个示例,我放在一起的一个简单脚本看起来像这样。

btSerial = new (require("bluetooth-serial-port")).BluetoothSerialPort()

address = 'bc-f5-ac-54-4d-ba'

btSerial.findSerialPortChannel address, ((channel) ->
  console.log channel
  console.log "Connecting..."
  btSerial.connect address, channel, (->
    console.log "connected"

    btSerial.write new Buffer("Hello There\n", "utf-8"), (err, bytesWritten) ->
      console.log err if err

    btSerial.on "data", (buffer) ->
      console.log buffer.toString("utf-8")

    btSerial.on "failure", (err) ->
      console.log err

    btSerial.on "closed", () ->
      console.log 'disconnected'

  ), (err) ->
    console.log (err)
    console.log "cannot connect"

  # close the connection when you're ready
  # btSerial.close()

), ->
  console.log "found nothing"

在我的 android 上,我将 AppGyvers Supersonic/SteroidsJS 与 BluetoothSerial Phonegap plugin 一起使用。我创建了一个自定义扫描仪构建,因此它包含该插件。这里只是我整理的一些简单的东西,以便在使用开发控制台时更容易地进行测试。

bt = {}

bt.connect = ->
  bluetoothSerial.connect "00:02:72:CD:62:2A", (success) ->
    console.log 'btConnect: Success'
    console.log success
  , (failed) ->
    console.log 'btConnect: Failed'
    console.log failed   

bt.disconnect = ->
  bluetoothSerial.disconnect()    

bt.isConnected = ->
  bluetoothSerial.isConnected (success) ->
    console.log 'btIsConnected: Success'
    console.log success
  , (failed) ->
    console.log 'btIsConnected: Failed'
    console.log failed  

bt.list = ->
  bluetoothSerial.list (success) ->
    console.log 'btList: Success'
    console.log success
  , (failed) ->
    console.log 'btList: Failed'
    console.log failed  

bt.write = ->
  bluetoothSerial.write "Hello From Android!", (success) ->
    console.log 'btWrite: Success'
    console.log success
  , (failed) ->
    console.log 'btWrite: Failed'
    console.log failed 

bt.subRaw = ->
  bluetoothSerial.subscribeRawData (success) ->
    console.log 'btSubRaw: Success'
    console.log success
  , (failed) ->
    console.log 'btSubRaw: Failed'
    console.log failed

bt.sub = ->
  bluetoothSerial.subscribeRawData '\n', (success) ->
    console.log 'btSub: Success'
    console.log success
  , (failed) ->
    console.log 'btSub: Failed'
    console.log failed

window.bt = bt

现在,这就是我卡住的地方。我需要这些应用程序在本质上相互交谈(我想来回发送对象)。目前,我可以让两个设备从任一连接,甚至可以同时建立连接,但在所有情况下,NodeJS 中的 "on data" 或类固醇订阅都不会触发。我已经通过代码和 OSX 首选项确认连接处于活动状态,但仍然卡住。

旁注,如果我必须为将来选择要建立连接的设备,那将是 NodeJS/OSX。

欢迎提供任何帮助。非常感谢!

最后没能让二人开口。但是,以下使用 serialport (OSX 10.0.1) 从节点读取和写入的工作。 OSX 或 phone 都可以建立初始连接,它们都可以工作,但如果 OSX 初始化它,那么类固醇将必须在继续之前检查连接是否存在。

SerialPort = require("serialport").SerialPort
serialPort = new SerialPort("/dev/cu.Bluetooth-Incoming-Port",
  baudrate: 9600
)

serialPort.on "open", ->
  console.log "open"
  serialPort.on "data", (data) ->
    console.log "data received: " + data

    serialPort.write data, (err, results) ->
      console.log "err " + err if err
      console.log "results " + results