Some platform providers claim beacons can transmit multimedia data which isn’t strictly true. A beacon sends a small amount of data that typically contains a unique id. When an app sees an id it shows information, such as an image, that is typically obtained from a server.
But what about beacons actually transmitting images? Chong Shao, Shahriar Nirjon, Jan-Michael Frahm or the Department of Computer Science, University of North Carolina has a paper on “Years-Long Binary Image Broadcast using Bluetooth Low Energy Beacons” (pdf). Again, don’t be misled, they don’t mean it takes years to send an image but instead that a beacon might transmit for a long time (which most do).
The researchers have found that with suitable compression schemes, a set of 2–3 beacons is capable of broadcasting high-quality images (75%–90% structurally similar to original images). The image quality improves when more beacons are used.
How might you get the data into a beacon? Well, some beacons such as the M52 Plus and iB003N allow arbitrary data to be set in the advertising data.
The images are necessarily very simple but nevertheless this provides a great example of what can be achieved when you attempt the seemingly impossible.
Most people imagine Bluetooth beacons transmit equally in all directions. However, this isn’t usually true. The 2.4 GHz frequency that beacons use is easily blocked or affected (through electronic resonance) by items such as the casing, the battery and even the printed circuit board itself. Also, the design of the antenna, that’s usually etched onto the printed circuit board, causes the transmission to vary depending on the direction.
Printed Circuit Board (PCB) Antenna
The above 2D design leads to different radiation depending on whether you are viewing face on, sideways or end on. The following diagram from a very informative Cypress article (pdf) demonstrates how the radiation pattern can vary in the x y and z planes:
In practice, it’s best to perform tests to assess how the beacon radiation changes with beacon orientation. You can do this by measuring the change in RSSI as you orientate the beacon. You can measure the RSSI using an app such as nRF Connect.
For example, with the long 300m range iB003N-PA, we determined experimentally that the best range was when the non-battery face of the beacon was facing the observer.
iB003N-PA – Strongest signal for us was downwards in this photo
However, this was for our particular scenario. How and where the beacon is mounted can also affect transmission and hence range.
So, the next time you are testing the range or installing beacons, take some time to assess how the beacon orientation might be affecting the range.
The iB003N-PA has a range up to 300m because it uses the RFAXIS X2401C 2.4GHz amplifier to increase the range.
When you use the manufacturer app to change the power output by a beacon, you are changing the power output by the Nordic nRF51 System on a Chip (SoC) that is usually fed to the antenna. In the case of the iB003N-PA, the RFAXIS X2401C instead receives the signal, amplifies it and sends it to the antenna. The resultant change in output is:
20dBm is the maximum allowable output for class 1 Bluetooth. There’s no difference whether you set to 0dBm or 4dBm, the output will be 20dBm. Even at a low power setting, -10dbm, the amplified output is 10dBm which is relatively high compared to the nominal 0dBm for most beacons. That’s just over 3x the power (3dBm change is a doubling of power) of a normal beacon. You can see that this beacon is primarily designed for long distance and there’s no need to change the SoC power from the default 0dBm = 20dBm.
The iB003N can transmit up to three channels: iBeacon, Custom and Accelerometer Data. If you only want to send iBeacon, the iOS and Android app ‘Config’ screen implicitly sets the state to iBeacon only transmission when you set the iBeacon parameters.
On iOS only, the Eddystone screen allows you to set the custom channel to send Eddystone that implicitly sets the state to transmit the Custom channel only.
What if you want to transmit both iBeacon and Custom channels or also send the acceleration data? What if you want to enable motion triggered broadcasting? For cases such as these, you have to set the beacon state explicitly (manually) via the Bluetooth Service Characteristic 0x2A80 as described in the iB003N user guide .
The iB003N has an accelerometer that can be used to cause this beacon to only broadcast when it has been moved. This can be used to save battery power or as an alert that something, that shouldn’t move, has been moved. For example, we have a customer putting them on warehouse racking legs to detect when the forklift truck has crashed into them.
The iB003N manufacturer documentation on motion triggered broadcast is split over many sections of the user guide making understanding setup harder than it needs to be. In fact, it’s very simple. Connect to the beacon using the eBeacon app and set Service 0xFF70, Characteristic 0x2A80 (the beacon state) to 0x04. The beacon will now only transmit when moved.
We have several clients using the iB003-SHT temperature/humidity beacon in industrial situations. A question we have had is how is the temperature/humidity calibrated? For scenarios that require monitored temperature/humidity, it’s often necessary to show the readings have been calibrated over time.
iB003N Sensor beacon
The long term drift of the sensor is <0.04C/yr and <0.5 RH/yr so in most applications it doesn’t usually need calibration. If you need accuracy better than this you will need to calibrate in the software of the phone/device that receives the beacon signal. That is, you will need to periodically measure the real temperature/humidity using another calibrated instrument and apply any offset to the read values.
The iB003N and its sensor variant the iB003N-SHT can send the acceleration value in Bluetooth advertising data every (configurable) 100ms to 10s without connecting. This mode is called AccBeacon and can be transmitted as well as the iBeacon and Eddystone channels.
The AnkhMaway documentation isn’t that clear as to the format of the AccBeacon advertising data. This is because the data format changes depending on the actual beacon capabilities and configured settings:
State value: byte
Mac address: 6 bytes
Acceleration value:6 bytes(x:2 bytes y:2 bytes z:2 bytes)
Temperature value: 2 bytes
Battery level: 1 byte
Position data: 1 byte
i.e. The ‘position data’ within the advertising data will be at a different point in the advertising data depending on whether the previous values are ‘on’ or not. The position data gives the orientation of the beacon (i.e. which way up it is).
For the iB003N-SHT (as opposed to the non temperature sensor iB003), the acceleration values aren’t on by default and you also have to also set 0xAA10->0xAA14. For example if change it to, for example, 0xFC0A, the acc data is shown in the Accbeacon advertising data. The format of the AccBeacon data is as per Table 6 of the user documentation. Also, for the Android eBeacon app you must specify the value, 0xFC0A in the above example, in lower case. i.e. 0xfc0a.
We now have the white version of the iB003N-PA in stock. The iB003-PA is our longest range beacon and can reach up to 300m in open space. Other features of this beacon include motion triggered broadcast, accelerometer sensor (in advertising data), the ability to send iBeacon & Eddystone simultaneously and waterproofing.
We check beacons as they come into stock because we invariably get a few that are dead on arrival. We had a faulty iB003N-PA this time so this gave us the opportunity to open one up. Here’s the pcb:
The largest chip is the N51822 SoC found in many beacons. At the very top is the PCB antenna. The thing on wires in the middle is the buzzer. The chip at the top is the RFAXIS X2401C 2.4GHz RF front end that gives this beacon its long range.
You should first read the manufacturer’s SHT20 User Guide (username and password supplied with your beacon).
If you are connecting via GATT to read the sensor data then you will need to set the beacon to be always connectable. The way to do this is (for some strange reason) only shown in the iB001M user guide:
So if you wish to transmit iBeacon and remain connectable, set the value to 0x82. Note that if you subsequently set the beacon ‘on’ or ‘off’ in the ‘simple’ configuration screen, accessed via the spanner icon (Android) or Configure option (on iOS), then this will overwrite your set value.
However, you might instead consider reading the sensor data from the advertising data which a) is much easier to program and b) uses much less beacon battery power and c) allows multiple apps to see the data at the same time.