{"product_id":"exploring-beaglebone-isbn-9781119533160","title":"Exploring BeagleBone","description":"\u003cp\u003e\u003cb\u003eIn-depth instruction and practical techniques for building with the BeagleBone embedded Linux platform\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e\u003ci\u003eExploring BeagleBone\u003c\/i\u003e is a hands-on guide to bringing gadgets, gizmos, and robots to life using the popular BeagleBone embedded Linux platform. Comprehensive content and deep detail provide more than just a BeagleBone instruction manual-you'll also learn the underlying engineering techniques that will allow you to create your own projects. The book begins with a foundational primer on essential skills, and then gradually moves into communication, control, and advanced applications using C\/C++, allowing you to learn at your own pace. In addition, the book's companion website features instructional videos, source code, discussion forums, and more, to ensure that you have everything you need.\u003c\/p\u003e \u003cp\u003eThe BeagleBone's small size, high performance, low cost, and extreme adaptability have made it a favorite development platform, and the Linux software base allows for complex yet flexible functionality. The BeagleBone has applications in smart buildings, robot control, environmental sensing, to name a few; and, expansion boards and peripherals dramatically increase the possibilities. \u003ci\u003eExploring BeagleBone\u003c\/i\u003e provides a reader-friendly  guide to the device, including a crash course in computer engineering. While following step by step, you can:\u003c\/p\u003e \u003cul\u003e \u003cli\u003eGet up to speed on embedded Linux, electronics, and programming\u003c\/li\u003e \u003cli\u003eMaster interfacing electronic circuits, buses and modules, with practical examples\u003c\/li\u003e \u003cli\u003eExplore the Internet-connected BeagleBone and the BeagleBone with a display\u003c\/li\u003e \u003cli\u003eApply the BeagleBone to sensing applications, including video and sound\u003c\/li\u003e \u003cli\u003eExplore the BeagleBone's Programmable Real-Time Controllers\u003c\/li\u003e \u003cli\u003eUpdated to cover the latest Beagle boards, Linux kernel versions, and Linux software releases.\u003c\/li\u003e \u003cli\u003eIncludes new content on Linux kernel development, the Linux Remote Processor Framework, CAN bus, IoT frameworks, and much more!\u003c\/li\u003e  \u003c\/ul\u003e \u003cp\u003eHands-on learning helps ensure that your new skills stay with you, allowing you to design with electronics, modules, or peripherals even beyond the BeagleBone. Insightful guidance and online peer support help you transition from beginner to expert as you master the techniques presented in \u003ci\u003eExploring BeagleBone\u003c\/i\u003e, the practical handbook for the popular computing platform.\u003c\/p\u003e \u003cp\u003eIntroduction xxix\u003c\/p\u003e \u003cp\u003e\u003cb\u003ePart I Beagle Board Basics 1\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 1 The Beagle Hardware Platform 3\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eIntroduction to the Boards 3\u003c\/p\u003e \u003cp\u003eWho Should Use the Beagle Platform 6\u003c\/p\u003e \u003cp\u003eWhen to Use Beagle Boards 7\u003c\/p\u003e \u003cp\u003eWhen Should You Not Use the Beagle Boards 7\u003c\/p\u003e \u003cp\u003eBeagleBone Documentation 8\u003c\/p\u003e \u003cp\u003eThe Beagle Hardware 10\u003c\/p\u003e \u003cp\u003eBeagleBone Versions 10\u003c\/p\u003e \u003cp\u003eThe Beagle Hardware 12\u003c\/p\u003e \u003cp\u003eBeagle Accessories 19\u003c\/p\u003e \u003cp\u003eHighly Recommended Accessories 19\u003c\/p\u003e \u003cp\u003eHeaders for the PocketBeagle 20\u003c\/p\u003e \u003cp\u003eMicro-SD Card (for Booting or Flashing eMMCs) 20\u003c\/p\u003e \u003cp\u003eExternal 5V Power Supply (for Peripherals) 22\u003c\/p\u003e \u003cp\u003eEthernet Cable (for Wired BBB Network Connection) 22\u003c\/p\u003e \u003cp\u003eHDMI Cable (for Connection to Monitors\/Televisions) 22\u003c\/p\u003e \u003cp\u003eUSB to Serial UART TTL 3.3 (for Finding Problems) 23\u003c\/p\u003e \u003cp\u003eOptional Accessories 24\u003c\/p\u003e \u003cp\u003eUSB Hub (to Connect Several USB Devices to a USB Host) 25\u003c\/p\u003e \u003cp\u003eMicro-HDMI to VGA Adapters (for VGA Video and Sound) 25\u003c\/p\u003e \u003cp\u003eWi-Fi Adapters (for Wireless Networking) 25\u003c\/p\u003e \u003cp\u003eUSB Webcam (for Capturing Images and Streaming Video) 25\u003c\/p\u003e \u003cp\u003eUSB Keyboard and Mouse (for General-Purpose Computing) 26\u003c\/p\u003e \u003cp\u003eCapes 26\u003c\/p\u003e \u003cp\u003eHow to Destroy Your Board! 27\u003c\/p\u003e \u003cp\u003eSummary 29\u003c\/p\u003e \u003cp\u003eSupport 29\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 2 Beagle Software 31\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eLinux on the Beagle Boards 32\u003c\/p\u003e \u003cp\u003eLinux Distributions for Beagle Boards 32\u003c\/p\u003e \u003cp\u003eCreate a Linux Micro-SD Card Image 33\u003c\/p\u003e \u003cp\u003eCommunicating with the Boards 34\u003c\/p\u003e \u003cp\u003eInstalling Drivers 34\u003c\/p\u003e \u003cp\u003eWired Network Connections 35\u003c\/p\u003e \u003cp\u003eInternet-over-USB (All Boards) 36\u003c\/p\u003e \u003cp\u003eRegular Ethernet (BBB and BeagleBoard Only) 39\u003c\/p\u003e \u003cp\u003eEthernet Crossover Cable (BBB and BeagleBoard Only) 40\u003c\/p\u003e \u003cp\u003eCommunicating with Your Board 42\u003c\/p\u003e \u003cp\u003eSerial Connection over USB 42\u003c\/p\u003e \u003cp\u003eSerial Connection with the USB-to-TTL 3.3 V Cable 43\u003c\/p\u003e \u003cp\u003eConnecting Through Secure Shell 44\u003c\/p\u003e \u003cp\u003eSecure Shell Connections Using Putty 45\u003c\/p\u003e \u003cp\u003eChrome Apps: Secure Shell Client 45\u003c\/p\u003e \u003cp\u003eTransferring Files Using Putty\/psftp over SSH 46\u003c\/p\u003e \u003cp\u003eControlling the Beagle Board 48\u003c\/p\u003e \u003cp\u003eBasic Linux Commands 48\u003c\/p\u003e \u003cp\u003eFirst Steps 49\u003c\/p\u003e \u003cp\u003eBasic File System Commands 50\u003c\/p\u003e \u003cp\u003eEnvironment Variables 52\u003c\/p\u003e \u003cp\u003eBasic File Editing 53\u003c\/p\u003e \u003cp\u003eWhat Time Is It? 54\u003c\/p\u003e \u003cp\u003ePackage Management 56\u003c\/p\u003e \u003cp\u003eBeagle-Specific Commands 58\u003c\/p\u003e \u003cp\u003eExpand the File System on an SD Card 59\u003c\/p\u003e \u003cp\u003eUpdate the Kernel 60\u003c\/p\u003e \u003cp\u003eInteracting with the On-Board LEDs 61\u003c\/p\u003e \u003cp\u003eShutdown 63\u003c\/p\u003e \u003cp\u003eNode.js, Cloud9, and BoneScript 64\u003c\/p\u003e \u003cp\u003eIntroduction to Node.js 64\u003c\/p\u003e \u003cp\u003eIntroduction to the Cloud9 IDE 66\u003c\/p\u003e \u003cp\u003eIntroduction to BoneScript 67\u003c\/p\u003e \u003cp\u003eSummary 69\u003c\/p\u003e \u003cp\u003eFurther Reading 69\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 3 Exploring Embedded Linux Systems 71\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eIntroducing Embedded Linux 72\u003c\/p\u003e \u003cp\u003eAdvantages and Disadvantages of Embedded Linux 73\u003c\/p\u003e \u003cp\u003eIs Linux Open Source and Free? 74\u003c\/p\u003e \u003cp\u003eBooting the Beagle Boards 74\u003c\/p\u003e \u003cp\u003eBootloaders 74\u003c\/p\u003e \u003cp\u003eKernel Space and User Space 83\u003c\/p\u003e \u003cp\u003eThe systemd System and Service Manager 85\u003c\/p\u003e \u003cp\u003eManaging Linux Systems 90\u003c\/p\u003e \u003cp\u003eThe Superuser 90\u003c\/p\u003e \u003cp\u003eSystem Administration 92\u003c\/p\u003e \u003cp\u003eThe Linux File System 92\u003c\/p\u003e \u003cp\u003eLinks to Files and Directories 94\u003c\/p\u003e \u003cp\u003eUsers and Groups 95\u003c\/p\u003e \u003cp\u003eFile System Permissions 98\u003c\/p\u003e \u003cp\u003eThe Linux Root Directory 102\u003c\/p\u003e \u003cp\u003eCommands for File Systems 103\u003c\/p\u003e \u003cp\u003eThe Reliability of SD Card\/eMMC File Systems 111\u003c\/p\u003e \u003cp\u003eLinux Commands 113\u003c\/p\u003e \u003cp\u003eOutput and Input Redirection (\u0026gt;, \u0026gt;\u0026gt;, and \u0026lt;) 113\u003c\/p\u003e \u003cp\u003ePipes (| and tee) 114\u003c\/p\u003e \u003cp\u003eFilter Commands (from sort to xargs) 115\u003c\/p\u003e \u003cp\u003eecho and cat 117\u003c\/p\u003e \u003cp\u003ediff 118\u003c\/p\u003e \u003cp\u003etar 119\u003c\/p\u003e \u003cp\u003emd5sum 120\u003c\/p\u003e \u003cp\u003eLinux Processes 121\u003c\/p\u003e \u003cp\u003eHow to Control Linux Processes 121\u003c\/p\u003e \u003cp\u003eForeground and Background Processes 122\u003c\/p\u003e \u003cp\u003eOther Linux Topics 124\u003c\/p\u003e \u003cp\u003eUsing Git for Version Control 124\u003c\/p\u003e \u003cp\u003eA Practice-Based Introduction 126\u003c\/p\u003e \u003cp\u003eCloning a Repository (git clone) 126\u003c\/p\u003e \u003cp\u003eGetting the Status (git status) 128\u003c\/p\u003e \u003cp\u003eAdding to the Staging Area (git add) 128\u003c\/p\u003e \u003cp\u003eCommitting to the Local Repository (git commit) 129\u003c\/p\u003e \u003cp\u003ePushing to the Remote Repository (git push) 129\u003c\/p\u003e \u003cp\u003eGit Branching 130\u003c\/p\u003e \u003cp\u003eCreating a Branch (git branch) 130\u003c\/p\u003e \u003cp\u003eMerging a Branch (git merge) 132\u003c\/p\u003e \u003cp\u003eDeleting a Branch (git branch -d) 132\u003c\/p\u003e \u003cp\u003eCommon Git Commands 133\u003c\/p\u003e \u003cp\u003eDesktop Virtualization 134\u003c\/p\u003e \u003cp\u003eCode for This Book 135\u003c\/p\u003e \u003cp\u003eSummary 136\u003c\/p\u003e \u003cp\u003eFurther Reading 136\u003c\/p\u003e \u003cp\u003eBibliography 137\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 4 Interfacing Electronics 139\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eAnalyzing Your Circuits 140\u003c\/p\u003e \u003cp\u003eDigital Multimeter 140\u003c\/p\u003e \u003cp\u003eOscilloscopes 141\u003c\/p\u003e \u003cp\u003eBasic Circuit Principles 143\u003c\/p\u003e \u003cp\u003eVoltage, Current, Resistance, and Ohm’s Law 143\u003c\/p\u003e \u003cp\u003eVoltage Division 145\u003c\/p\u003e \u003cp\u003eCurrent Division 146\u003c\/p\u003e \u003cp\u003eImplementing Circuits on a Breadboard 147\u003c\/p\u003e \u003cp\u003eDigital Multimeters and Breadboards 149\u003c\/p\u003e \u003cp\u003eExample Circuit: Voltage Regulation 150\u003c\/p\u003e \u003cp\u003eDiscrete Components 152\u003c\/p\u003e \u003cp\u003eDiodes 152\u003c\/p\u003e \u003cp\u003eLight-Emitting Diodes 153\u003c\/p\u003e \u003cp\u003eSmoothing and Decoupling Capacitors 156\u003c\/p\u003e \u003cp\u003eTransistors 158\u003c\/p\u003e \u003cp\u003eTransistors as Switches 159\u003c\/p\u003e \u003cp\u003eField Effect Transistors as Switches 162\u003c\/p\u003e \u003cp\u003eOptocouplers\/Optoisolators 164\u003c\/p\u003e \u003cp\u003eSwitches and Buttons 166\u003c\/p\u003e \u003cp\u003eHysteresis 168\u003c\/p\u003e \u003cp\u003eLogic Gates 169\u003c\/p\u003e \u003cp\u003eFloating Inputs 173\u003c\/p\u003e \u003cp\u003ePull-Up and Pull-Down Resistors 173\u003c\/p\u003e \u003cp\u003eOpen-Collector and Open-Drain Outputs 174\u003c\/p\u003e \u003cp\u003eInterconnecting Gates 175\u003c\/p\u003e \u003cp\u003eAnalog-to-Digital Conversion 177\u003c\/p\u003e \u003cp\u003eSampling Rate 177\u003c\/p\u003e \u003cp\u003eQuantization 178\u003c\/p\u003e \u003cp\u003eOperational Amplifi ers 178\u003c\/p\u003e \u003cp\u003eIdeal Operational Amplifiers 178\u003c\/p\u003e \u003cp\u003eNegative Feedback and Voltage Follower 181\u003c\/p\u003e \u003cp\u003ePositive Feedback 181\u003c\/p\u003e \u003cp\u003eConcluding Advice 182\u003c\/p\u003e \u003cp\u003eSummary 182\u003c\/p\u003e \u003cp\u003eFurther Reading 183\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 5 Practical Beagle Board Programming 185\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eIntroduction 186\u003c\/p\u003e \u003cp\u003ePerformance of Different Languages 186\u003c\/p\u003e \u003cp\u003eSetting the CPU Frequency 190\u003c\/p\u003e \u003cp\u003eScripting Languages 192\u003c\/p\u003e \u003cp\u003eScripting Language Options 192\u003c\/p\u003e \u003cp\u003eBash 193\u003c\/p\u003e \u003cp\u003eLua 196\u003c\/p\u003e \u003cp\u003ePerl 197\u003c\/p\u003e \u003cp\u003ePython 198\u003c\/p\u003e \u003cp\u003eDynamically Compiled Languages 201\u003c\/p\u003e \u003cp\u003eJavaScript and Node.js on the Beagle boards 201\u003c\/p\u003e \u003cp\u003eJava on the Beagle Boards 203\u003c\/p\u003e \u003cp\u003eC and C++ on the Beagle Boards 207\u003c\/p\u003e \u003cp\u003eC and C++ Language Overview 210\u003c\/p\u003e \u003cp\u003eCompiling and Linking 211\u003c\/p\u003e \u003cp\u003eWriting the Shortest C\/C++ Program 213\u003c\/p\u003e \u003cp\u003eStatic and Dynamic Compilation 215\u003c\/p\u003e \u003cp\u003eVariables and Operators in C\/C++ 215\u003c\/p\u003e \u003cp\u003ePointers in C\/C++ 219\u003c\/p\u003e \u003cp\u003eC-Style Strings 221\u003c\/p\u003e \u003cp\u003eLED Flashing Application in C 223\u003c\/p\u003e \u003cp\u003eThe C of C++ 224\u003c\/p\u003e \u003cp\u003eFirst Example and Strings in C++ 225\u003c\/p\u003e \u003cp\u003ePassing by Value, Pointer, and Reference 226\u003c\/p\u003e \u003cp\u003eFlashing the LEDs Using C++ (non-OO) 227\u003c\/p\u003e \u003cp\u003eWriting a Multicall Binary 228\u003c\/p\u003e \u003cp\u003eOverview of Object-Oriented Programming 229\u003c\/p\u003e \u003cp\u003eClasses and Objects 229\u003c\/p\u003e \u003cp\u003eEncapsulation 230\u003c\/p\u003e \u003cp\u003eInheritance 231\u003c\/p\u003e \u003cp\u003eObject-Oriented LED Flashing Code 233\u003c\/p\u003e \u003cp\u003eInterfacing to the Linux OS 236\u003c\/p\u003e \u003cp\u003eGlibc and Syscall 237\u003c\/p\u003e \u003cp\u003eImproving the Performance of Python 239\u003c\/p\u003e \u003cp\u003eCython 239\u003c\/p\u003e \u003cp\u003eBoost.Python 242\u003c\/p\u003e \u003cp\u003eSummary 244\u003c\/p\u003e \u003cp\u003eFurther Reading 244\u003c\/p\u003e \u003cp\u003eBibliography 244\u003c\/p\u003e \u003cp\u003e\u003cb\u003ePart II Interfacing, Controlling, and Communicating 245     \u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 6 Interfacing to the Beagle Board Input\/Outputs 247\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eGeneral-Purpose Input\/Outputs 248\u003c\/p\u003e \u003cp\u003eIntroduction to GPIO Interfacing 248\u003c\/p\u003e \u003cp\u003eGPIO Digital Output 250\u003c\/p\u003e \u003cp\u003eGPIO Digital Input 255\u003c\/p\u003e \u003cp\u003eGPIO Confi guration 257\u003c\/p\u003e \u003cp\u003eInternal Pull-Up and Pull-Down Resistors 258\u003c\/p\u003e \u003cp\u003eGPIO Pin Configuration Settings 258\u003c\/p\u003e \u003cp\u003eInterfacing to Powered DC Circuits 265\u003c\/p\u003e \u003cp\u003eC++ Control of GPIOs 267\u003c\/p\u003e \u003cp\u003eThe Linux Device Tree 271\u003c\/p\u003e \u003cp\u003eFlattened Device Tree on the Beagle Boards 272\u003c\/p\u003e \u003cp\u003eModifying a Board Device Tree 276\u003c\/p\u003e \u003cp\u003eBoot Confi guration Files 278\u003c\/p\u003e \u003cp\u003eAnalog Inputs and Outputs 280\u003c\/p\u003e \u003cp\u003eAnalog Inputs 280\u003c\/p\u003e \u003cp\u003eEnabling the Analog Inputs 280\u003c\/p\u003e \u003cp\u003eAnalog Input Application—A Simple Light Meter 282\u003c\/p\u003e \u003cp\u003eAnalog Outputs (PWM) 285\u003c\/p\u003e \u003cp\u003eOutput Application—Controlling a Servo Motor 289\u003c\/p\u003e \u003cp\u003eBoneScript 290\u003c\/p\u003e \u003cp\u003eDigital Read and Write 290\u003c\/p\u003e \u003cp\u003eAnalog Read 292\u003c\/p\u003e \u003cp\u003eAnalog Write (PWM) 293\u003c\/p\u003e \u003cp\u003eGPIO Performance 294\u003c\/p\u003e \u003cp\u003eAdvanced GPIO Topics 295\u003c\/p\u003e \u003cp\u003eMore C++ Programming 295\u003c\/p\u003e \u003cp\u003eCallback Functions 295\u003c\/p\u003e \u003cp\u003ePOSIX Threads 297\u003c\/p\u003e \u003cp\u003eLinux poll (sys\/poll.h) 298\u003c\/p\u003e \u003cp\u003eEnhanced GPIO Class 299\u003c\/p\u003e \u003cp\u003eUsing GPIOs without Using sudo 302\u003c\/p\u003e \u003cp\u003eRoot Permissions with setuid 304\u003c\/p\u003e \u003cp\u003eSummary 306\u003c\/p\u003e \u003cp\u003eFurther Reading 306\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 7 Cross-Compilation, Eclipse, and Building Linux 307\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eSetting Up a Cross-Compilation Toolchain 308\u003c\/p\u003e \u003cp\u003eCross-Compiling Under Debian 309\u003c\/p\u003e \u003cp\u003eTesting the Toolchain 311\u003c\/p\u003e \u003cp\u003eEmulating the armhf Architecture 312\u003c\/p\u003e \u003cp\u003eCross-Compilation with Third-Party Libraries (Multiarch) 314\u003c\/p\u003e \u003cp\u003eCross-Compilation Using Eclipse 315\u003c\/p\u003e \u003cp\u003eInstalling Eclipse on Desktop Linux 315\u003c\/p\u003e \u003cp\u003eConfi guring Eclipse for Cross-Compilation 316\u003c\/p\u003e \u003cp\u003eRemote System Explorer 318\u003c\/p\u003e \u003cp\u003eIntegrating GitHub into Eclipse 322\u003c\/p\u003e \u003cp\u003eRemote Debugging 322\u003c\/p\u003e \u003cp\u003eAutomatic Documentation (Doxygen) 328\u003c\/p\u003e \u003cp\u003eAdding Doxygen Editor Support in Eclipse 330\u003c\/p\u003e \u003cp\u003eCross-Building Linux 330\u003c\/p\u003e \u003cp\u003eDownloading the Kernel Source 331\u003c\/p\u003e \u003cp\u003eBuilding the Linux Kernel 332\u003c\/p\u003e \u003cp\u003eBuilding a Poky Linux Distribution (Advanced) 335\u003c\/p\u003e \u003cp\u003eSummary 340\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 8 Interfacing to the Beagle Board Buses 341\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eIntroduction to Bus Communication 342\u003c\/p\u003e \u003cp\u003eI2C 343\u003c\/p\u003e \u003cp\u003eI2C Hardware 343\u003c\/p\u003e \u003cp\u003eI2C on the Beagle Boards 344\u003c\/p\u003e \u003cp\u003eI2C Devices on the Beagle Boards 345\u003c\/p\u003e \u003cp\u003eAn I2C Test Circuit 346\u003c\/p\u003e \u003cp\u003eA Real-Time Clock 346\u003c\/p\u003e \u003cp\u003eThe ADXL345 Accelerometer 347\u003c\/p\u003e \u003cp\u003eWiring the Test Circuit 348\u003c\/p\u003e \u003cp\u003eUsing Linux I2C-Tools 348\u003c\/p\u003e \u003cp\u003ei2cdetect 348\u003c\/p\u003e \u003cp\u003ei2cdump 349\u003c\/p\u003e \u003cp\u003ei2cget 353\u003c\/p\u003e \u003cp\u003ei2cset 354\u003c\/p\u003e \u003cp\u003eI2C Communication in C 356\u003c\/p\u003e \u003cp\u003eWrapping I2C Devices with C++ Classes 358\u003c\/p\u003e \u003cp\u003eSPI 360\u003c\/p\u003e \u003cp\u003eSPI Hardware 361\u003c\/p\u003e \u003cp\u003eSPI on the Beagle Boards 363\u003c\/p\u003e \u003cp\u003eTesting an SPI Bus 363\u003c\/p\u003e \u003cp\u003eA First SPI Application (74HC595) 365\u003c\/p\u003e \u003cp\u003eWiring the 74HC595 Circuit 366\u003c\/p\u003e \u003cp\u003eSPI Communication Using C 367\u003c\/p\u003e \u003cp\u003eBidirectional SPI Communication in C\/C++ 370\u003c\/p\u003e \u003cp\u003eThe ADXL345 SPI Interface 370\u003c\/p\u003e \u003cp\u003eConnecting the ADXL345 to the Beagle Boards 372\u003c\/p\u003e \u003cp\u003eWrapping SPI Devices with C++ Classes 373\u003c\/p\u003e \u003cp\u003eThree-Wire SPI Communication 375\u003c\/p\u003e \u003cp\u003eMultiple SPI Slave Devices 376\u003c\/p\u003e \u003cp\u003eUART 377\u003c\/p\u003e \u003cp\u003eThe Beagle Board UART 378\u003c\/p\u003e \u003cp\u003eUART Examples in C 380\u003c\/p\u003e \u003cp\u003eBeagle Board Serial Client 381\u003c\/p\u003e \u003cp\u003eLED Serial Server 383\u003c\/p\u003e \u003cp\u003eUART Applications: GPS 386\u003c\/p\u003e \u003cp\u003eCAN Bus 388\u003c\/p\u003e \u003cp\u003eBeagle Board CAN Bus 389\u003c\/p\u003e \u003cp\u003eSocketCAN 390\u003c\/p\u003e \u003cp\u003eA CAN Bus Test Circuit 392\u003c\/p\u003e \u003cp\u003eLinux CAN-utils 393\u003c\/p\u003e \u003cp\u003eA SocketCAN C Example 394\u003c\/p\u003e \u003cp\u003eLogic-Level Translation 396\u003c\/p\u003e \u003cp\u003eSummary 398\u003c\/p\u003e \u003cp\u003eFurther Reading 399\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 9 Interacting with the Physical Environment 401\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eInterfacing to Actuators 402\u003c\/p\u003e \u003cp\u003eDC Motors 403\u003c\/p\u003e \u003cp\u003eDriving Small DC Motors (up to 1.5 A) 406\u003c\/p\u003e \u003cp\u003eControlling a DC Motor Using sysfs 407\u003c\/p\u003e \u003cp\u003eDriving Larger DC Motors (Greater Than 1.5 A) 409\u003c\/p\u003e \u003cp\u003eControlling a DC Motor Using C++ 411\u003c\/p\u003e \u003cp\u003eStepper Motors 412\u003c\/p\u003e \u003cp\u003eThe EasyDriver Stepper Motor Driver 413\u003c\/p\u003e \u003cp\u003eA Beagle Board Stepper Motor Driver Circuit 414\u003c\/p\u003e \u003cp\u003eControlling a Stepper Motor Using C++ 415\u003c\/p\u003e \u003cp\u003eRelays 417\u003c\/p\u003e \u003cp\u003eInterfacing to Analog Sensors 418\u003c\/p\u003e \u003cp\u003eProtecting the ADC Inputs 420\u003c\/p\u003e \u003cp\u003eDiode Clamping 421\u003c\/p\u003e \u003cp\u003eOp-Amp Clamping 422\u003c\/p\u003e \u003cp\u003eAnalog Sensor Signal Conditioning 427\u003c\/p\u003e \u003cp\u003eScaling Using Voltage Division 427\u003c\/p\u003e \u003cp\u003eSignal Offsetting and Scaling 428\u003c\/p\u003e \u003cp\u003eAnalog Interfacing Examples 431\u003c\/p\u003e \u003cp\u003eInfrared Distance Sensing 431\u003c\/p\u003e \u003cp\u003eADXL335 Conditioning Example 436\u003c\/p\u003e \u003cp\u003eInterfacing to Local Displays 438\u003c\/p\u003e \u003cp\u003eMAX7219 Display Modules 438\u003c\/p\u003e \u003cp\u003eCharacter LCD Modules 441\u003c\/p\u003e \u003cp\u003eBuilding C\/C++ Libraries 445\u003c\/p\u003e \u003cp\u003eMakefi les 446\u003c\/p\u003e \u003cp\u003eCMake 447\u003c\/p\u003e \u003cp\u003eA Hello World Example 448\u003c\/p\u003e \u003cp\u003eBuilding a C\/C++ Library 449\u003c\/p\u003e \u003cp\u003eUsing a Shared (.so) or Static (.a) Library 452\u003c\/p\u003e \u003cp\u003eSummary 453\u003c\/p\u003e \u003cp\u003eFurther Reading 454\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 10 Real-Time Interfacing Using External Slave Processors 455\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eReal-Time Beagle Board 456\u003c\/p\u003e \u003cp\u003eReal-Time Kernels 456\u003c\/p\u003e \u003cp\u003eReal-Time Hardware Solutions 458\u003c\/p\u003e \u003cp\u003eExtended GPIO Availability 458\u003c\/p\u003e \u003cp\u003eThe MCP23017 and the I2C Bus 460\u003c\/p\u003e \u003cp\u003eControlling the GPIO LED Circuit 461\u003c\/p\u003e \u003cp\u003eReading the GPIO Button State 462\u003c\/p\u003e \u003cp\u003eAn Interrupt Configuration Example (Advanced) 463\u003c\/p\u003e \u003cp\u003eThe MCP23S17 and the SPI Bus 464\u003c\/p\u003e \u003cp\u003eA C++ Class for the MCP23x17 Devices 465\u003c\/p\u003e \u003cp\u003eAdding External UARTs 468\u003c\/p\u003e \u003cp\u003eThe Arduino 471\u003c\/p\u003e \u003cp\u003eAn Arduino Serial Slave 474\u003c\/p\u003e \u003cp\u003eA UART Echo Test Example 475\u003c\/p\u003e \u003cp\u003eUART Command Control of an Arduino 478\u003c\/p\u003e \u003cp\u003eAn Arduino I2C Slave 481\u003c\/p\u003e \u003cp\u003eAn I2C Test Circuit 481\u003c\/p\u003e \u003cp\u003eI2C Register Echo Example 482\u003c\/p\u003e \u003cp\u003eI2C Temperature Sensor Example 484\u003c\/p\u003e \u003cp\u003eI2C Temperature Sensor with a Warning LED 486\u003c\/p\u003e \u003cp\u003eArduino Slave Communication Using C\/C++ 488\u003c\/p\u003e \u003cp\u003eAn I2C Ultrasonic Sensor Application 490\u003c\/p\u003e \u003cp\u003eSummary 493\u003c\/p\u003e \u003cp\u003eFurther Reading 493\u003c\/p\u003e \u003cp\u003e\u003cb\u003ePart III Advanced Beagle Board Systems 495\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 11 The Internet of Things 497\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eThe Internet of Things 498\u003c\/p\u003e \u003cp\u003eA Beagle Board IoT Sensor 499\u003c\/p\u003e \u003cp\u003eThe Beagle Board as a Sensor Web Server 501\u003c\/p\u003e \u003cp\u003eInstalling and Configuring a Web Server 502\u003c\/p\u003e \u003cp\u003eConfiguring the Apache Web Server 503\u003c\/p\u003e \u003cp\u003eCreating Web Pages and Web Scripts 503\u003c\/p\u003e \u003cp\u003ePHP on the Beagle Board 506\u003c\/p\u003e \u003cp\u003eGNU Cgicc Applications (Advanced) 508\u003c\/p\u003e \u003cp\u003eReplacing Bone101 with Apache 511\u003c\/p\u003e \u003cp\u003eA C\/C++ Web Client 512\u003c\/p\u003e \u003cp\u003eNetwork Communications Primer 513\u003c\/p\u003e \u003cp\u003eA C\/C++ Web Client 514\u003c\/p\u003e \u003cp\u003eSecure Communication Using Open SSL 516\u003c\/p\u003e \u003cp\u003eA Beagle Board as a “Thing” 518\u003c\/p\u003e \u003cp\u003eThing Speak 518\u003c\/p\u003e \u003cp\u003eThe Linux Cron Scheduler 521\u003c\/p\u003e \u003cp\u003eSystem crontab 521\u003c\/p\u003e \u003cp\u003eUser crontab 523\u003c\/p\u003e \u003cp\u003eSending E-mail from the Beagle Board 524\u003c\/p\u003e \u003cp\u003eIf This Then That 526\u003c\/p\u003e \u003cp\u003eIoT Frameworks 528\u003c\/p\u003e \u003cp\u003eMQ Telemetry Transport 529\u003c\/p\u003e \u003cp\u003eMQTT Server\/Broker 531\u003c\/p\u003e \u003cp\u003eMQTT Publisher\/Subscriber on a Beagle Board 533\u003c\/p\u003e \u003cp\u003eThe mqtt-spy Debug Tool 534\u003c\/p\u003e \u003cp\u003eWriting MQTT Code 535\u003c\/p\u003e \u003cp\u003eA Paho MQTT Publisher Example 535\u003c\/p\u003e \u003cp\u003eA Paho MQTT Subscriber Example 537\u003c\/p\u003e \u003cp\u003eAdafuit IO 539\u003c\/p\u003e \u003cp\u003eConfiguring the Adafruit IO Account 540\u003c\/p\u003e \u003cp\u003eConnecting to Adafruit IO with MQTT 542\u003c\/p\u003e \u003cp\u003eAn MQTT Node.js Publish Example 543\u003c\/p\u003e \u003cp\u003eThe C++ Client\/Server 545\u003c\/p\u003e \u003cp\u003eIoT Device Management 548\u003c\/p\u003e \u003cp\u003eRemote Monitoring of a Beagle Board 548\u003c\/p\u003e \u003cp\u003eBeagle Board Watchdog Timers 549\u003c\/p\u003e \u003cp\u003eStatic IP Addresses 551\u003c\/p\u003e \u003cp\u003ePower over Ethernet 551\u003c\/p\u003e \u003cp\u003ePoE Power Extraction Modules (Advanced Topic) 553\u003c\/p\u003e \u003cp\u003eSummary 554\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 12 Wireless Communication and Control 555\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eIntroduction to Wireless Communications 556\u003c\/p\u003e \u003cp\u003eBluetooth Communications 557\u003c\/p\u003e \u003cp\u003eInstalling a Bluetooth Adapter 558\u003c\/p\u003e \u003cp\u003eChecking the LKM 559\u003c\/p\u003e \u003cp\u003eConfiguring a Bluetooth Adapter 560\u003c\/p\u003e \u003cp\u003eMaking the Beagle Board Discoverable 561\u003c\/p\u003e \u003cp\u003eAndroid App Development with Bluetooth 563\u003c\/p\u003e \u003cp\u003eWi-Fi Communications 564\u003c\/p\u003e \u003cp\u003eInstalling a Wi-Fi Adapter 564\u003c\/p\u003e \u003cp\u003eThe NodeMCU Wi-Fi Slave Processor 568\u003c\/p\u003e \u003cp\u003eFlashing with the Latest Firmware 569\u003c\/p\u003e \u003cp\u003eConnecting the NodeMCU to Wi-Fi 570\u003c\/p\u003e \u003cp\u003eProgramming the NodeMCU 571\u003c\/p\u003e \u003cp\u003eThe NodeMCU Web Server Interface 574\u003c\/p\u003e \u003cp\u003eJSON 575\u003c\/p\u003e \u003cp\u003eThe NodeMCU and MQTT 577\u003c\/p\u003e \u003cp\u003eZigBee Communications 579\u003c\/p\u003e \u003cp\u003eIntroduction to XBee Devices 579\u003c\/p\u003e \u003cp\u003eAT versus API Mode 581\u003c\/p\u003e \u003cp\u003eXBee Confi guration 582\u003c\/p\u003e \u003cp\u003eXCTU 582\u003c\/p\u003e \u003cp\u003eConfiguring an XBee Network Using XCTU 583\u003c\/p\u003e \u003cp\u003eAn XBee AT Mode Example 584\u003c\/p\u003e \u003cp\u003eSetting Up the Arduino XBee Device (XBeeA) 584\u003c\/p\u003e \u003cp\u003eSetting Up the PocketBeagle XBee Device (XBeePB) 586\u003c\/p\u003e \u003cp\u003eAn XBee API Mode Example 589\u003c\/p\u003e \u003cp\u003eSetting Up the PocketBeagle XBee Device (XBee1) 589\u003c\/p\u003e \u003cp\u003eSetting Up the Stand-Alone XBee Device (XBee2) 589\u003c\/p\u003e \u003cp\u003eXBee API Mode and Node.js 590\u003c\/p\u003e \u003cp\u003eXBee and C\/C++ 592\u003c\/p\u003e \u003cp\u003eNear Field Communication 593\u003c\/p\u003e \u003cp\u003eSummary 596\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 13 Beagle Board with a Rich User Interface 599\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eRich UI Beagle Board Architectures 600\u003c\/p\u003e \u003cp\u003eBeagle Boards as General-Purpose Computers 601\u003c\/p\u003e \u003cp\u003eConnecting a Bluetooth Input Peripheral 603\u003c\/p\u003e \u003cp\u003eBeagleBone with a LCD Touchscreen Cape 604\u003c\/p\u003e \u003cp\u003eVirtual Network Computing 605\u003c\/p\u003e \u003cp\u003eVNC Using VNC Viewer 605\u003c\/p\u003e \u003cp\u003eVNC with Xming and PuTTY 606\u003c\/p\u003e \u003cp\u003eVNC with a Linux Desktop Computer 607\u003c\/p\u003e \u003cp\u003eFat-Client Applications 608\u003c\/p\u003e \u003cp\u003eRich UI Application Development 608\u003c\/p\u003e \u003cp\u003eIntroduction to GTK+ on the Beagle Boards 609\u003c\/p\u003e \u003cp\u003eThe “Hello World” GTK+ Application 609\u003c\/p\u003e \u003cp\u003eThe Event-Driven Programming Model 610\u003c\/p\u003e \u003cp\u003eThe GTK+ Temperature Application 611\u003c\/p\u003e \u003cp\u003eIntroduction to Qt for the Beagle Board 612\u003c\/p\u003e \u003cp\u003eInstalling Qt Development Tools 613\u003c\/p\u003e \u003cp\u003eThe “Hello World” Qt Application 613\u003c\/p\u003e \u003cp\u003eQt Primer 615\u003c\/p\u003e \u003cp\u003eQt Concepts 615                                                                                                   \u003c\/p\u003e \u003cp\u003eThe QObject Class 617\u003c\/p\u003e \u003cp\u003eSignals and Slots 617\u003c\/p\u003e \u003cp\u003eQt Development Tools 618\u003c\/p\u003e \u003cp\u003eA First Qt Creator Example 620\u003c\/p\u003e \u003cp\u003eA Qt Temperature Sensor GUI Application 621\u003c\/p\u003e \u003cp\u003eRemote UI Application Development 625\u003c\/p\u003e \u003cp\u003eFat-Client Qt GUI Application 626\u003c\/p\u003e \u003cp\u003eMultithreaded Server Applications 629\u003c\/p\u003e \u003cp\u003eA Multithreaded Temperature Service 632\u003c\/p\u003e \u003cp\u003eParsing Stream Data 634\u003c\/p\u003e \u003cp\u003eThe Fat Client as a Server 635\u003c\/p\u003e \u003cp\u003eParsing Stream Data with XML 638\u003c\/p\u003e \u003cp\u003eThe Beagle Board Client Application 639\u003c\/p\u003e \u003cp\u003eSummary 641\u003c\/p\u003e \u003cp\u003eFurther Reading 641\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 14 Images, Video, and Audio 643\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eCapturing Images and Video 644\u003c\/p\u003e \u003cp\u003eUSB Webcams 644\u003c\/p\u003e \u003cp\u003eVideo4Linux2 (V4L2) 646\u003c\/p\u003e \u003cp\u003eImage Capture Utility 647\u003c\/p\u003e \u003cp\u003eVideo4Linux2 Utilities 648\u003c\/p\u003e \u003cp\u003eWriting Video4Linux2 Programs 650\u003c\/p\u003e \u003cp\u003eStreaming Video 652\u003c\/p\u003e \u003cp\u003eImage Processing and Computer Vision 654\u003c\/p\u003e \u003cp\u003eImage Processing with Open CV 654\u003c\/p\u003e \u003cp\u003eComputer Vision with Open CV 656\u003c\/p\u003e \u003cp\u003eBoost 659\u003c\/p\u003e \u003cp\u003eBeagleBone Audio 660\u003c\/p\u003e \u003cp\u003eCore Audio Software Tools 661\u003c\/p\u003e \u003cp\u003eAudio Devices for the Beagle Boards 661\u003c\/p\u003e \u003cp\u003eHDMI and USB Audio Playback Devices 661\u003c\/p\u003e \u003cp\u003eInternet Radio Playback 664\u003c\/p\u003e \u003cp\u003eRecording Audio 664\u003c\/p\u003e \u003cp\u003eAudio Network Streaming 666\u003c\/p\u003e \u003cp\u003eBluetooth A2DP Audio 666\u003c\/p\u003e \u003cp\u003eText-to-Speech 669\u003c\/p\u003e \u003cp\u003eSummary 670\u003c\/p\u003e \u003cp\u003eFurther Reading 670\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 15 Real-Time Interfacing with the PRU-ICSS 673\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eThe PRU-ICSS 674\u003c\/p\u003e \u003cp\u003eThe PRU-ICSS Architecture 674\u003c\/p\u003e \u003cp\u003eThe Remote Processor Framework 675\u003c\/p\u003e \u003cp\u003eImportant Documents 676\u003c\/p\u003e \u003cp\u003eDevelopment Tools for the PRU-ICSS 676\u003c\/p\u003e \u003cp\u003eThe PRU Code Generation Tools 677\u003c\/p\u003e \u003cp\u003eThe PRU Debugger 677\u003c\/p\u003e \u003cp\u003eUsing the AM335x PRU-ICSS 679\u003c\/p\u003e \u003cp\u003eSetting Up the Board for Remoteproc 679\u003c\/p\u003e \u003cp\u003eTesting Remoteproc under Linux 680\u003c\/p\u003e \u003cp\u003eA First PRU Example 683\u003c\/p\u003e \u003cp\u003ePRU-ICSS Enhanced GPIOs 683\u003c\/p\u003e \u003cp\u003eA First PRU Program 686\u003c\/p\u003e \u003cp\u003eA First PRU Program in C 686\u003c\/p\u003e \u003cp\u003eA First PRU Program in Assembly 688\u003c\/p\u003e \u003cp\u003eThe PRU-ICSS in Detail 691\u003c\/p\u003e \u003cp\u003eRegisters 691\u003c\/p\u003e \u003cp\u003eLocal and Global Memory 692\u003c\/p\u003e \u003cp\u003ePRU Assembly Instruction Set 696\u003c\/p\u003e \u003cp\u003ePRU-ICSS Applications 698\u003c\/p\u003e \u003cp\u003ePRU-ICSS Performance Tests 698\u003c\/p\u003e \u003cp\u003eUtilizing Regular Linux GPIOs 702\u003c\/p\u003e \u003cp\u003eA PRU PWM Generator 704\u003c\/p\u003e \u003cp\u003eA PRU Sine Wave Generator 708\u003c\/p\u003e \u003cp\u003eAn Ultrasonic Sensor Application 709\u003c\/p\u003e \u003cp\u003eSummary 714\u003c\/p\u003e \u003cp\u003eFurther Reading 714\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 16 Embedded Kernel Programming 717\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eIntroduction 718\u003c\/p\u003e \u003cp\u003eWhy Write Kernel Modules? 718\u003c\/p\u003e \u003cp\u003eLoadable Kernel Module Basics 719\u003c\/p\u003e \u003cp\u003eA First LKM Example 720\u003c\/p\u003e \u003cp\u003eThe LKM Make file 722\u003c\/p\u003e \u003cp\u003eBuilding the LKM on a Beagle Board 723\u003c\/p\u003e \u003cp\u003eTesting the First LKM Example 724\u003c\/p\u003e \u003cp\u003eTesting the LKM Parameter 726\u003c\/p\u003e \u003cp\u003eAn Embedded LKM Example 727\u003c\/p\u003e \u003cp\u003eInterrupt Service Routines 729\u003c\/p\u003e \u003cp\u003ePerformance 733\u003c\/p\u003e \u003cp\u003eEnhanced Button GPIO Driver LKM 733\u003c\/p\u003e \u003cp\u003eThe object Interface 734\u003c\/p\u003e \u003cp\u003eEnhanced LED GPIO Driver LKM 741\u003c\/p\u003e \u003cp\u003eKernel Threads 742\u003c\/p\u003e \u003cp\u003eConclusions 744\u003c\/p\u003e \u003cp\u003eSummary 744\u003c\/p\u003e \u003cp\u003eIndex 745\u003c\/p\u003e  \u003cp\u003e\u003cb\u003eDr. Derek Molloy\u003c\/b\u003e is an Associate Professor in the School of Electronic Engineering at Dublin City University, Ireland. Derek produces a popular YouTube series on the BeagleBone platform and a wide variety of embedded Linux topics. His videos and personal blog have introduced millions of people to the BeagleBone, embedded Linux, and digital electronics.   \u003c\/p\u003e\u003cp\u003e\"What I've learned on this topic has taken me a decade of self-study culling through books and release notes and various platforms. Here, you've demystified it all in the span of a single (large) volume.\" \u003cb\u003eBrian DeLacey,\u003c\/b\u003e founder of the IoT Festival \u003c\/p\u003e\u003cp\u003e\"This wonderful book is at the nexus of so many of the skills that are vital to today's computer scientists, electrical engineers, and innovators of all stripes as they turn their ideas into transformative creations.\" \u003cb\u003e Prof Ray Simar,\u003c\/b\u003e Professor in the Practice of Digital Signal Processing Architecture, Rice University, Texas \u003c\/p\u003e\u003cp\u003e\"Derek Molloy's, Exploring BeagleBone, is THE book to go to if you are interested in learning about embedded Linux programming and how to use it to exploit the powerful capabilities of the BeagleBone single board computer.\" \u003cb\u003e Prof. Burford Furman,\u003c\/b\u003e San José State University, California \u003c\/p\u003e\u003cp\u003e\u003cb\u003eGIVE LIFE TO YOUR CREATIONS WITH THE VERSATILE, LINUX-POWERED BEAGLE BOARDS\u003c\/b\u003e \u003c\/p\u003e\u003cp\u003eWhatever applications you can dream up, Beagle boards can help you build them. This hands-on guide teaches you the essential Beagle board skills and underlying engineering principles. It then takes you into interfacing, communication, and control so that you can create your own projects. Finally, you'll explore using Beagle boards for advanced applications such as building Internet-of-Things systems and real-time interfacing. With hands-on examples and outstanding guidance, this book will give you the in-depth knowledge to do great things with your Beagle board. \t\u003c\/p\u003e\u003cul\u003e \u003cli\u003eFeatures a detailed review of the Linux, electronics, and programming skills required to master the Beagle boards\u003c\/li\u003e \u003cli\u003eThoroughly examines interfacing a Beagle   board to almost any type of circuit or device\u003c\/li\u003e \u003cli\u003eDemonstrates advanced Beagle board   applications such as network communications;   rich user interfaces; images, video, and audio; and   real-time interfacing using the board's PRU-ICSS\u003c\/li\u003e \u003cli\u003eTeaches transferrable essential skills to help you design with electronics, modules, or peripherals that can be used even beyond the Beagle board\u003c\/li\u003e \u003cli\u003eUpdated to cover the latest Beagle boards, Linux  kernel versions, and Linux software releases.\u003c\/li\u003e \u003cli\u003eIncludes new content on Linux kernel development,  the Linux Remote Processor Framework, CAN  bus, IoT frameworks, and much more!\u003c\/li\u003e \u003c\/ul\u003e \u003cp\u003eVisit the companion website at \u003cb\u003ewww.exploringbeaglebone.com\u003c\/b\u003e for source code, instructional videos, online peer discussions, and more!\u003c\/p\u003e","brand":"Wiley","offers":[{"title":"Default Title","offer_id":47989187379429,"sku":"NP9781119533160","price":40.0,"currency_code":"USD","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1842\/7735\/files\/9781119533160.jpg?v=1761783137","url":"https:\/\/k12savings.com\/products\/exploring-beaglebone-isbn-9781119533160","provider":"K12savings","version":"1.0","type":"link"}