There has been a major shift in electronics and computer accessibility driven by the introduction of the Raspberry Pi microcomputer and its variants. With a completely different price point along with a significantly expanded support community, the Raspberry Pi has been an unprecedented success in bringing inexpensive computing to a wide audience. The Raspberry Pi Zero continues with that important approach, providing unprecedented computer power at an even lower price point.
The Raspberry Pi Zero is particularly useful as it can be paired with inexpensive hardware and open-source software to do a wide range of different Do-It-Yourself projects. You'll learn about many of these in this book. You'll learn how to control DC motors, how to control servos, how to hook up a microphone for speech recognition, and even how to connect a webcam to view and interpret the outside world.
The Raspberry Pi Zero can do amazing things, but first you'll need to understand how to access all of this capability. In this chapter, you'll learn how to:
Provide power to the board
Connect a display, keyboard, and mouse
Load and configure the operating system
Configure the board for remote access
A Raspberry Pi Zero
A micro USB cable and power supply to provide power to the board
A display with an HDMI video input
A keyboard, a mouse, and a powered USB hub
A microSD card – with at least 4 GB capacity
Another computer that is connected to the Internet
A WLAN USB dongle
A 40x2 pin connector strip
Before you get started, let's get familiar with the Raspberry Pi Zero. Here is an image of the hardware:
Note that the GPIO pin male headers are not pre-soldered to the board; you'll want to do that. You can buy these at most online electronics retailers. You should also become familiar with the various connections on the board. Here, you can see the Raspberry Pi Zero with the connector soldered and the connections labeled for your information:
One of the first issues you'll want to consider is how to power the board. To do this, you need to connect through the USB power connection. There are two choices to provide power to the Raspberry Pi Zero:
Connect the microUSB connector labeled power to a 5V DC source powered by a USB power supply. This can be either a power supply that can plug directly into an outlet or power supplied by a powered USB port like those available on most computers.
Connect the microUSB connector to a battery. The simplest connection is to batteries that have a USB connector, like those used to charge cellphones. Here is a image of just such a battery:
In both cases, make sure that the unit can supply enough current. You'll need a supply that can provide at least 1000 mA at 5 volts. There are two USB charge connections on this battery which makes it easy to plug the Raspberry Pi Zero into one and the powered USB hub into the other. Do not plug in the board just yet, you first need to connect the rest of the hardware and configure the microSD card. However, you are now ready to connect the rest of the hardware.
The next step is to connect a keyboard, mouse, and display to the Raspberry Pi Zero. You may have much of this stuff already but, if you don't, there are some things to consider before buying additional equipment. Let's start with the keyboard and mouse.
To connect any device to the Raspberry Pi Zero you'll need some sort of adapter or hub. You can buy a simple hub that goes from the microUSB connector on the Raspberry Pi Zero to the more common standard connector. You can find these at most electronics online retailers, and it looks something like this:
However, there will be projects when you will want to connect more than one device to the Raspberry Pi Zero. For these cases you may want to consider purchasing a powered USB hub. Before deciding on the hub to connect to your board, you need to understand the difference between a powered USB hub and one that gets its power from the USB port itself.
Almost all USB hubs are not powered, in other words, you don't plug in the USB hub separately. The reason for this is that almost all of these hubs are hooked up to computers with very large power supplies and powering USB devices from the computer is not a problem. This is not the case for your board. The USB port on your board has very limited power capabilities so if you are going to hook up devices that require significant power – a WAN adapter or a webcam for instance – you're going to need a powered USB hub, one that provides power to the devices through a separate power source. Here is an image of such a device, available at http://www.amazon.com/ and other online retailers:
Note that there are two connections on this hub. The one to the far right is a power connection and it will be plugged into a battery or a USB power adapter with a USB port. The connection to the left is the USB connection, which will be plugged into the Raspberry Pi. To connect the power USB board to the Raspberry Pi Zero you need a cable that connects to a microUSB connector. Now, you'll have more connections to add a mouse and keyboard, webcams, and a USB WLAN device.
Now, you'll also need a display. Fortunately, your Raspberry Pi Zero offers lots of choices. There are a number of different video standards; here is an image of some of the most common ones for reference:
There is a mini HDMI connector on the Raspberry Pi Zero. In order to connect it to an HDMI monitor you'll need a mini HDMI to standard HDMI adapter or cable. You can also buy a cable that has a mini HDMI connector on one end and a regular HDMI connector on the other. Here is an image of the adapter:
To use this connector, simply connect the adapter to your Raspberry Pi Zero, then the cable with the regular HDMI connections to the adapter and your TV or monitor that has an HDMI input connector. HDMI monitors are relatively new but if you have a monitor that has a DVI input, you can buy relatively inexpensive adapters that provide an interface between DVI and HDMI.
Don't be fooled by adapters that claim that they go from HDMI or DVI to VGA, or HDMI or DVI to S-video. These are two different kinds of signals: HDMI and DVI are digital standards, and VGA and S-video are analog standards. There are adapters that can do this, but they must contain circuitry and require power and they are significantly more expensive than any simple adapter.
You are almost ready to plug in the Raspberry Pi Zero. Connect your HDMI cable to your monitor and the Raspberry Pi Zero. Connect your USB hub to the Raspberry Pi Zero and connect your keyboard and mouse to the USB hub. Make sure that you connect all your devices before you power on the unit. Most operating systems support hot-swap of devices, which means you are able to connect a device after the system has been powered but this is a bit shaky. You should always cycle power when you connect new hardware. Here is a picture of everything connected:
The USB connectors are connected to USB power adapters. Even though your hardware configuration is complete, you'll still need to complete the next section to power on the device. So, let's figure out how to install an operating system.
Now that your hardware is ready, you need to download and image an operating system to a microSD card. The Raspberry Pi Zero provides a lot of different choices. You'll stick with Linux, an open-source version of Unix, on your Raspberry Pi Zero. Linux, unlike Windows, Android, or iOS, is not tightly controlled by a single company. It is a grassroots effort from a wide community, mostly open-source and, while it is available for free, it grows and develops a bit more chaotically.
A number of different versions of Linux have emerged, each built on a core set of similar capabilities referred to as the Linux kernel. These core capabilities are all based on the Linux specification. However, they are packaged slightly differently, and developed, supported, and packaged by different organizations. The Raspberry Pi community has become standardized on Raspbian, a Debian distribution of Linux for the Raspberry Pi. So, you are going to install and run Raspbian on your Raspberry Pi Zero.
You can purchase a card that has Raspbian installed or you can download it onto your personal computer and then install it on the card. To download a distribution, you need to decide if you are going to use a Windows computer to download and create an SD card, a MAC OS X, or a Linux machine. I'll give brief instructions for Windows and Linux machines here.
For directions on the MAC OS X, go to: http://www.raspberrypi.org/documentation/installation/installing-images/mac.md.
Firstly, you need to download an image. This part of the process is similar for both Windows and Linux. Open a browser window. Go to the Raspberry Pi organization's website, https://www.raspberrypi.org/ and select the Downloads selection at the top of the page. This will give you a variety of download choices. Go to the Raspbian section, and select the
.zip file just to the right of the image identifier. You need the latest version, but not the lite one. This will download an archived file that has the image for your Raspbian operating system. Note the default username and password; you'll need them later.
If you're using Windows, you'll need to unzip the file using an archiving program like 7-Zip available at http://www.7-zip.org/. This will leave you with a file that has the
.img extension, a file that can be imaged onto your card. Next, you need a program that can write the image to the card. I use Image Writer for Windows. You can find a link to this program at the top of the download section on the https://www.raspberrypi.org/ website. Plug your card into the PC, run this program, and you should see this:
Then, click on the Write button. This will take some time, perhaps as long as 15 minutes but, when it is complete, exit the program and you'll have your microSD card with the image.
If you are using Linux, you need to un-archive the file and then write it to the card. You can do all of this with one command. However, you do need to find the
/dev device label for your card. You can do this with the
ls -la /dev/sd* command. If you run this before you plug in your card, you might see something like the following screenshot:
Note that your card is at
sdb. Now go to the directory in which you downloaded the archived image file and use the following command:
sudo dd if=2015-11-21-raspbian-jessie.img of=/dev/sdX
2015-11-21-raspbian-jessie.img command will be replaced by the image file that you downloaded and
/dev/sdX will be replaced by your card ID, in this example
/dev/sdb. Be careful to specify the correct device as this can overwrite the data on any of your drives. Also, this may take a few minutes. Once the file is written, eject the card and you are ready to plug it into the board and apply the power.
Make sure that your Raspberry Pi Zero is unplugged and install the SD card into the slot. Then power the device. After the device boots, you should get the following screen:
Note that, if you use a powered USB hub, it might provide enough power to your Raspberry Pi, however, in some circumstances it might not be able to provide all the power you need. I strongly suggest you use different power sources, one for your Raspberry Pi Zero and one for your hub.
You are going to do one more thing to finalize your configuration. To do this you need to go into the
raspi-config application. So, open a terminal window by clicking the icon in the upper left corner that looks like a small computer screen.
Now, type in
sudo raspi-config. You should see this application on your screen:
Hit Enter once again and you'll go back to the main configuration screen. Now, hit the Tab key until you are positioned over the <Finish> selection and then hit Enter. Then hit Enter again so that you can reboot your Raspberry Pi Zero.
If you are using a US keyboard, you may need to edit the keyboard file for your keyboard to use
nano effectively. To do this, use the dropdown menu in the upper left hand corner of the screen, choose Preferences | Mouse and Keyboard Settings and then select the Keyboard tab. You can then choose the correct keyboard for your configuration.
Now you are ready to start interacting with the system! You can bring up a terminal window and start typing commands.
The Raspberry Pi Zero does not have a LAN connection. To connect the Raspberry Pi Zero to the Internet, you have two choices. You can establish a wireless LAN connection or you can connect by using a USB to LAN adapter if you want to connect to an actual LAN port. Let's look at both of these possibilities.
If you are going to connect wirelessly, make sure that you have a wireless access point available. You'll also need a wireless device. The official Raspberry Pi Foundation markets a device itself, but other brands also work. See http://elinux.org/RPi_USB_Wi-Fi_Adapters to identify the wireless devices that have been verified to work with the Raspberry Pi Zero. Here is one that is available at many online electronics outlets:
You'll also need to connect a powered USB hub for this process, so that you can access both the keyboard and mouse, as well as the USB wireless LAN device. Now, connect the device to the powered hub.
Boot the system and then edit the
wpa_supplicant.conf file by typing
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf. You need to change it to look like this:
wpa-psk values here must, of course, match what your wireless access point requires. Reboot and your device should be connected to your wireless network. You'll know if it is connected by looking in the upper right hand corner of the screen where you should see the following:
You can now download any additional functionality you'll want to install from the Internet.
If you want to connect to an actual LAN cabled connection you need a device that goes from USB to LAN. This site http://elinux.org/RPi_USB_Ethernet_adapters lists a number of different possibilities. Here is an image of one such device:
Connecting the Raspberry Pi Zero in this way is actually amazingly easy. Simply plug the USB to LAN adapter into the powered USB hub, connect an active LAN cable and you should then have Internet access.
So, firstly, make sure that your basic system is up and working. Open a terminal window and check the IP address of your unit. You're going to need this however you communicate with the system. Do this by using the
ifconfig command. It should produce the following screenshot:
inet addr, which is shown in the third line of the preceding screenshot to contact your board through the Ethernet. If you are using a wireless device to gain access to the Internet, your
ifconfig will look like this:
inet addr associated with the
wlan0 connection, in this case
10.10.0.31, is the address you will use to access your Raspberry Pi.
You also need an SSH terminal program running on your remote computer. An SSH terminal is a Secure Shell (SSH) connection, which simply means that you'll be able to access your board and give it commands by typing them into your remote computer. The response from the Raspberry Pi Zero will appear in the remote computer terminal window.
If you'd like to know more about SSH, visit: https://www.siteground.com/tutorials/ssh/.
If you are running Microsoft Windows, you can download an alternative application. My personal favorite is PuTTY. It is free and does a very good job of saving your configuration so that you don't have to type it in every time. Type
putty in a search engine and you'll soon come to a page that supports a download or you can go to http://www.putty.org/.
Download PuTTY to your Microsoft Windows machine. Then, run
putty.exe. You should see a configuration window which looks something like the following screenshot:
inet addr from the previous page in the Host Name space and make sure that the SSH selection is selected. You may want to save this configuration under Raspberry Pi so that you can reload it each time.
When you click on Open, the system will try to open a terminal window onto your Raspberry Pi through the LAN connection. The first time you do this, you will get a warning about an RSA key as the two computers don't know about each other. Windows therefore complains that a computer that it doesn't know is about to be connected in a fairly intimate way. Simply click on OK and you should get a terminal with a login prompt, like the following screenshot:
Now you can log in and issue commands to your Raspberry Pi Zero. If you'd like to do this from a Linux machine, the process is even simpler. Bring up a terminal window and then type
ssh firstname.lastname@example.org where the
xxx.xxx.xxx.xxx is the
inet addr of your device. This will then bring you to the login screen of your Raspberry Pi Zero, which should look similar to the preceding screenshot.
SSH is a really useful tool to communicate with your Raspberry Pi Zero. However, sometimes you need a graphical look at your system and you don't necessarily want to connect to a display. You can get this on your remote computer by using an application called vncserver. You'll need to install a version of this on your Raspberry Pi Zero by typing
sudo apt-get install tightvncserver in a terminal window on your Raspberry Pi Zero. This is a perfect opportunity to use SSH, by the way.
Tightvncserver is an application that allows you to view your complete Raspberry Pi Zero remotely. Once you have it installed, you need to start the server by typing
vncserver in a terminal window on the Raspberry Pi Zero. You will then be prompted for a password, then be prompted to verify the password, and then asked if you'd like to have a view-only password. Remember the password that you entered, you'll need it to log in via a VNC Viewer remotely.
Enter the VNC Server address, which is the IP address of your Raspberry Pi Zero, and click on Connect. You will see a pop-up window, as shown in the following screenshot:
Type in the password that you just entered while starting vncserver and you should then get a graphical view of your Raspberry Pi that looks like the following screenshot:
There are ways to make vncserver start automatically on boot. I have not used them; I prefer to type the
vncserver command from an SSH application when I want the application running. This keeps your running applications to a minimum and, more importantly, presents fewer security risks. If you want to start yours each time you boot, there are several places on the Internet that show you how to configure this. Try the following website: http://www.havetheknowhow.com/Configure-the-server/Run-VNC-on-boot.html.
To view this Raspberry Pi desktop from a remote Linux computer, which is running Ubuntu for example, you can type
sudo apt-get install xtightvncviewer, then start it by using
xtightvncviewer 10.25.155.110:1 and supplying the chosen password.
Linux has viewers with graphical interfaces such as Remmina Remote Desktop Client (select the VNC-Virtual Network Computing protocol), which might be used instead of
xtightvncviewer. Here is a screenshot of the Remote Desktop Viewer:
Make sure that vncserver is running on the Raspberry Pi Zero. The easiest way to do this is to log in using SSH and run vncserver at the prompt. Now, click on Connect on the Remote Desktop Viewer. Fill in the screen as follows, under the Protocol selection, choose VNC, and you should see the following screenshot:
Now, enter the Host Internet address, making sure that you include a
:1 at the end and then click on Connect. You'll need to enter the vncserver password you set up, as shown in the following screenshot:
Now you should be able to see the graphical screen of the Raspberry Pi. To access the Raspberry Pi Zero graphically from a Mac or another Apple device, you can still use Real VNC Viewer, see https://www.realvnc.com/products/ for more information.
The final piece of software that I like to use with Windows is a free application called WinSCP. To download and install this piece of software, go to https://winscp.net/ and follow the instructions to download and install. Once installed, run the program. It will open the following dialog box:
Here, you fill in the IP address in the host name tab,
pi in the user name tab, and the password (not the vncserver password) in the password space. Click on Login and you should see a warning displayed, as shown in the following screenshot:
Now, you can drag and drop files from one system to the other. You can also do similar things with Linux by using the command line. To transfer a file to the remote Raspberry Pi, you can use the
scp file email@example.com:path command, where
file is the filename, and
firstname.lastname@example.org:path is the location you want to copy it to. For example, if you wanted to copy
example.py from your Linux system to the Raspberry Pi Zero, you would type
scp example.py email@example.com:/home/pi/. The system will ask you for the remote password which is the login for the Raspberry Pi Zero. Enter the password and the file will be transferred.
Now that you know how to use
scp, you can access your Raspberry Pi remotely without having a display, keyboard, or mouse connected to it! If you are connecting via a WLAN connection, your system will now look like this:
You only need to connect the power and the LAN, either with a cable or through wireless LAN. If you need to issue simple commands, connect through SSH. If you need a more complete set of graphical functionality, you can access this through
vncserver. Finally, if you want to transfer files back and forth, you can use WinSCP from a Windows computer or
scp from a Linux computer. Now you have the toolkit to build your first functionality.
One of the challenges of accessing the system remotely is that you need to know the IP address of your board. If you have the board connected to a keyboard and display, you can always just run the
ifconfig command to get this information. However, you're going to use the board in applications in which you don't have this information. There is a way to discover this by using an IP scanner application. There are several available for free; on Windows, I use an application called Advanced IP Scanner, available at www.advanced-ip-scanner.com/. When you start the program, it looks like the following screenshot:
Clicking on the Scan selector scans for all the devices connected to the network. You can also do this in Linux; one application for IP scanning in Linux is called Nmap. To install Nmap, type
sudo apt-get install nmap. To run Nmap, type
sudo nmap -sp 10.25.155.1/154 and the scanner will scan the addresses from
For more information on Nmap, see: :http://www.linux.com/learn/tutorials/290879-beginners-guide-to-nmap.
These scanners let you know which addresses are being used and this should allow you to see your Raspberry Pi address without typing
Your system has lots of capabilities. Feel free to play around with the system—try to get an understanding of what is already there and what you'll need to add from a software perspective. Remember, there is limited power on your USB port, so make sure that you are familiar with the power needs of accessories plugged into your Raspberry Pi. You may very well need to use a powered USB hub for many projects.
Congratulations! You've completed the first stage of your journey. You have your Raspberry Pi Zero up and working. No gathering dust in the bin for this piece of hardware. It is now ready to start connecting to all sorts of interesting devices, in all sorts of interesting ways. You have, by now, installed a Raspbian operating system, learned how to connect all the appropriate peripherals, and even mastered how to access the system remotely so that the only connections you need are a power supply cable and a LAN cable.
Now, you are ready to start commanding your Raspberry Pi Zero to do something. The next chapter will introduce you to the Linux operating system and the Emacs text editor. It will also show you some basic programming concepts in both the Python and C/C++ programming languages. Then, you'll be ready to add open source software to inexpensive hardware and start building your robotics projects.