A simple daemon which accepts commands from a paired bluetooth client.
On your robot:
cd ~ mkdir pydir cd pydir wget --no-check-certifate https://github.com/javatechs/RxCmd/archive/master.zip unzip master.zip mv RxCmd-master/pydir/* RxCmd-master/daemon-rxcmd.sh . rm -rf RxCmd-master
$ sudo apt-get install python-bluez bluez python-gobject python-dbus python-daemon
-
Make sure Bluetooth is enabled on the phone/laptop.
-
Make sure Bluetooth on your phone/pc/laptop is discoverable.
-
On an Android phone, go to settings→Bluetooth. Make device discoverable (visible). The device only remains discoverable for a short time.
./finddevice.py
-
Temporarily:
bluez-simple-agent hci# xx:xx:xx:xx:xx:xx
-
Permanently:
sudo bluez-test-device trusted xx:xx:xx:xx:xx:xx yes
$ hostname prsg2 $ sudo hciconfig hci0 piscan $ hciconfig -a ... UP RUNNING PSCAN ISCAN ... $ bluez-simple-agent
-
Select settings→Bluetooth→SCAN.
-
Look for the host name from the hostname command above.
-
Click to connect with device. On the phone a dialog box appears. 'Bluetooth Pairing Request', Confirm passkey is 999999 to pair with prsg. DO NOT CLICK 'OK' ON PHONE yet. Back to the Pi.
$ bluez-simple-agent not registered RequestConfirmation (/org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX, 999999) Confirm passkey (yes/no) yes ^C
-
Use the Ctrl+C to terminate bluez-simple-agent.
-
Daemon implements start/stop/restart. To start daemon on Pi, type:
$ ./daemon-rxcmd.py start
-
Type this command with the address of the Pi:
./rxcmd.py xx:xx:xx:xx:xx:xx
You can now enter commands:
Talking to: rosrov1-0. Hit enter to send, 'esc' to quit command001
On the robot itself (not your phone) execute the following:
bluetoothctl
You should now be in bluetooth command prompt. Now type the following to enable scanning:
scan on
Then look for devices that are available:
devices
You should see something like the below - the one I’m interested in is my phone, so copy the device id to your clipboard (that’s the string with all the colons in it):
[bluetooth]# devices Device 03:1C:7D:E4:62:12 BOOGYWOOGY 625s Device BD:32:B2:E1:1C:83 JDPHONE
Now trust your device with the following command:
[bluetooth]# trust BD:32:B2:E1:1C:83
Then run the following commands and get the expected output shown:
[bluetooth]# discoverable on Changing discoverable on succeeded [bluetooth]# pairable on Changing pairable on succeeded [bluetooth]# agent NoInputNoOutput Agent registered [bluetooth]# default-agent Default agent request successful
At this point go to your phone bluetooth settings and find the robot and try to pair with it. It should prompt you to enter a pin on the phone - pick any number combination you like (I used 0000) and enter it on your phone. The phone will then talk back to the robot and the robot should prompt you to enter the same pin:
[NEW] Device BD:32:B2:E1:1C:83 JDPHONE Request PIN code [agent] Enter PIN code: 0000
at that point you’ll get more output suddenly. You can now exit out of the bluetooth console.
That’s it, you’re paired. You can now use the Vicky app on your phone!
To get bluetooth app on android phone
-
Go to Google Drive/PRSG/RoboMagellan - there should be a file app-kinetic-debug.apk - go ahead and download it to your phone and run it (You may be prompted to go into settings and enable "Untrusted Sources" - you need to do that to install an app this way).
-
Make sure phone’s bluetooth is turned on
-
Go into your settings/bluetooth settings and make sure your phone is discoverable
Once daemon-rxcmd.py is running on your robot and you are bluetooth paired to it from your phone. On your phone:
-
Launch the vicky app
-
Click the green bluetooth button at the top and from the list of devices, choose your robot
-
You should see a message about being connected
-
-
Use back arrow on phone to back out of vicky app
-
Reopen vicky app. You should now have a series of options such as reboot robot, roslaunch, reboot pixhawk, etc.
You can additionally click on the ROS looking icon and connect via wifi if you know the IP Address/port combination from the vicky app.
Note, these steps presume you have run the "Install this code" section and that your paths are correct. If you have changed things, you may need to edit daemon-rxcmd.py and daemon-rxcmd.sh accordingly
As robot user check /home/<user>/pydir:
-
Check that daemon-rxcmd.py stdout, stderr and pid locations are correct, or modify according to your paths
-
Check that the paths/files listed in the variables section in daemon-rxcmd.sh are correct or modify according to your paths
-
Check that the user listed below the path variables section in daemon-rxcmd.sh is correct
-
Then execute these commands:
sudo su cd /etc/init.d cp /home/<user>/pydir/daemon-rxcmd.sh . chmod 755 daemon-rxcmd.sh update-rc.d daemon-rxcmd.sh defaults mv /etc/rc2.d/S01daemon-rxcmd.sh /etc/rc2.d/S05daemon-rxcmd.sh mv /etc/rc3.d/S01daemon-rxcmd.sh /etc/rc3.d/S05daemon-rxcmd.sh mv /etc/rc4.d/S01daemon-rxcmd.sh /etc/rc4.d/S05daemon-rxcmd.sh mv /etc/rc5.d/S01daemon-rxcmd.sh /etc/rc5.d/S05daemon-rxcmd.sh
That’s it! You should now successfully start/stop the daemon for bluetooth on stop/start/reboot