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

时间:2015-01-11 22:49:31

标签: node.js macos cordova bluetooth coffeescript

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

在OSX上,我正在使用bluetooth-serial-port运行NodeJS 0.10.35。我放在一起的一个简单的脚本看起来像我发现的一个例子。

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"

在我的机器人上,我正在使用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”或者Steroids都没有激活。我已经通过代码和OSX prefs确认连接是活动的,但仍然卡住了。

侧注,如果我不得不选择我想建立连接的设备,那就是NodeJS / OSX。

对此有任何帮助。非常感谢!

1 个答案:

答案 0 :(得分:0)

最后,我无法让两个人说话。但是,以下内容适用于使用serialport(OSX 10.0.1)从节点读取和写入。 OSX或手机都可以进行初始连接,但它们都可以正常工作,但如果OSX初始化它,则Steroids必须在继续之前检查连接是否存在。

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