BLE Scan is not picking up my Raspberry Pi

Former Member
Former Member

Hi everyone !

I am currently trying to establish a connection between a vivoactive4S Watch and a RaspberryPi 4B using BLE to send simple strings.

For the Watch application, I am using a modified version of the CIQpi introduced here.

For the Raspberry Pi I am using either a modified version of this code or the code found on the page itself.

When making the connection through the simulator, using a nrf Bluetooth dongle, I am able to connect to the Raspberry Pi.

However, whenever I upload the app on the Watch and try it there, I cannot pickup the connection to the Raspberry.

Thus, I have try to troubleshoot my issue whithout success.

To make sure the PI is actually broadcasting its signal, I have used the android app "Beacon Simulator", that tracks the Bluetooth signal received. And I am able to find the GATT server.

To make sure the Watch is correctly looking for signals, I have tried using the app BleScan. The app is able to find other signals in my environment (some BLE signals from my neighbors it would seem) but not the one from the Raspberry.

I dont have many hints as to why it is not being pickup up. The only lead I currently have, is that the RPI is broadcasting a Bluetooth signal considered "dual" (I found this information on the android app i'm using) and not BLE only. After a few tries, it would seem the Watch can only pickup pure BLE broadcasts. I will try looking it modifying the broadcast of the RPI to pure BLE, but I dont want to overcommit whithout picking someone else's mind.

I am far from behind a Bluetooth expert nor a ConnectIQ expert, so I welcome all advice as to why this approach is not working, or how to troubleshoot it better.

Thanks for reading me Slight smilea

  • With the node.js code I posted, I can consistently see the pi devices from both the sim, with the nrf52-dk or the dongle, and from real devices (I use it to control my garage door all the time).

    Start with that, and see if it works.  I've not tried the gatt code you reference. Based on your version of raspberian and a pi3 vs pi4, you may need a different version of node.

    With nrfconnect on a phone, this is what I see for one of the pi devices:

    And on a pi4, I'm using this:

    start with NOOBS_v3_2_0

    copy node and ciq tar files to pi

    extract node file (7l for pi4, 6l for pi3/pi zero)

    --

    node-v9.7.1-linux-arm7l to be exact

    (node -v

    returns v9.7.1)

  • Former Member
    0 Former Member over 4 years ago in reply to jim_m_58

    First of all thanks for your answer and your contributions to this community.

    After quite a bit of trouble, I was able to make use of your nodejs code and run it. The BLE service is indeed visible from the watch.

    I cannot really consider yet switching to nodejs as I commited to python already (as I assumed the code in the emulator would translate well with the actual Watch).

    The issue there resides in the Bluez interaction through Dbus in python. I read that Bleno is actually a higher level wrapper of Bluez. My python code directly interacting with Bluez, leaves margin for error.

    Through scanning the BLE broadcast I will try to reverse engineering the difference between what your code actually produces and what mine does. I can then try to make the change in python.

    Finally I surmise that the fact that this was working when using the dongle and emulator is due to limitation in the Bluetooth connector in the Watch, limiting the type of Bluetooth signals it can receive.