Description

Book Synopsis
Expand Raspberry Pi capabilities with fundamental engineering principles Exploring Raspberry Pi is the innovators guide to bringing Raspberry Pi to life. This book favors engineering principles over a 'recipe' approach to give you the skills you need to design and build your own projects.

Trade Review
"...this is a book worth having on your shelf." (I programmer, August 2016)

Table of Contents

Introduction xix

Part I Raspberry Pi Basics Chapter 1

Chapter 1 Raspberry Pi Hardware 3

Introduction to the Platform 3

Who Should Use the RPi 5

When to Use the RPi 5

When to Not Use the RPi 6

RPi Documentation 7

The RPi Hardware 8

Raspberry Pi Versions 9

The Raspberry Pi Hardware 10

Raspberry Pi Accessories 12

Important Accessories 13

Recommended Accessories 14

Optional Accessories 16

HATs 19

How to Destroy Your RPi! 20

Summary 21

Support 21

Chapter 2 Raspberry Pi Software 23

Linux on the Raspberry Pi 24

Linux Distributions for the RPi 24

Create a Linux SD Card Image for the RPi 25

Connecting to a Network 26

Regular Ethernet 27

Ethernet Crossover Cable 29

Communicating with the RPi 31

Serial Connection with the USB-to-TTL 3.3V Cable 31

Connecting through Secure Shell (SSH) 33

Transferring Files Using PuTTY/psftp over SSH 35

Controlling the Raspberry Pi 36

Basic Linux Commands 36

Basic File Editing 41

What Time Is It? 43

Package Management 44

Configuring the Raspberry Pi 46

The Raspberry Pi Configuration Tool 46

Updating the RPi Software 48

Video Output 49

Interacting with the Onboard LEDs 50

Shutdown and Reboot 53

Summary 54

Chapter 3 Exploring Embedded Linux Systems 55

Introducing Embedded Linux 56

Advantages and Disadvantages of Embedded Linux 57

Is Linux Open Source and Free? 58

Booting the Raspberry Pi 58

Managing Linux Systems 69

The Super User 69

System Administration 70

Linux Commands 89

Linux Processes 96

Other Linux Topics 99

Using Git for Version Control 99

A Practice-Based Introduction 101

Git Branching 105

Common Git Commands 107

Using Desktop Virtualization 108

Code for This Book 110

Summary 111

Further Reading 111

Bibliography 111

Chapter 4 Interfacing Electronics 113

Analyzing Your Circuits 114

Digital Multimeter 114

Oscilloscopes 115

Basic Circuit Principles 117

Voltage, Current, Resistance, and Ohm’s Law 117

Voltage Division 119

Current Division 120

Implementing RPi Circuits on a Breadboard 121

Digital Multimeters (DMMs) and Breadboards 123

Example Circuit: Voltage Regulation 124

Discrete Components 126

Diodes 126

Light-Emitting Diodes (LEDs) 128

Smoothing and Decoupling Capacitors 130

Transistors 132

Optocouplers/Opto-isolators 138

Switches and Buttons 140

Logic Gates 143

Analog-to-Digital Conversion 150

Sampling Rate 151

Quantization 151

Operational Amplifiers 152

Concluding Advice 155

Summary 156

Further Reading 157

Chapter 5 Programming on the Raspberry Pi 159

Introduction 160

Performance of Languages on the RPi 160

Setting the RPi CPU Frequency 165

A First Circuit for Physical Computing 166

Scripting Languages 168

Scripting Language Options 168

Bash 169

Lua 171

Perl 173

Python 173

Dynamically Compiled Languages 176

JavaScript and Node.js on the RPi 176

Java on the RPi 178

C and C++ on the RPi 180

C and C++ Language Overview 182

LED control in c 194

The C of C++ 196

Overview of Object-Oriented Programming 199

Object-Oriented LED Control in C++ 203

Interfacing to the Linux OS 206

Glibc and Syscall 206

Improving the Performance of Python 208

Cython 208

Extending Python with C/C++ 211

Summary 215

Further Reading 216

Bibliography 216

Part II Interfacing, Controlling, and Communicating 217

Chapter 6 Interfacing to the Raspberry Pi Input/Outputs 219

Introduction 220

General-Purpose Input/Outputs 221

