1
votes

Ass everyone saying in their first posts "I'm new one" and trying to figure out one complexity.

  1. I want to scan and create list of available wifi networks in Raspberry area and send the list to the phone via bluetooth.
  2. Next - select one of the networks in the list on the phone, enter a password to selected network and send back via bluetooth to Raspberry

I'm using Raspberry pi3 with bluetooth on board, Raspbian OS and nodejs v7.4.0

I choose wifi-control to work with wifi network and it works greate. One thing - I should run npm run with sudo to get all networks, not just current one;

Then I'm trying to work with bluetooth via bluetooth-serial-port lib. First of all I did all preparations that was written in documentation.

var btSerial = new (require('bluetooth-serial-port')).BluetoothSerialPort();

btSerial.inquire();

And it does nothing. At least I don't see any effect - my phone doesn't "see" Raspberry in available bluetooth devices list;

I thought that my Raspberry has porblems with bluetooth, but then I run

bluetoothctl -> power on -> discoverable on

And Raspberry appeared on phone.

What should I do to "turn on" Bluetooth control and add my Raspberry to list of available bluetooth devices?

Peace!

1

1 Answers

1
votes

Got the exact same problem. My solution (which might or might not be fitting for your needs) was to pair the phone via bluetoothctl beforehand. (this already is you why this solution kinda sucks: you can't come and use a different phone/pi the next day, stuff got completely screwed when changing to a different pi :D) Oh and the main script should run as root, else all of this wont work.

1) Pairing your device

$ bluetoothctl
[bluetoothctl] agent on
[bluetoothctl] discoverable on
[bluetoothctl] pairable on
[bluetoothctl] scan on

(now you turn on your bluetooth on your phone and search for devices, in bluetoothctl you should see your device and mac to be shown)

[bluetoothctl] pair XX:XX...(MAC of your phone)

(phone is going to show the "yo this device wants to pair"-dialog and bluetoothctl wants you to confirm the pairing too)

Now you can always connect to the pi via bluetooth, if it is discoverable or not. (I'm using Serial Bluetooth Terminal)

2) Actual talking between devices

NONE of the npm packages supposed to work with bluetooth worked for me. Not a single one. So in the end I used rfcomm and it's ability to start a program on connection. Together with serialport I let rfcomm run node myscript.js, which establishes the actual serial connection like so:

2.1) rfcomm waiting for connections

const rfcommProc = spawn(
    'rfcomm',
    ['watch', 'hci0', '1', 'node', `${__dirname}/myscript.js`]
);

2.2) myscript.js opening the port

const port = new SerialPort('/dev/rfcomm0', spError => {
    if (spError) {
        process.send(spError);
    }
})

Look up on the npmjs-page how to receive and send stuff now.(: Hope this gives you some ideas and/or helped.

3) Note

  • The bluetooth service starts quite late. Making a service requiring it didn't do the job for me, but adding it to rc.local seems to be "late enough" to have it running and listening on startup.