RoadTest: Enroll Now to Review the Arduino Nicla Voice
Author: vlasov01
Creation date:
Evaluation Type: Development Boards & Tools
Did you receive all parts the manufacturer stated would be included in the package?: True
What other parts do you consider comparable to this product?: ESP32-S3 / ESP-SR
What were the biggest problems encountered?: Software customization for the Nicla Voice board has some sharp edges.
Detailed Review:
Introduction
I was very excited and grateful to Element14 to get an opportunity to evaluate the Arduino Pro Nicla Voice board. I wanted to use it as an input device for my local chatbot, so it could 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 would fit well in my project.
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 for this device is a dedicated Arduino forum Nicla Voice . The community covers all aspects of the Nicla Voice board.
I was not able to find community discussions on this product from Syntiant or Nordic Semiconductor. Both of them have customer portals and partner support channels.
Documentation
I've started by reading the Arduino Nicla Voice element 14 product page and Syntiant® NDP120 Neural Decision Processor.
There are a lot of other resources available on Arduino. Edge Impulse and Hackster websites.
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 expected that the OS would 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 the 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. However, the specific firmware is required to be uploaded. The firmware update consists of 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 then run the Syntiant_upload_fw_ymodem sketch.
The second part of the firmware update requires clearing memory on the board using Arduino IDE Serial Monitor. The default speed of the Serial Monitor is 9600 bod. As it was not clearly 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 to communicate with the board.
The next issue was an intermittent NAK error from the board.
It only happened to me when the board got connected to the PC over USB. On the second try, it was able to complete without errors.
It is important to verify that the upload is completed with a "sent successful" message. I got an error one time when it failed to upload the large model file.
It took 68 seconds to upload the model file for the Alexa keyword. I've used ptime utility to measure it.
After the firmware was uploaded I used the uploader sketch to review the list of the uploaded files. Again I 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 time it hears the word Alexa.
I was impressed with the speed and quality of the keyword recognition. It was able to recognize the keyword almost immediately.
BLE connectivity
After the initial success with the AlexaDemo sketch, I've jumped to the next one. The BLExaDemo sketch uses the same model/firmware as the AlexaDemo sketch, but it should also raise an alert over Bluetooth service.
I've loaded the sketch. But it failed to compile as it was missing the Arduino BLE library. I've added the ArduinoBLE 1.3.6 library using the IDE Library Manager and it was able to compile and upload the sketch.
Then I used the nRF connect app on iOS and Android to test communication with the 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 a long period of time, so I was able to verify that the board was sending alerts, I found similar observations not only for the 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 road test.
Update 23-04-2024
I've tried to connect to BLExaDemo from the Android Light Blue app. And it was able to connect a keep connection. So the connectivity issue is 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 :

Multiple-Wake Word Support
The out-of-the-box model only supports 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 keywords 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. However, I've run into some challenges when I've used the WebUSB connection to Nicla 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.
Low Power Processing
One of the key advantages of this board is a very low power consumption. I've tried to measure it using a USB connector from Windows 11. However, it didn't provide useful data.
Another option to measure power consumption is to use a battery connector (JST 3-pin 1.2 mm pitch). But I haven't got it.
Conclusion
Arduino Pro Nicla Voice is a great tool for low-power voice detection or anomaly detection based on audio input with excellent specs. It will be even more useful if there are more tutorials available. I think it will be especially useful to have them for advanced features, like multiple wake word detection and audio recording retrieval. It may be a great tool for industrial applications. The price may be a barrier to getting adoption for a wider audience.
It will be interesting to see the evolution of Nicla Voice with more advanced processors, which can host Small Language Models on this device to expand its utility for other on-the-edge processing cases.