Exploring Raspberry Pi: Interfacing to the Real World with Embedded Linux

Exploring Raspberry Pi: Interfacing to the Real World with Embedded Linux

by Derek Molloy
Exploring Raspberry Pi: Interfacing to the Real World with Embedded Linux

Exploring Raspberry Pi: Interfacing to the Real World with Embedded Linux

by Derek Molloy



Available on Compatible NOOK devices, the free NOOK App and in My Digital Library.
WANT A NOOK?  Explore Now

Related collections and offers

LEND ME® See Details


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. You'll understand the fundamental principles in a way that transfers to any type of electronics, electronic modules, or external peripherals, using a "learning by doing" approach that caters to both beginners and experts. The book begins with basic Linux and programming skills, and helps you stock your inventory with common parts and supplies. Next, you'll learn how to make parts work together to achieve the goals of your project, no matter what type of components you use. The companion website provides a full repository that structures all of the code and scripts, along with links to video tutorials and supplementary content that takes you deeper into your project.

The Raspberry Pi's most famous feature is its adaptability. It can be used for thousands of electronic applications, and using the Linux OS expands the functionality even more. This book helps you get the most from your Raspberry Pi, but it also gives you the fundamental engineering skills you need to incorporate any electronics into any project.

  • Develop the Linux and programming skills you need to build basic applications
  • Build your inventory of parts so you can always "make it work"
  • Understand interfacing, controlling, and communicating with almost any component
  • Explore advanced applications with video, audio, real-world interactions, and more

Be free to adapt and create with Exploring Raspberry Pi.

Product Details

ISBN-13: 9781119188698
Publisher: Wiley
Publication date: 06/13/2016
Format: eBook
Pages: 720
File size: 33 MB
Note: This product may take a few minutes to download.

About the Author

DR. DEREK MOLLOY is a senior lecturer at the School of Electronic Engineering, Faculty of Engineering and Computing, Dublin City University, Ireland. He is also the author of the hugely popular book on the BeagleBone platform titled Exploring BeagleBone, also published by Wiley. His popular YouTube video series has introduced millions of people to embedded Linux and digital electronics topics. He has received several awards for teaching and learning, including the 2012 Irish Learning Technology Association (ILTA) national award for Innovation in Teaching and Learning. The same year, he was also awarded the Dublin City University President's Award for Excellence in Teaching and Learning.

Read an Excerpt

Click to read or download

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

From the B&N Reads Blog

Customer Reviews