GPIO Digital Output 222

GPIO Digital Input 225

Internal Pull-Up and Pull-Down Resistors 226

Interfacing to Powered DC Circuits 227

C++ Control of GPIOs Using sysfs 229

More C++ Programming 237

An Enhanced GPIO Class 242

Memory-Based GPIO Control 245

GPIO Control Using devmem 2 246

GPIO Control Using C and /dev/mem 248

Changing the Internal Resistor Configuration 250

WiringPi 252

Installing wiringPi 252

The gpio Command 253

Programming with wiringPi 254

Toggling an LED Using wiringPi 255

Button Press—LED Response 257

Communicating to One-Wire Sensors 260

PWM and General-Purpose Clocks 263

GPIOs and Permissions 270

Writing udev Rules 270

Permissions and wiringPi 272

Summary 273

Chapter 7 Cross-Compilation and the Eclipse IDE 275

Setting Up a Cross-Compilation Toolchain 276

The Linaro Toolchain for Raspbian 277

Debian Cross-Toolchains 279

Cross-Compilation Using Eclipse 282

Installing Eclipse on Desktop Linux 282

Configuring Eclipse for Cross-Compilation 283

Remote System Explorer 286

Integrating GitHub into Eclipse 289

Remote Debugging 289

Automatic Documentation (Doxygen) 294

Building Linux 297

Downloading the Kernel Source 298

Building the Linux Kernel 299

Deploying the Linux Kernel 303

Building a Linux Distribution (Advanced) 305

Summary 307

Further Reading 308

Chapter 8 Interfacing to the Raspberry Pi Buses 309

Introduction to Bus Communication 310

I2C 310

I2C Hardware 311

An I2C Test Circuit 315

Using Linux I2C-Tools 318

I2C communication in C 325

Wrapping I2C Devices with C++ Classes 328

Spi 330

SPI Hardware 330

SPI on the RPi 332

A First SPI Application (74HC595) 334

Bidirectional SPI Communication in C/C++ 339

Multiple SPI Slave Devices on the RPi 346

UART 347

The RPi UART 348

UART Examples in c 352

UART Applications - GPS 357

Logic-Level Translation 359

Summary 361

Further Reading 361

Chapter 9 Enhancing the Input/Output Interfaces on the RPi 363

Introduction 364

Analog-to-Digital Conversion 364

SPI Analog-to-Digital Converters (ADCs) 365

ADC Application: An Analog Light Meter 368

Testing the SPI ADC Performance 370

The C Library for BCM2835 (Advanced) 373

Digital-to-Analog Conversion 376

An I2C Digital-to-Analog Converter 376

An SPI Digital-to-Analog Converter 379

Adding PWM Outputs to the RPi 381

Extending the RPi GPIOs 387

The MCP23017 and the I 2 C Bus 389

The MCP23S17 and the SPI Bus 393

A C++ Class for the MCP23x17 Devices 394

Adding UARTs to the RPi 397

Summary 403

Chapter 10 Interacting with the Physical Environment 405

Interfacing to Actuators 406

DC Motors 407

Stepper Motors 414

Relays 418

Interfacing to Analog Sensors 420

Linear Analog Sensors 422

Nonlinear Analog Sensors 423

Analog Sensor Signal Conditioning 428

Interfacing to an Analog Accelerometer 431

Interfacing to Local Displays 433

MAX7219 Display Modules 433

Character LCD Modules 436

OLED Dot-Matrix Display 440

Building C/C++ Libraries 444

Makefiles 444

CMake 446

Summary 452

Chapter 11 Real-Time Interfacing Using the Arduino 453

The Arduino 454

An Arduino Serial Slave 457

A UART Echo Test Example 457

UART Command Control of an Arduino 461

An Arduino I2C Slave 464

An I2C Test Circuit 464

I2C Register Echo Example 465

I2C Temperature Sensor Example 467

I2C Temperature Sensor with a Warning LED 469

Arduino Slave Communication Using C/C++ 471

An I2C Ultrasonic Sensor Application 473

An Arduino SPI Slave 476

Programming the Arduino from the RPi Command Line 478

Summary 480

Part III Advanced Interfacing and Interaction 481

Chapter 12 The Internet of Things 483

