O'Reilly logo

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Raspberry Pi Cookbook, 3rd Edition

Book Description

With Early Release ebooks, you get books in their earliest form—the author's raw and unedited content as he or she writes—so you can take advantage of these technologies long before the official release of these titles.

With millions of new users and several new models, the Raspberry Pi ecosystem continues to expand—along with many new questions about the Pi’s capabilities. The third edition of this popular cookbook provides more than 200 hands-on recipes for running this tiny low-cost computer with Linux, programming it with Python, and hooking up sensors, motors, and other hardware, including Arduino boards and the Internet of Things (IoT).

Prolific hacker and author Simon Monk also teaches basic principles to help you use new technologies with the Raspberry Pi. This cookbook is ideal for programmers and hobbyists familiar with the Pi through resources such as Getting Started with Raspberry Pi (O’Reilly). Code examples from the book are available on GitHub.

  • Set up your Raspberry Pi and connect to a network
  • Work with its Linux-based operating system
  • Program your Raspberry Pi with Python
  • Give your Pi "eyes" with computer vision
  • Control hardware through the GPIO connector
  • Use your Raspberry Pi to run different types of motors
  • Work with switches, keypads, and other digital inputs
  • Use sensors to measure temperature, light, and distance
  • Connect to IoT devices in various ways

