Beacons are low-cost, small hardware devices that use ‘Bluetooth low energy’ technology to emit a signal that can be picked up by nearby devices.
They can be used for greater accuracy in location-based applications, allowing companies to track user trends and provide a more personalized customer experience. We’ve experimented with different use cases for beacons and how they can be used most effectively to reach target audiences.
When beacons remain stationary, they rely on mobile phones to recognize their environment. However, what if it was actually the beacons that were mobile? Through experimentation, we discovered that you can enjoy many of the benefits of stationary beacons even when the beacons themselves are moving.
We used a Raspberry Pi along with a beacon wristwatch to set up a prototype based on ‘wandering beacons’. With mobile beacons, you can track user movement, create an interactive environment, and highly customize the user experience. For our prototype, we created a simple screen for a theme park attraction that displays profile information when the user walks up to the Raspberry Pi.
We wanted to use wearable beacons to track user’s movements without them needing a smartphone to run an application. We realized beacons have limitations in that they can only emit basic information, so we mapped each beacon’s UUID (Universally Unique Identifier) to a user’s ID. We then used computers to detect when beacons were nearby, and to update the user’s information.
Using mobile beacons, we could make the environment interactive by having webpages react when the user walked up to a Raspberry Pi. Since each beacon is associated with a particular ID, we were able to identify which user was nearby when the beacon entered the Bluetooth scanner’s range. This gave us a chance to make the user’s environment reactive and personalized. Furthermore, mobile beacons can be used to track user trends - where they’re spending the most time and how often they return to those spots.
For our prototype, we wanted to create a webpage that would react when users approached the Raspberry Pi. We also wanted to be able to store information about the user, such as how many times they had entered the Raspberry Pi’s range. In our demonstration, each Pi ended up representing a different theme park attraction. When a user entered the range of the “attraction”, the user’s score was incremented and their information was displayed on a web page representing the attraction. They were also able to earn badges based on the number of times they entered the Raspberry Pi’s range.
Initially, we wrote a program in Python that would scan for nearby beacons and print out their beacon IDs, majors, and minors. Once we were able to accurately track which beacons were in range, we created a database in Firebase to store information on theme park attractions and users. Attraction data included the name of the ride, badges, and whether a user was nearby. User data included the associated beacon’s ID, basic profile information, the badges they earned, the number of times they visited certain rides, and a score that was incremented based on the time they spent at each ride.
Part of this prototype was the idea that the environment would only react to “registered” beacons. To test this, each user in Firebase was assigned a beacon. Then, in our python program, we sent the beacon’s id to Firebase to ensure it was associated with a user.
At this point, we ran into a problem with the bluetooth scanner. It would scan for beacons and return a complete list of every beacon in it’s range. However, it would’ve been inefficient make a call to Firebase every time the scanner returned a new list of beacons. To solve this, we kept a list of all the beacons in range, and appended or removed beacon IDs from the list when they entered or exited the scanner’s range. When we found a new beacon had entered the Raspberry Pi’s range, we made a call to Firebase to check for the user.
Lastly, we incremented the user’s score and updated the theme park attraction to show that someone was near the attraction. In our webpage, we used Javascript to get real-time updates from Firebase and display the user’s information when the attraction changed in Firebase. In the final version, we had three different users and two theme park attractions. A tester wearing the wristband could walk up to the Raspberry Pi and see their profile displayed on the web page representing the attraction.
Mobile beacons are ideal for situations where you want to customize the user experience based on their physical movement and/or collect data on users’ physical movement patterns. They would also be good for use cases where you don’t necessarily need user input. Here’s some companies we think would be great matches for mobile beacons:
Users can attach beacons to their key chains and locate misplaced keys using an application. Beacons installed in shopping carts could keep track of where users have been in the store, and display personalized promotions on screens. Skiers and Snowboarders could be given beacons when they hit the slopes; in an emergency, rescuers could save lives by using beacons to quickly locate people buried in the snow. Given that mobile beacons are still in their infancy, there are also many other use cases that have yet to be explored. Mobile beacons could allow companies to reach out to clients without mobile phones, such as children or the elderly.
The primary new technologies utilized by this prototype were the bluetooth dongle on Raspberry Pi and Firebase. We were surprised how quickly we were able to create a database in Firebase. While it may not scale particularly well, it worked for our prototype, and for more robust projects there are better alternatives. Regarding the bluetooth dongle on the Raspberry Pi, iPhones are capable of recognizing when a beacon enters the range of the phone, so it was interesting to try to reverse engineer that technology and use it in our Python program.
When working with different pieces that have to communicate, like the Firebase database, the Raspberry Pi program, and the web page Javascript, we set up the simplest version of the prototype and then added additional features. Our first step in this prototype was getting the Raspberry Pi to recognize nearby beacons. Then, we created the Firebase prototype and had the Pi send information to the database. Finally, we set up a web page that could read and display information from the database. Once we were able to send basic information from the Pi to the database and display that information, we added the minimum number of features needed to create a workable prototype, like incrementing the user’s score or having the user’s information disappear when they leave the Raspberry Pi’s range.
With the number of beacons rapidly growing, we expect to see beacons applied more and more to solve problems, whether it’s creating hands-free keys or personalized shopping experiences. Mobile beacons offer consumers a new way to experience an interactive and customized environment while providing companies an innovative way to connect with their customers and collect data on customer behavior and trends.