The Internet of Things (IoT) 484

The RPi as an IoT Sensor 485

The RPi as a Sensor Web Server 487

Nginx 488

GNU Cgicc Applications (Advanced) 494

A C/C++ Web Client 498

Network Communications Primer 499

A C/C++ Web Client 500

Secure Communication Using OpenSSL 502

The RPi as a “Thing” 503

ThingSpeak 504

The Linux Cron Scheduler 506

Sending E-mail from the RPi 510

If This Then That (IFTTT) 512

Large-Scale IoT Frameworks 513

MQ Telemetry Transport (MQTT) 514

IBM Bluemix Internet of Things 515

An IBM IoT MQTT Node.js Publish Example 518

An IBM IoT MQTT C++ Publish Example 520

Visualize Data Using IBM Quickstart 521

The C++ Client/Server 523

IoT Device Management 526

Remote Monitoring of the RPi 527

RPi Watchdog Timers 528

Static IP Addresses 529

Power over Ethernet (PoE) 530

Summary 533

Chapter 13 Wireless Communication and Control 535

Introduction to Wireless Communications 536

Bluetooth Communications 537

Installing a Bluetooth Adapter 537

Android App Development with Bluetooth 543

Wi-Fi Communications 544

Installing a Wi-Fi Adapter 544

The NodeMCU Wi-Fi Slave Processor 547

ZigBee Communications 559

Introduction to XBee Devices 559

XBee Configuration 561

An XBee AT Mode Example 563

An XBee API Mode Example 568

Near Field Communication 572

Summary 575

Chapter 14 Raspberry Pi with a Rich User Interface 577

Rich UI RPi Architectures 578

The RPi as a General-Purpose Computer 579

RPi with an LCD Touchscreen 582

Virtual Network Computing (VNC) 583

Fat-Client Applications 585

Rich UI Application Development 586

Introduction to GTK+ on the RPi 586

Introduction to Qt on the RPi 590

Qt Primer 592

Qt Concepts 592

Qt Development Tools 596

A First Qt Creator Example 597

A Qt Weather GUI Application 598

Remote UI Application Development 602

Fat-Client Qt GUI Application 603

Multithreaded Server Applications 606

The Multithreaded Weather Server 609

Summary 612

Further Reading 613

Chapter 15 Images, Video, and Audio 615

Capturing Images and Video 616

The RPi Camera 616

USB Webcams 619

Video4Linux2 (V4L2) 621

Streaming Video 627

Image Processing and Computer Vision 628

Image Processing with OpenCV 628

Computer Vision with OpenCV 631

Boost 633

Raspberry Pi Audio 634

Core Audio Software Tools 635

Audio Devices for the RPi 635

Text-to-Speech 643

Summary 644

Further Reading 645

Chapter 16 Kernel Programming 647

Introduction 648

Why Write Kernel Modules? 648

Loadable Kernel Module (LKM) Basics 649

A First LKM Example 650

The LKM Makefile 652

Building the LKM on a Linux Desktop Machine 653

Building the LKM on the RPi 654

Testing the First LKM Example 657

An Embedded LKM Example 659

Interrupt Service Routines (ISRs) 661

Performance 665

Enhanced Button GPIO Driver LKM 665

The kobject Interface 666

Enhanced LED GPIO Driver LKM 673

Kernel Threads 674

Conclusions 675

Summary 676

Index 677

