Raspberry Pi Spy’s Alexa Skill

With Raspberry Pi projects using home assistant services such as Amazon Alexa and Google Home becoming more and more popular, we invited Raspberry Pi maker Matt ‘Raspberry Pi Spy‘ Hawkins to write a guest post about his latest project, the Pi Spy Alexa Skill.

Pi Spy Alexa Skill Raspberry Pi

Pi Spy Skill

The Alexa system uses Skills to provide voice-activated functionality, and it allows you to create new Skills to add extra features. With the Pi Spy Skill, you can ask Alexa what function each pin on the Raspberry Pi’s GPIO header provides, for example by using the phrase “Alexa, ask Pi Spy what is Pin 2.” In response to a phrase such as “Alexa, ask Pi Spy where is GPIO 8”, Alexa can now also tell you on which pin you can find a specific GPIO reference number.

This information is already available in various forms, but I thought it would be useful to retrieve it when I was busy soldering or building circuits and had no hands free.

Creating an Alexa Skill

There is a learning curve to creating a new Skill, and in some regards it was similar to mobile app development.

A Skill consists of two parts: the first is created within the Amazon Developer Console and defines the structure of the voice commands Alexa should recognise. The second part is a webservice that can receive data extracted from the voice commands and provide a response back to the device. You can create the webservice on a webserver, internet-connected device, or cloud service.

I decided to use Amazon’s AWS Lambda service. Once set up, this allows you to write code without having to worry about the server it is running on. It also supports Python, so it fit in nicely with most of my other projects.

To get started, I logged into the Amazon Developer Console with my personal Amazon account and navigated to the Alexa section. I created a new Skill named Pi Spy. Within a Skill, you define an Intent Schema and some Sample Utterances. The schema defines individual intents, and the utterances define how these are invoked by the user.

Here is how my ExaminePin intent is defined in the schema:

Pi Spy Alexa Skill Raspberry Pi

Example utterances then attempt to capture the different phrases the user might speak to their device.

Pi Spy Alexa Skill Raspberry Pi

Whenever Alexa matches a spoken phrase to an utterance, it passes the name of the intent and the variable PinID to the webservice.

In the test section, you can check what JSON data will be generated and passed to your webservice in response to specific phrases. This allows you to verify that the webservices’ responses are correct.

Pi Spy Alexa Skill Raspberry Pi

Over on the AWS Services site, I created a Lambda function based on one of the provided examples to receive the incoming requests. Here is the section of that code which deals with the ExaminePin intent:

Pi Spy Alexa Skill Raspberry Pi

For this intent, I used a Python dictionary to match the incoming pin number to its description. Another Python function deals with the GPIO queries. A URL to this Lambda function was added to the Skill as its ‘endpoint’.

As with the Skill, the Python code can be tested to iron out any syntax errors or logic problems.

With suitable configuration, it would be possible to create the webservice on a Pi, and that is something I’m currently working on. This approach is particularly interesting, as the Pi can then be used to control local hardware devices such as cameras, lights, or pet feeders.


My Alexa Skill is currently only available to UK users. I’m hoping Amazon will choose to copy it to the US service, but I think that is down to its perceived popularity, or it may be done in bulk based on release date. In the next update, I’ll be adding an American English version to help speed up this process.


Scott avatar

I hope this does come to North America, especially Canada!

Matt Hawkins avatar

This should be available from the US and Canadian Amazon stores now.

Cardosa Sean avatar

Thanks, very informative. Currently starting on the journey of voice recognition commands. No experience with Alexa, but will start looking at it

defCode avatar

“. . . it would be possible to create the webservice on a Pi” my first skill was doing this, I used Flask-Ask (https://github.com/johnwheeler/flask-ask), you must have Flask installed too. Sentdex from YouTube has a nice tutorial how to develop and deploy a skill using a computer (Pi) from within a LAN. Intro and Skill Logic – Alexa Skills w/ Python and Flask-Ask Part 1 ~ https://youtu.be/DFiCsMcipr4

~ defCode

Bill Pytlovany avatar

I’m in upstate New York and just enabled the skill so Amazon must have thought it was worthy.

Anvisha avatar

Wow! I did not know about this. Thanks for sharing. I am very keen to know more about ALexa skills. I recently came across this blog ( https://logicroots.com/MathBlog/best-alexa-skill-you-never-thought-alexa-could-do/ ) that talks about a brilliant Alexa skill for kids. Loved it!

Ewan Parry avatar

Very cool, but how do I add it to my app?

Ewan Parry avatar

Never mind I found the Alexa Skill store and have installed Pi Spy.

Comments are closed