Requires:
- Android phone running at least Android 5.0 Lollipop
- mbed device capable of BLE (I've used Nordic NR51-Dk) or a BLE component attached to non-BLE board
The device code can be found here. The application controls something on the board's DigitalOut D2
pin now. Attach a component to this pin that can be controlled by writing to it digitally. I've chosen a siren light attached to a Grove Relay. Compile the code and flash the resulting binary to your board.
The device is exposing a UART BLE service, where a BLE peer can send data over the RX characteristic of this service. Read more about UART/Serial Port Emulation over BLE in Nordic's documentation.
The device can receive strings in this RX characteristic. When the word "panic" is received, the application sets the DigitalOut
pin of D2
on the mbed device to HIGH
. If the word "chill" is received, the pin is set to LOW
.
To modify the behavior of the device when it receives a string command, look at the check_command
function. Here, you can change the acceptable commands, and also what is actuated upon the receipt of these commands. You could modify this line to DigitalOut light(LED1);
if you'd like to control your board's LED with voice commands.
The full Android Studio application can be cloned from here if you'd like to play with the source code.
To use the app as is, you'll need to allow installation of Non-Market applications. This might vary according to your Android version. For Android 7.1.1, visit Settings > Security > Device Administration > Turn on "Unknown sources"
.
Next, you can download the APK from: https://github.com/sarahmarshy/mbedVoice/blob/master/app/app-release.apk. Simply click the downloaded file to install it on your device.
The application allows you to pair with a BLE device. Once paired, the app uses the Android speech API to recognize a spoken sentence. On completion, the app parses into a string the recognition result with the highest confidence value. This string is sent to the RX characteristic of the paired device. It will send the data in this format: !your words here#
. If the device has not exposed any writeable characteristics, nothing will be sent.
Assuming you've compiled and flashed the device code, open a serial connection with your mbed device using a serial device terminal at 9600 baud. This will allow you to view the voice commands sent to your device.
Launch the mbed voice application on your phone.
Select the BLE connect icon.
Select allow location access. BLE feature of Android requires this.
Connect to mbedVoiceUART
. This name is defined in the mbed application code.
You will see a message if you have succesfully paired with the device.
To send voice commands, click the speech bubble in the middle of the screen. When prompted, allow recording audio. You should hear an audio cue when the phone is listening for a command, and one when it detects you've stopped speaking. When you've stopped speaking, look at your serial device terminal. You will see the words you've just spoken!