Exploring Raspberry Pi

    Product form

    £24.65

    Includes FREE delivery

    RRP £29.00 – you save £4.35 (15%)

    Order before 4pm today for delivery by Sat 4 Jul 2026.

    A Paperback / softback by Derek Molloy

    1 in stock

      Trusted by thousands of customers. See 2,385+ Customer Reviews

      View other formats and editions of Exploring Raspberry Pi by Derek Molloy

      Publisher: John Wiley & Sons Inc
      Publication Date: 01/07/2016
      ISBN13: 9781119188681, 978-1119188681
      ISBN10: 1119188687

      Description

      Book Synopsis
      Expand Raspberry Pi capabilities with fundamental engineering principles Exploring Raspberry Pi is the innovators guide to bringing Raspberry Pi to life. This book favors engineering principles over a 'recipe' approach to give you the skills you need to design and build your own projects.

      Trade Review
      "...this is a book worth having on your shelf." (I programmer, August 2016)

      Table of Contents

      Introduction xix

      Part I Raspberry Pi Basics Chapter 1

      Chapter 1 Raspberry Pi Hardware 3

      Introduction to the Platform 3

      Who Should Use the RPi 5

      When to Use the RPi 5

      When to Not Use the RPi 6

      RPi Documentation 7

      The RPi Hardware 8

      Raspberry Pi Versions 9

      The Raspberry Pi Hardware 10

      Raspberry Pi Accessories 12

      Important Accessories 13

      Recommended Accessories 14

      Optional Accessories 16

      HATs 19

      How to Destroy Your RPi! 20

      Summary 21

      Support 21

      Chapter 2 Raspberry Pi Software 23

      Linux on the Raspberry Pi 24

      Linux Distributions for the RPi 24

      Create a Linux SD Card Image for the RPi 25

      Connecting to a Network 26

      Regular Ethernet 27

      Ethernet Crossover Cable 29

      Communicating with the RPi 31

      Serial Connection with the USB-to-TTL 3.3V Cable 31

      Connecting through Secure Shell (SSH) 33

      Transferring Files Using PuTTY/psftp over SSH 35

      Controlling the Raspberry Pi 36

      Basic Linux Commands 36

      Basic File Editing 41

      What Time Is It? 43

      Package Management 44

      Configuring the Raspberry Pi 46

      The Raspberry Pi Configuration Tool 46

      Updating the RPi Software 48

      Video Output 49

      Interacting with the Onboard LEDs 50

      Shutdown and Reboot 53

      Summary 54

      Chapter 3 Exploring Embedded Linux Systems 55

      Introducing Embedded Linux 56

      Advantages and Disadvantages of Embedded Linux 57

      Is Linux Open Source and Free? 58

      Booting the Raspberry Pi 58

      Managing Linux Systems 69

      The Super User 69

      System Administration 70

      Linux Commands 89

      Linux Processes 96

      Other Linux Topics 99

      Using Git for Version Control 99

      A Practice-Based Introduction 101

      Git Branching 105

      Common Git Commands 107

      Using Desktop Virtualization 108

      Code for This Book 110

      Summary 111

      Further Reading 111

      Bibliography 111

      Chapter 4 Interfacing Electronics 113

      Analyzing Your Circuits 114

      Digital Multimeter 114

      Oscilloscopes 115

      Basic Circuit Principles 117

      Voltage, Current, Resistance, and Ohm’s Law 117

      Voltage Division 119

      Current Division 120

      Implementing RPi Circuits on a Breadboard 121

      Digital Multimeters (DMMs) and Breadboards 123

      Example Circuit: Voltage Regulation 124

      Discrete Components 126

      Diodes 126

      Light-Emitting Diodes (LEDs) 128

      Smoothing and Decoupling Capacitors 130

      Transistors 132

      Optocouplers/Opto-isolators 138

      Switches and Buttons 140

      Logic Gates 143

      Analog-to-Digital Conversion 150

      Sampling Rate 151

      Quantization 151

      Operational Amplifiers 152

      Concluding Advice 155

      Summary 156

      Further Reading 157

      Chapter 5 Programming on the Raspberry Pi 159

      Introduction 160

      Performance of Languages on the RPi 160

      Setting the RPi CPU Frequency 165

      A First Circuit for Physical Computing 166

      Scripting Languages 168

      Scripting Language Options 168

      Bash 169

      Lua 171

      Perl 173

      Python 173

      Dynamically Compiled Languages 176

      JavaScript and Node.js on the RPi 176

      Java on the RPi 178

      C and C++ on the RPi 180

      C and C++ Language Overview 182

      LED control in c 194

      The C of C++ 196

      Overview of Object-Oriented Programming 199

      Object-Oriented LED Control in C++ 203

      Interfacing to the Linux OS 206

      Glibc and Syscall 206

      Improving the Performance of Python 208

      Cython 208

      Extending Python with C/C++ 211

      Summary 215

      Further Reading 216

      Bibliography 216

      Part II Interfacing, Controlling, and Communicating 217

      Chapter 6 Interfacing to the Raspberry Pi Input/Outputs 219

      Introduction 220

      General-Purpose Input/Outputs 221

      GPIO Digital Output 222

      GPIO Digital Input 225

      Internal Pull-Up and Pull-Down Resistors 226

      Interfacing to Powered DC Circuits 227

      C++ Control of GPIOs Using sysfs 229

      More C++ Programming 237

      An Enhanced GPIO Class 242

      Memory-Based GPIO Control 245

      GPIO Control Using devmem 2 246

      GPIO Control Using C and /dev/mem 248

      Changing the Internal Resistor Configuration 250

      WiringPi 252

      Installing wiringPi 252

      The gpio Command 253

      Programming with wiringPi 254

      Toggling an LED Using wiringPi 255

      Button Press—LED Response 257

      Communicating to One-Wire Sensors 260

      PWM and General-Purpose Clocks 263

      GPIOs and Permissions 270

      Writing udev Rules 270

      Permissions and wiringPi 272

      Summary 273

      Chapter 7 Cross-Compilation and the Eclipse IDE 275

      Setting Up a Cross-Compilation Toolchain 276

      The Linaro Toolchain for Raspbian 277

      Debian Cross-Toolchains 279

      Cross-Compilation Using Eclipse 282

      Installing Eclipse on Desktop Linux 282

      Configuring Eclipse for Cross-Compilation 283

      Remote System Explorer 286

      Integrating GitHub into Eclipse 289

      Remote Debugging 289

      Automatic Documentation (Doxygen) 294

      Building Linux 297

      Downloading the Kernel Source 298

      Building the Linux Kernel 299

      Deploying the Linux Kernel 303

      Building a Linux Distribution (Advanced) 305

      Summary 307

      Further Reading 308

      Chapter 8 Interfacing to the Raspberry Pi Buses 309

      Introduction to Bus Communication 310

      I2C 310

      I2C Hardware 311

      An I2C Test Circuit 315

      Using Linux I2C-Tools 318

      I2C communication in C 325

      Wrapping I2C Devices with C++ Classes 328

      Spi 330

      SPI Hardware 330

      SPI on the RPi 332

      A First SPI Application (74HC595) 334

      Bidirectional SPI Communication in C/C++ 339

      Multiple SPI Slave Devices on the RPi 346

      UART 347

      The RPi UART 348

      UART Examples in c 352

      UART Applications - GPS 357

      Logic-Level Translation 359

      Summary 361

      Further Reading 361

      Chapter 9 Enhancing the Input/Output Interfaces on the RPi 363

      Introduction 364

      Analog-to-Digital Conversion 364

      SPI Analog-to-Digital Converters (ADCs) 365

      ADC Application: An Analog Light Meter 368

      Testing the SPI ADC Performance 370

      The C Library for BCM2835 (Advanced) 373

      Digital-to-Analog Conversion 376

      An I2C Digital-to-Analog Converter 376

      An SPI Digital-to-Analog Converter 379

      Adding PWM Outputs to the RPi 381

      Extending the RPi GPIOs 387

      The MCP23017 and the I 2 C Bus 389

      The MCP23S17 and the SPI Bus 393

      A C++ Class for the MCP23x17 Devices 394

      Adding UARTs to the RPi 397

      Summary 403

      Chapter 10 Interacting with the Physical Environment 405

      Interfacing to Actuators 406

      DC Motors 407

      Stepper Motors 414

      Relays 418

      Interfacing to Analog Sensors 420

      Linear Analog Sensors 422

      Nonlinear Analog Sensors 423

      Analog Sensor Signal Conditioning 428

      Interfacing to an Analog Accelerometer 431

      Interfacing to Local Displays 433

      MAX7219 Display Modules 433

      Character LCD Modules 436

      OLED Dot-Matrix Display 440

      Building C/C++ Libraries 444

      Makefiles 444

      CMake 446

      Summary 452

      Chapter 11 Real-Time Interfacing Using the Arduino 453

      The Arduino 454

      An Arduino Serial Slave 457

      A UART Echo Test Example 457

      UART Command Control of an Arduino 461

      An Arduino I2C Slave 464

      An I2C Test Circuit 464

      I2C Register Echo Example 465

      I2C Temperature Sensor Example 467

      I2C Temperature Sensor with a Warning LED 469

      Arduino Slave Communication Using C/C++ 471

      An I2C Ultrasonic Sensor Application 473

      An Arduino SPI Slave 476

      Programming the Arduino from the RPi Command Line 478

      Summary 480

      Part III Advanced Interfacing and Interaction 481

      Chapter 12 The Internet of Things 483

      The Internet of Things (IoT) 484

      The RPi as an IoT Sensor 485

      The RPi as a Sensor Web Server 487

      Nginx 488

      GNU Cgicc Applications (Advanced) 494

      A C/C++ Web Client 498

      Network Communications Primer 499

      A C/C++ Web Client 500

      Secure Communication Using OpenSSL 502

      The RPi as a “Thing” 503

      ThingSpeak 504

      The Linux Cron Scheduler 506

      Sending E-mail from the RPi 510

      If This Then That (IFTTT) 512

      Large-Scale IoT Frameworks 513

      MQ Telemetry Transport (MQTT) 514

      IBM Bluemix Internet of Things 515

      An IBM IoT MQTT Node.js Publish Example 518

      An IBM IoT MQTT C++ Publish Example 520

      Visualize Data Using IBM Quickstart 521

      The C++ Client/Server 523

      IoT Device Management 526

      Remote Monitoring of the RPi 527

      RPi Watchdog Timers 528

      Static IP Addresses 529

      Power over Ethernet (PoE) 530

      Summary 533

      Chapter 13 Wireless Communication and Control 535

      Introduction to Wireless Communications 536

      Bluetooth Communications 537

      Installing a Bluetooth Adapter 537

      Android App Development with Bluetooth 543

      Wi-Fi Communications 544

      Installing a Wi-Fi Adapter 544

      The NodeMCU Wi-Fi Slave Processor 547

      ZigBee Communications 559

      Introduction to XBee Devices 559

      XBee Configuration 561

      An XBee AT Mode Example 563

      An XBee API Mode Example 568

      Near Field Communication 572

      Summary 575

      Chapter 14 Raspberry Pi with a Rich User Interface 577

      Rich UI RPi Architectures 578

      The RPi as a General-Purpose Computer 579

      RPi with an LCD Touchscreen 582

      Virtual Network Computing (VNC) 583

      Fat-Client Applications 585

      Rich UI Application Development 586

      Introduction to GTK+ on the RPi 586

      Introduction to Qt on the RPi 590

      Qt Primer 592

      Qt Concepts 592

      Qt Development Tools 596

      A First Qt Creator Example 597

      A Qt Weather GUI Application 598

      Remote UI Application Development 602

      Fat-Client Qt GUI Application 603

      Multithreaded Server Applications 606

      The Multithreaded Weather Server 609

      Summary 612

      Further Reading 613

      Chapter 15 Images, Video, and Audio 615

      Capturing Images and Video 616

      The RPi Camera 616

      USB Webcams 619

      Video4Linux2 (V4L2) 621

      Streaming Video 627

      Image Processing and Computer Vision 628

      Image Processing with OpenCV 628

      Computer Vision with OpenCV 631

      Boost 633

      Raspberry Pi Audio 634

      Core Audio Software Tools 635

      Audio Devices for the RPi 635

      Text-to-Speech 643

      Summary 644

      Further Reading 645

      Chapter 16 Kernel Programming 647

      Introduction 648

      Why Write Kernel Modules? 648

      Loadable Kernel Module (LKM) Basics 649

      A First LKM Example 650

      The LKM Makefile 652

      Building the LKM on a Linux Desktop Machine 653

      Building the LKM on the RPi 654

      Testing the First LKM Example 657

      An Embedded LKM Example 659

      Interrupt Service Routines (ISRs) 661

      Performance 665

      Enhanced Button GPIO Driver LKM 665

      The kobject Interface 666

      Enhanced LED GPIO Driver LKM 673

      Kernel Threads 674

      Conclusions 675

      Summary 676

      Index 677

      Recently viewed products

      © 2026 Book Curl

        • American Express
        • Apple Pay
        • Diners Club
        • Discover
        • Google Pay
        • Maestro
        • Mastercard
        • PayPal
        • Shop Pay
        • Union Pay
        • Visa

        Login

        Forgot your password?

        Don't have an account yet?
        Create account