In this lesson, you will learn how to connect a Raspberry Pi to Watson Speech to Text and change the color of a LED through speech.

For example, you may say "Turn the light green" to change the color of the LED to green.

What's in the Kit

1 x Raspberry Pi 3
Raspberry Pi 3
1 x Mini USB Microphone
So TJ Bot can hear you
1 x NeoPixel RGB LED
TJ's indicator light
1 x Female/female jumper wires
To connect LED to the Pi
1 x Female/male jumper wires
To connect micro servo to the Pi
1 x Micro servo motor
TJ's arm motor
1 x 16GB SD card
Pre-loaded with NOOBS 2.1
1 x Mini USB speaker
So TJ Bot can speak back to you
1 x 5V power supply
Power cable for the Pi

Start with a working Raspberry Pi with Raspbian or NooBs. You may need to burn the SD card, then log in (ssh is recommended) or use an HDMI monitor + keyboard. Then set up WiFi or connect an Ethernet cable for networking so you can connect to the internet

I haven't used Raspberry Pi before, where should I start?

Raspberry Pi is a small linux computer that we use to connect to Watson and control TJBot's hardware. Similar to any other computer, you need a monitor, mouse, and keyboard. 

If you have a TV around, you can connect your Pi to your TV via a HDMI cable.

In most of the Pi kits, the SD card is already preloaded with an image of the Raspberry Pi Operating System (OS). You need to put the SD card in the Pi, turn the Pi ON and follow the instructions on screen to complete the installation of the operating system. If you have problems setting up your Pi, you can troubleshoot here.

How can I connect my Pi to the Internet?

Here is an easy way to get your Pi connected to wifi. If it doesn't work, you need to set it up from the command line.

Open a terminal and type the following command to edit the configuration file with your wifi information:

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

Go to the bottom of the file and add the following: 


Now save the file by pressing Ctrl+X then Y, then press Enter. Open a browser and check if your Pi is connected to the Internet. If you have problems, troubleshoot here.

Update and Download

You should begin by making sure your Pi OS is up to date. Updating the OS may take about 45 min to an hour depending on your internet speed. You just need to stay patient and finish this step. The rest of the steps are much quicker!

For updating the OS, open a terminal and execute the following commands:

sudo apt-get update 

sudo apt-get dist-upgrade

Now install the latest version of Node.js and npm (Node Package Manager). You need these packages later to run your code. 

curl -sL | sudo -E bash -
sudo apt-get install -y nodejs

sudo apt-get install alsa-base alsa-utils libasound2-dev

Here are two quick videos of how to fold the bot. The detailed folding instructions are available on instructable: Build TJBot out of Cardboard

Once your TJBot is ready, get ready to connect your LED to the Pi Pins.

It's very important to make sure you connect the LED to the right pins, otherwise you may damage your LED or the Pi. ALWAYS start with the GND pin. GND is the longest leg of your LED. The LED has a flat side. The GND is the second leg from the flat side. Again if you are unsure, DO NOT connect the LED to the Pi.

Connect the GND to GND pin on the Pi (see the picture). Then connect 'Data in', the 4th leg from the flat side, to the Pi's GPIO pin. Lastly, connect the third leg from the flat side to the 3.3V on the Pi.

The source code is available at github. Download or clone the code and execute the following commands from a terminal to install its dependencies..

sudo apt-get install git
git clone cd tjbot/recipes/speech_to_text npm install
I haven't used Github before. How can I download the code from Github?

Here are the instructions for how to clone a repository from github if you have not done that before.

In this step, we help you get API access to the Watson Speech to Text. Let's start with creating a Speech to Text instance on Bluemix (If you don't have a Bluemix account, follow the instructions to create a free trial).

You may leave the default values and select 'Create'.


Almost done! You just need to copy your credentials to the clipboard. 
Click on 'Service Credentials' on the left menu and copy your credentials into the clipboard.

Now make a copy of the default config file:

cd tjbot/recipes/speech_to_text
cp config.default.js config.js

Open config.js file using your favorite text editor and update it with your username and password.

What is an API?

No worries, it's super easy!! All you need to do it to watch this video. It's one of my favorite videos to explain what an API is!

I got my credentials right, but it gives me a weird error!

So you've updated the config file and it still doesn't work! No worries.

Most people mix up username and password and paste password instead of username.

Make sure you copy and paste 'username' and 'password' in the right fields. This should solve your problem.

Congradulations! You are almost done! Now it's the time to have some serious fun!

Run this command from the terminal:

sudo node stt.js

You should be able to speak to TJBot and ask him to change the color of the LED. 

Say "Turn the light blue" to change the light to blue. You can try other colors: yellow, green, orange, purple, magenta, red, blue, aqua, white). You can either say "Turn the light on" or "Turn the light off"!

Enjoy! Don't forget to share a picture/video of your setup #TJBot! :-)

I LOVE this! What's next?

You can either run one of the available recipes or create your own. My favorite recipe is to connect TJBot to twitter and have him understand emotions. Here are a set of simple things you can do with TJBot!

TJBot is open source and we'd love to see what you can make with it. If you have created your own recipe, I would love to include it as a featured recipe!

I cannot wait to see what you build with TJBot!

Why my Pi doesn't show the right color?

No worries, you can easily fix it.

You may test your LED setup to make sure the connections are correct and the library is properly installed. When you run the test module, it should turn your LED on.

cd tjbot/bootstrap/tests 
npm install 
sudo node test.led.js

If the LED does not light up, you can try moving the power from 3.3 to 5 volts, by moving the jumper wire one pin to the right (pin 2). If neither the 3.3v or 5v pins work, you will need a 1N4001 diode. The diode is inserted between the power pin of the LED (the shorter of the two middle pins) and the 5v pin on the Raspberry Pi. Make sure the cathode (striped end) is facing the LED. If you have problems with the setup, please refer to Adafruit's Neopixel on Raspberry Pi guide to troubleshoot.

The LED library uses the PWM module (GPIO 18) to drive the data line of the LEDs. This conflicts with the built-in audio hardware, which uses the same pin to drive the audio output. Depending on your configuration of Raspbian, the sound drivers may be more aggressive in taking away control of GPIO 18 from other processes. If your LED shows random colors instead of the expected color, use this trick to fix it.

cd tjbot/bootstrap
sudo cp tjbot-blacklist-snd.conf /etc/modprobe.d/ sudo update-initramfs -u

Reboot and confirm no "snd" modules are running by executing the command "lsmod".



I say 'Turn the light yellow' but it hears random words!

When you speak with TJBot, it records your voice command (audio) through the microphone and sends it to "Watson Speech to Text" to convert the audio to text. Sometimes, when the environment is noisy, TJBot has a hard time differentiating your voice from the background noise. If you have a better quality microphone, please feel free to use it. Otherwise, we recommend speaking clearly in a relatively quiet space.

Also if you have accent, TJBot may have a hard time understanding you. TJbot gets better everyday. So hopefully one day your TJBot friend will be able to understand %100 of what you say!

This guide was first published on Mar 29, 2017. It was last updated on Mar 29, 2017.