Advertising interval

  • On BLE peripheral side, keep the interval between 20ms to 10.24ms in units of 625us.
  • On smartphone side, one chip usually is used for both Wifi and BLE. Therefore, turn off Wifi will increase the duty cycle of scanning for BLE peripherals.

Using TI BLE stack, in SensorTag.c, change

// What is the advertising interval when device is discoverable (in units of 625us, 160=100ms)
#define DEFAULT_ADVERTISING_INTERVAL 160*20

Advertising types

When the firmware set advertising type to GAP_ADTYPE_ADV_NONCONN_IND, it is a non-connectable broadcaster and will not response to scan requests. Therefore, Evothings scan may not be able to get device name, i.e. scan function in SensNodeMonitor will not display any devices in the list.

In order for the broadcaster responses to scan requests, set advertising type to GAP_ADTYPE_ADV_SCAN_IND, non-connectable with scan responses.

In order to connect be able to be connected by a central device, set advertising type to GAP_ADTYPE_ADV_IND.

uint8 advType = GAP_ADTYPE_ADV_NONCONN_IND;
GAPRole_SetParameter(GAPROLE_ADV_EVENT_TYPE, sizeof(uint8), &advType);

Power and range

In SensorTag.c, replace the corresponding power value

// Set TX Power
{
HCI_EXT_SetTxPowerCmd(HCI_EXT_TX_POWER_0_DBM);
delay_ms(100);
}

  • At -21dB, the practical range is about 2m (Light of sight) between SensorTag and LG G4.
  • When set to 0dB, it is 5m-7m through wall.
  • At 5dB, double the range through wall.

Power consumption

In TOOLS\appBLE.cfg, make sure to enable Power idle, and then in code

// Enable idle task (default)
Task.enableIdleTask = true;
// Idle CPU when threads blocked waiting for an interrupt
Power.idle = true;
Power.policyFunc = Power.standbyPolicy;

Issues

sensorHdc1000Test()

There is a write to 0x41 in this function which caused the issue when running HDC test only. Fixed by removing that section in commit ac16c1b on develop branch.

References

  1. TI BLE Beacons