Introduction
I was very exited and grateful to Element14 to get an opportunity to evaluate Arduino Pro Nicla Voice board. I wanted to use it as an input device for my local chat bot, so it can be always on, and be my digital companion. I thought that Arduino Nicla Voice capabilities like always-on speech recognition, multiple-wake word support, BLE 5 support, low power processing, ability to work in noisy environments will fit well in my project.
I've decided to published an unfinished roadtest in hopes that it will save some time other developers in overcoming some issues. As result some sections will be updated with observations and test results as I progress over my test plan.
Development Community
There is a relatively active Edge Impulse forum . It is mostly related to creating/deploying voice models. The Edge Impulse GitHub repo for Nicla Voice scripts issue tracker has some minimal activity.
Another active community is a dedicated Arduino forum Nicla Voice . The community is covering all aspects of Nicla Voice board.
Documentation
● Evaluate the comprehensiveness, clarity, and accuracy of the device’s official documentation.
● Check if the documentation is up-to-date and includes clear examples and explanations.
I've started by reading the Arduino Nicla Voice element 14 product page and Syntiant® NDP120 Neural Decision Processor.
Resources at Arduino:
https://docs.arduino.cc/tutorials/nicla-voice/user-manual/
https://docs.arduino.cc/resources/datasheets/ABX00061-datasheet.pdf
https://docs.arduino.cc/hardware/nicla-voice/
https://docs.arduino.cc/tutorials/nicla-voice/getting-started-ml/
Resources at Edge Impulse:
https://www.edgeimpulse.com/blog/announcing-support-for-the-arduino-nicla-voice/
https://docs.edgeimpulse.com/docs/edge-ai-hardware/mcu-+-ai-accelerators/arduino-nicla-voice
https://docs.edgeimpulse.com/docs/run-inference/cpp-library/on-your-syntiant-tinyml-board
https://docs.edgeimpulse.com/docs/edge-ai-hardware/mcu-+-ai-accelerators/syntiant-tinyml-board#1.-download-the-firmware/products/devtools/product-pages/w/documents/28422/arduino-nicla-voice
Resources at Hackster:
https://www.hackster.io/news/arduino-puts-a-syntiant-ndp-machine-learning-chip-on-its-new-nicla-voice-tinyml-development-board-79b64fbc7fef
https://www.hackster.io/news/syntiant-partners-with-edge-impulse-for-ndp101-powered-arduino-compatible-tinyml-development-board-8116a480c347
Tutorials and Examples
● Assess the availability and quality of community resources, such as tutorials, sample code, and troubleshooting guides.
Ease of Development
Arduino Nicla Voice is supported by Arduino IDE. It is easy to add it by searching for "nicla" and selecting Arduino Mbed OS Nicla Boards in Arduino IDE Board Manager. It will add support for other Nicla boards too.
The Board Manager creates some entries in the log to provide details on installation and lists added components and their versions.
The first challenge
I've connected the board with a USB cable to my PC. I've expected that the OS will create a notification about the new USB device. But it was silent. The Arduino IDE as well hasn't added the new port for it. After some research I've read a post in the Arduino forum about connectivity challenges with Nicla board. It pointed me to try different USB cables. One of them was able to support the board. The Windows sent the notification "Nicla Voice CMSIS-DAP is set up and ready to go."
And Arduino IDE was able to recognize it too.
Updating firmware for Always-On Speech Recognition and overcoming some issues
The board comes with several examples and tutorials to evaluate its speech recognition capabilities. But the specific firmware is required to be upload. The firmware update consists from two parts.
The first part is to load the uploader to the board from Arduino IDE.
To upload it I've selected the board and port in Arduino IDE.
And than run the Syntiant_upload_fw_ymodem scetch.
The second part of the firmware update requires to clear memory on the board using Arduino IDE Serial Monitor. The default speed of the Serial Monitor is 9600 bod. As it was not clear documented I was not able to complete the task. After some research I found that the board requires a specific speed. So it is important to select the communication speed 115200 baud. I've typed "F" in the Serial Monitor and it cleared the board memory.
The last part requires to download and extract binaries of the firmware from Arduino documentation site .The uploader should be executed from the command line. I've run it from my Windows PC, so the command is specific to Windows OS.
syntiant-uploader-win send -m "Y" -w "Y" -p COM4 mcu_fw_120_v91.synpkg syntiant-uploader-win send -m "Y" -w "Y" -p COM4 dsp_firmware_v91.synpkg syntiant-uploader-win send -m "Y" -w "Y" -p COM4 alexa_334_NDP120_B0_v11_v91.synpkg
I've run into a few issues. First I've got the "Access is denied" error.
The error was caused by Arduino IDE using the same port. I've closed the IDE and was able communicate with the board.
The next issue was an intermittent NAK error from the board.
It was only happened to me when board gets connected to PC over USB. On the second try it was able to complete without errors.
It is important to verify that the upload completed with a "sent successful" message. As I've got an error one time when it failed to upload the large model file.
It took 68 seconds to upload the model file for Alexa keyword. I've used ptime utility to measure it.
After firmware was uploaded I've used the uploader sketch to review list of the uploaded files. Again I've used the Serial Monitor and typed "L" and got the list of the uploaded files.
Always-On Speech Recognition (ASR)
I've used the AlexaDemo sketch provided as an example to verify its ASR capabilities. The sketch blinks with the blue LED and adds an entry in the serial log every times it hear the world Alexa.
I was impressed with the speed and quality of the keyword recognition. It was able recognize the keyword almost immediately.
● Measure the latency from the moment the wake word is spoken to the moment the device responds.
● Test the device’s ability to recognize different accents and dialects and its accuracy.
BLE connectivity
After the initial success with the AlexaDemo sketch I've jumped to the next one. The BLExaDemo sketch is using the same model/firmware as the AlexaDemo sketch, but it should as well raise an alert over Bluetooth service.
I've loaded the sketch. But it failed to compile as it was missing Arduino BLE library. I've added ArduinoBLE 1.3.6 library using the IDE Library Manager and it was able to compile and uploaded the sketch.
Than I've used nRF connect app on iOS and Android to test communication with Nicla Voice board and its ANNA B112-00B stand-alone Bluetooth 5.0 low energy module.
The app was able to detect the board.
Unfortunately it fails to establish a reliable connection.
It disconnects almost immediately after creating the connection.
The error message says that The connection has timed out unexpectedly.
I was able to connect only once for the long period of time, so I was able verify that the board was sending alerts, I found similar observations not only for Nicla Voice board, but for other Nicla boards as well.
https://forum.arduino.cc/t/nicla-sense-me-bluetooth-connectivity-issues/1117597
https://forum.arduino.cc/t/ble-with-nicla-voice/1155447
I hope I'll be able to find the resolution before the end of the roadtest.
Update 23-04-2024
I've tried to connect to BLExaDemo from Android Light Blue app. And it was able to connect an keep connection. So the connectivity issue most likely related to Apple devices only as mentioned in one of Arduino community threads.
LightBlue ready to connect to BLExaDemo:
LightBlue connected to BLExaDemo :
LightBlue is receiving alerts from BLExaDemo :
● distance
● Python pybluez library on Windows .
Multiple-Wake Word Support
The out of the box model is only supporting one keyword. I'd like to develop a model that can support aa multiple wake words. Test the device’s ability to recognize and respond to multiple wake words. I need to capture samples of these key words to build a data set to train the model.
One option to build capture samples is to use Edge Impulse. I've followed their tutorial. But I've run into some challenges when I've used the WebUSB connection to Nicle Voice. There are other reports of a similar issue too.
I'll try to capture audio samples using the phone. I think it is less preferable as it will use a different microphone to capture voice.
● Measure the accuracy of wake word recognition.
Low Power Processing
● Measure the power consumption of the device during idle, active, and sleep modes.
● Test the device’s performance under low power conditions.
Noisy Environments
● Test the device’s speech recognition capability in various noisy environments.
● Measure the Signal-to-Noise Ratio (SNR) that the device can handle
Conclusion
Top Comments