Table of Contents

  1. Preface to the Third Edition
    1. Using this Book
    2. Conventions Used in This Book
    3. Using Code Examples
    4. O’Reilly Online Learning
    5. How to Contact Us
    6. Acknowledgments
    7. Dedication
  2. Setup and Management
    1. 1.0. Introduction
    2. 1.1. Selecting a Model of Raspberry Pi
    3. 1.2. Connecting the System
    4. 1.3. Enclosing a Raspberry Pi
    5. 1.4. Selecting a Power Supply
    6. 1.5. Selecting an Operating System
    7. 1.6. Writing a MicroSD Card with NOOBS
    8. 1.7. Installing an Operating System without NOOBS
    9. 1.8. Using PiBakery to Configure and Write an SD Card
    10. 1.9. Using PiBakery to Configure a Headless Raspberry Pi
    11. 1.10. Booting from a Real Hard Disk or USB Flash Drive
    12. 1.11. Connecting a DVI or VGA Monitor
    13. 1.12. Using a Composite Video Monitor/TV
    14. 1.13. Adjusting the Picture Size on Your Monitor
    15. 1.14. Maximizing Performance
    16. 1.15. Changing Your Password
    17. 1.16. Shutting Down Your Raspberry Pi
    18. 1.17. Installing the Raspberry Pi Camera Module
    19. 1.18. Using Bluetooth
  3. Networking
    1. 2.0. Introduction
    2. 2.1. Connecting to a Wired Network
    3. 2.2. Finding Your IP Address
    4. 2.3. Setting a Static IP Address
    5. 2.4. Setting the Network Name of a Raspberry Pi
    6. 2.5. Setting Up a Wireless Connection
    7. 2.6. Connecting with a Console Lead
    8. 2.7. Controlling the Pi Remotely with SSH
    9. 2.8. Controlling the Pi Remotely with VNC
    10. 2.9. Controlling the Pi Remotely with RDP
    11. 2.10. File Sharing on a Mac Network
    12. 2.11. Using a Raspberry Pi for Network Attached Storage
    13. 2.12. Network Printing
  4. Operating System
    1. 3.0. Introduction
    2. 3.1. Browsing Files Graphically
    3. 3.2. Copying Files onto a USB Flash Drive
    4. 3.3. Starting a Terminal Session
    5. 3.4. Navigating the Filesystem Using a Terminal
    6. 3.5. Copying a File or Folder
    7. 3.6. Renaming a File or Folder
    8. 3.7. Editing a File
    9. 3.8. Viewing the Contents of a File
    10. 3.9. Creating a File Without Using an Editor
    11. 3.10. Creating a Directory
    12. 3.11. Deleting a File or Directory
    13. 3.12. Performing Tasks with Superuser Privileges
    14. 3.13. Understanding File Permissions
    15. 3.14. Changing File Permissions
    16. 3.15. Changing File Ownership
    17. 3.16. Making a Screen Capture
    18. 3.17. Installing Software with apt-get
    19. 3.18. Removing Software Installed with apt-get
    20. 3.19. Installing Python Packages with Pip
    21. 3.20. Fetching Files from the Command Line
    22. 3.21. Fetching Source Code with Git
    23. 3.22. Fetching the Book’s Accompanying Code
    24. 3.23. Running a Program or Script Automatically on Startup
    25. 3.24. Running a Program or Script Automatically as a Service
    26. 3.25. Running a Program or Script Automatically at Regular Intervals
    27. 3.26. Finding Things
    28. 3.27. Using the Command-Line History
    29. 3.28. Monitoring Processor Activity
    30. 3.29. Working with File Archives
    31. 3.30. Listing Connected USB Devices
    32. 3.31. Redirecting Output from the Command Line to a File
    33. 3.32. Concatenating Files
    34. 3.33. Using Pipes
    35. 3.34. Hiding Output to the Terminal
    36. 3.35. Running Programs in the Background
    37. 3.36. Creating Command Aliases
    38. 3.37. Setting the Date and Time
    39. 3.38. Finding Out How Much Room You Have on the SD Card
    40. 3.39. Find Out What Operating System Version You Are Running
    41. 3.40. Updating Raspbian
  5. Software
    1. 4.0. Introduction
    2. 4.1. Making a Media Center
    3. 4.2. Using Office Software
    4. 4.3. Making a Webcam Server
    5. 4.4. Running a Vintage Game Console Emulator
    6. 4.5. Running Minecraft Pi Edition
    7. 4.6. Raspberry Pi Radio Transmitter
    8. 4.7. Editing Bitmap Images
    9. 4.8. Editing Vector Images
    10. 4.9. Internet Radio
  6. Python Basics
    1. 5.0. Introduction
    2. 5.1. Deciding Between Python 2 and Python 3
    3. 5.2. Editing Python Programs with Mu
    4. 5.3. Using the Python Console
    5. 5.4. Running Python Programs from the Terminal
    6. 5.5. Assigning Names to Values (Variables)
    7. 5.6. Displaying Output
    8. 5.7. Reading User Input
    9. 5.8. Arithmetic
    10. 5.9. Creating Strings
    11. 5.10. Concatenating (Joining) Strings
    12. 5.11. Converting Numbers to Strings
    13. 5.12. Converting Strings to Numbers
    14. 5.13. Finding the Length of a String
    15. 5.14. Finding the Position of One String Inside Another
    16. 5.15. Extracting Part of a String
    17. 5.16. Replacing One String of Characters with Another Inside a String
    18. 5.17. Converting a String to Upper- or Lowercase
    19. 5.18. Running Commands Conditionally
    20. 5.19. Comparing Values
    21. 5.20. Logical Operators
    22. 5.21. Repeating Instructions an Exact Number of Times
    23. 5.22. Repeating Instructions Until Some Condition Changes
    24. 5.23. Breaking Out of a Loop
    25. 5.24. Defining a Function in Python
  7. Python Lists and Dictionaries
    1. 6.0. Introduction
    2. 6.1. Creating a List
    3. 6.2. Accessing Elements of a List
    4. 6.3. Finding the Length of a List
    5. 6.4. Adding Elements to a List
    6. 6.5. Removing Elements from a List
    7. 6.6. Creating a List by Parsing a String
    8. 6.7. Iterating Over a List
    9. 6.8. Enumerating a List
    10. 6.9. Sorting a List
    11. 6.10. Cutting Up a List
    12. 6.11. Applying a Function to a List
    13. 6.12. Creating a Dictionary
    14. 6.13. Accessing a Dictionary
    15. 6.14. Removing Things from a Dictionary
    16. 6.15. Iterating Over Dictionaries
  8. Advanced Python
    1. 7.0. Introduction
    2. 7.1. Formatting Numbers
    3. 7.2. Formatting Dates and Times
    4. 7.3. Returning More Than One Value
    5. 7.4. Defining a Class
    6. 7.5. Defining a Method
    7. 7.6. Inheritance
    8. 7.7. Writing to a File
    9. 7.8. Reading from a File
    10. 7.9. Pickling
    11. 7.10. Handling Exceptions
    12. 7.11. Using Modules
    13. 7.12. Random Numbers
    14. 7.13. Making Web Requests from Python
    15. 7.14. Command-Line Arguments in Python
    16. 7.15. Running Linux Commands from Python
    17. 7.16. Sending Email from Python
    18. 7.17. Writing a Simple Web Server in Python
    19. 7.18. Doing Nothing in Python
    20. 7.19. Doing More Than One Thing at a Time
    21. 7.20. Using Python with Minecraft Pi Edition
    22. 7.21. Parsing JSON
    23. 7.22. Creating User Interfaces
    24. 7.23. Using Regular Expressions to Search for Patterns in Text
    25. 7.24. Using Regular Expressions to Validate Data Entry
    26. 7.25. Using Regular Expressions for Web Scraping
  9. Computer Vision
    1. 8.0. Introduction
    2. 8.1. Installing SimpleCV
    3. 8.2. Setting Up a USB Camera for Computer Vision
    4. 8.3. Using a Raspberry Pi Camera Module for Computer Vision
    5. 8.4. Counting Coins
    6. 8.5. Face Detection
    7. 8.6. Motion Detection
    8. 8.7. Optical Character Recognition
  10. Hardware Basics
    1. 9.0. Introduction
    2. 9.1. Finding Your Way Around the GPIO Connector
    3. 9.2. Keeping Your Raspberry Pi Safe When Using the GPIO Connector
    4. 9.3. Setting Up I2C
    5. 9.4. Using I2C Tools
    6. 9.5. Setting Up SPI
    7. 9.6. Installing PySerial for Access to the Serial Port from Python
    8. 9.7. Installing Minicom to Test the Serial Port
    9. 9.8. Using a Breadboard with Jumper Leads
    10. 9.9. Using a Breadboard with a Pi Cobbler
    11. 9.10. Using a Raspberry Squid
    12. 9.11. Using a Raspberry Squid Button
    13. 9.12. Converting 5V Signals to 3.3V with Two Resistors
    14. 9.13. Converting 5V Signals to 3.3V with a Level Converter Module
    15. 9.14. Powering a Raspberry Pi with Batteries
    16. 9.15. Powering a Raspberry Pi with a LiPo Battery
    17. 9.16. Getting Started with the Sense HAT
    18. 9.17. Getting Started with the Explorer HAT Pro
    19. 9.18. Getting Started with a RaspiRobot Board
    20. 9.19. Using a Pi Plate Prototyping Board
    21. 9.20. Making a Hardware On Top (HAT)
    22. 9.21. The Pi Zero and Pi Zero W
  11. Controlling Hardware
    1. 10.0. Introduction
    2. 10.1. Connecting an LED
    3. 10.2. Leaving the GPIO Pins in a Safe State
    4. 10.3. Controlling the Brightness of an LED
    5. 10.4. Switching a High-Power DC Device Using a Transistor
    6. 10.5. Switching a High-Power Device Using a Relay
    7. 10.6. Controlling High-Voltage AC Devices
    8. 10.7. Controlling Hardware with Android and Bluetooth
    9. 10.8. Making a User Interface to Turn Things On and Off
    10. 10.9. Making a User Interface to Control PWM Power for LEDs and Motors
    11. 10.10. Changing the Color of an RGB LED
    12. 10.11. Using an Analog Meter as a Display
  12. Motors
    1. 11.0. Introduction
    2. 11.1. Controlling Servo Motors
    3. 11.2. Controlling Servo Motors Precisely
    4. 11.3. Controlling Multiple Servo Motors Precisely
    5. 11.4. Controlling the Speed of a DC Motor
    6. 11.5. Controlling the Direction of a DC Motor
    7. 11.6. Using a Unipolar Stepper Motor
    8. 11.7. Using a Bipolar Stepper Motor
    9. 11.8. Using a Stepper Motor HAT to Drive a Bipolar Stepper Motor
    10. 11.9. Using a RaspiRobot Board to Drive a Bipolar Stepper Motor
    11. 11.10. Building a Simple Robot Rover
  13. Digital Inputs
    1. 12.0. Introduction
    2. 12.1. Connecting a Push Switch
    3. 12.2. Toggling with a Push Switch
    4. 12.3. Using a Two-Position Toggle or Slide Switch
    5. 12.4. Using a Center-Off Toggle or Slide Switch
    6. 12.5. Debouncing a Button Press
    7. 12.6. Using an External Pull-up Resistor
    8. 12.7. Using a Rotary (Quadrature) Encoder
    9. 12.8. Using a Keypad
    10. 12.9. Detecting Movement
    11. 12.10. Adding GPS to the Raspberry Pi
    12. 12.11. Intercepting Keypresses
    13. 12.12. Intercepting Mouse Movements
    14. 12.13. Using a Real-Time Clock Module
    15. 12.14. Giving the Raspberry Pi a Reset Button
  14. Sensors
    1. 13.0. Introduction
    2. 13.1. Using Resistive Sensors
    3. 13.2. Measuring Light
    4. 13.3. Measuring Temperature with a Thermistor
    5. 13.4. Detecting Methane
    6. 13.5. Measuring CO2 Concentration
    7. 13.6. Measuring a Voltage
    8. 13.7. Reducing Voltages for Measurement
    9. 13.8. Using Resistive Sensors with an ADC
    10. 13.9. Measuring Temperature with an ADC
    11. 13.10. Measuring the Raspberry Pi CPU Temperature
    12. 13.11. Measuring Temperature, Humidity, and Pressure with a Sense HAT
    13. 13.12. Measuring Temperature Using a Digital Sensor
    14. 13.13. Measuring Acceleration with an MMA8452Q Module
    15. 13.14. Finding Magnetic North with the Sense HAT
    16. 13.15. Using the Inertial Management Unit (IMU) of the Sense HAT
    17. 13.16. Sensing a Magnet with a Reed Switch
    18. 13.17. Sensing a Magnet with the Sense HAT
    19. 13.18. Measuring Distance using Ultrasound
    20. 13.19. Measuring Distance using a ToF (Time of Flight) Sensor
    21. 13.20. Capacitative Touch Sensing
    22. 13.21. Reading Smartcards with an RFID Reader/Writer
    23. 13.22. Displaying Sensor Values
    24. 13.23. Logging to a USB Flash Drive
  15. Displays
    1. 14.0. Introduction
    2. 14.1. Using a Four-Digit LED Display
    3. 14.2. Displaying Messages on an I2C LED Matrix
    4. 14.3. Using the Sense HAT LED Matrix Display
    5. 14.4. Displaying Messages on an Alphanumeric LCD HAT
    6. 14.5. Using an OLED Graphical Display
    7. 14.6. Using Addressable RGB LED Strips
    8. 14.7. Using the Pimoroni Unicorn HAT
    9. 14.8. Using an ePaper Display
  16. Sound
    1. 15.0. Introduction
    2. 15.1. Connecting a Loudspeaker
    3. 15.2. Controlling Where Sound is Output to
    4. 15.3. Playing Sound from the Command Line
    5. 15.4. Playing Sound from Python
    6. 15.5. Using a USB Microphone
    7. 15.6. Make a Buzzing Sound
  17. The Internet of Things
    1. 16.0. Introduction
    2. 16.1. Controlling GPIO Outputs Using a Web Interface
    3. 16.2. Displaying Sensor Readings on a Web Page
    4. 16.3. Getting Started with Node-RED
    5. 16.4. Sending Email and Other Notifications with IFTTT
    6. 16.5. Sending Tweets Using ThingSpeak
    7. 16.6. CheerLights
    8. 16.7. Sending Sensor Data to ThingSpeak
    9. 16.8. Responding to Tweets Using Dweet and IFTTT
  18. Home Automation
    1. 17.0. Introduction
    2. 17.1. Making a Raspberry Pi into a Message Broker with Mosquitto
    3. 17.2. Using Node-RED with an MQTT Server
    4. 17.3. Flashing a Sonoff WiFi Smart Switch for MQTT Use
    5. 17.4. Configuring a Sonoff  WiFi Smart Switch
    6. 17.5. Using Sonoff Web Switches with MQTT
    7. 17.6. Using Flashed Sonoff switches with Node RED
    8. 17.7. The Node-RED Dashboard
    9. 17.8. Scheduled Events with Node-RED
    10. 17.9. Publishing MQTT Messages from a Wemos D1
    11. 17.10. Using a Wemos D1 with Node-RED
  19. Arduino and Raspberry Pi
    1. 18.0. Introduction
    2. 18.1. Programming an Arduino from Raspberry Pi
    3. 18.2. Communicating with the Arduino by Using the Serial Monitor
    4. 18.3. Setting Up PyFirmata to Control an Arduino from a Raspberry Pi
    5. 18.4. Writing Digital Outputs on an Arduino from a Raspberry Pi
    6. 18.5. Using PyFirmata with TTL Serial
    7. 18.6. Reading Arduino Digital Inputs Using PyFirmata
    8. 18.7. Reading Arduino Analog Inputs Using PyFirmata
    9. 18.8. Analog Outputs (PWM) with PyFirmata
    10. 18.9. Controlling a Servo Using PyFirmata
    11. 18.10. Using Small Arduino Boards with a Raspberry Pi
    12. 18.11. Using Small Wifi-enabled Arduino-Compatibles (ESP8266)
  20. Parts and Suppliers
    1. Parts
    2. Prototyping Equipment and Kits
    3. Resistors and Capacitors
    4. Transistors and Diodes
    5. Integrated Circuits
    6. Opto-Electronics
    7. Modules
    8. Miscellaneous
  21. Raspberry Pi Pinouts
    1. Raspberry Pi 4/3/2 model B, B+, A+, Zero
    2. Raspberry Pi model B rev. 2, A
    3. Raspberry Pi model B rev. 1