Learn how to train and deploy voice recognition models into Arduino Nano 33 BLE with Picovoice Porcupine Wake Word Engine. This tutorial will take less than 10 minutes from the start to a working demo! Things you need:

Porcupine enables developers to train production-quality voice models within seconds. It runs on anything, including Arduino Nano 33 BLE and Arduino Portenta H7. Porcupine also supports STM32, NXP i.MX RT, Raspberry Pi, BeagleBone, NVIDIA Jetson, Android, iOS, web browsers, Linux, macOS, and Windows!

Let's get started ๐Ÿš€


  1. Sign up for Picovoice Console.
  2. Go to the Porcupine Page
  3. Select the language for your model
  4. Type in the phrase you want to build the model for
  5. Optionally, you can try it within the browser
  6. Once you are happy, click on the train button.
Train wake word using Picovoice Console - Phase A
  1. Pick Arm Cortex-M as the platform
  2. Select Arduino Nano 33 BLE as your board type.
  3. You need to find the UUID for your board. Open Arduino IDE, and download Porcupine_EN library. Run the GetUUID example from Porcupine_EN. Check the Serial Monitor to find the UUID of your board. Copy it and paste it in the relevant section.
UUID of Arduino board
  1. Click on the Download button. You should have a .zip file in your download folder now.
Train wake word using Picovoice Console - Phase B
  1. Unzip it. Open the file pv_porcupine_params.h with a text editor. The KEYWORD_ARRAY[] contains your newly-trained model!
Keyword Array Content


  1. Run the PorcupineExample example from the Porcupine_EN library.
  2. Change the content of KEYWORD_ARRAY in the params.h file with the content of your downloaded model.
  3. Go to Picovoice Console's dashboard. Copy your AccessKey.
  1. Put your AccessKey in PorcupineExample.ino. Don't forget to wrap it in " and terminate the line with ;!
AccessKey B
  1. Upload and run the example. Check the Serial Monitor for log messages every time you say the wake phrase ๐Ÿค“

Multiple keywords

You can train and deploy several models with Porcupine and recognize them concurrently. The increase in CPU and RAM usage is negligible.

Natural Language Understanding

Porcupine enables you to train always-listening voice commands. But what if you want to understand complex voice commands with multiple slots and entities? For example:

The good news is that you can also use Rhino Speech-to-Intent to accomplish this.

Start Building