Building Wireless Sensor Networks Using Arduino
4/5
()
About this ebook
Related to Building Wireless Sensor Networks Using Arduino
Related ebooks
Arduino Networking Rating: 4 out of 5 stars4/5Arduino Home Automation Projects Rating: 3 out of 5 stars3/5Internet of Things with Arduino Blueprints Rating: 0 out of 5 stars0 ratingsArduino Android Blueprints Rating: 0 out of 5 stars0 ratingsArduino by Example Rating: 4 out of 5 stars4/5Learning C for Arduino Rating: 0 out of 5 stars0 ratingsArduino Electronics Blueprints Rating: 4 out of 5 stars4/5Arduino Essentials Rating: 5 out of 5 stars5/5Raspberry Pi Home Automation with Arduino - Second Edition Rating: 0 out of 5 stars0 ratingsGetting Started with Electronic Projects Rating: 5 out of 5 stars5/5Programming Arduino with LabVIEW Rating: 3 out of 5 stars3/5Smart Internet of Things Projects Rating: 4 out of 5 stars4/5Android Things Projects Rating: 0 out of 5 stars0 ratingsRaspberry Pi LED Blueprints Rating: 0 out of 5 stars0 ratingsInternet of Things & Wireless Sensor Network Rating: 0 out of 5 stars0 ratingsRaspberry Pi Robotics Essentials Rating: 0 out of 5 stars0 ratingsEmbedded Linux Development with Yocto Project Rating: 0 out of 5 stars0 ratingsRaspberry Pi IoT Projects: Prototyping Experiments for Makers Rating: 0 out of 5 stars0 ratingsInternet of Things with Intel Galileo Rating: 0 out of 5 stars0 ratingsLearning Raspberry Pi Rating: 0 out of 5 stars0 ratingsLearn IoT Programming Using Node-RED: Begin to Code Full Stack IoT Apps and Edge Devices with Raspberry Pi, NodeJS, and Grafana Rating: 0 out of 5 stars0 ratingsProgramming the BeagleBone Rating: 0 out of 5 stars0 ratingsMastering BeagleBone Robotics Rating: 5 out of 5 stars5/5Near Field Communication with Android Cookbook Rating: 0 out of 5 stars0 ratingsDeveloping IoT Projects with ESP32: Unlock the full Potential of ESP32 in IoT development to create production-grade smart devices Rating: 0 out of 5 stars0 ratingsBeagleBone Home Automation Blueprints Rating: 0 out of 5 stars0 ratingsInternet of Things with Arduino Cookbook Rating: 1 out of 5 stars1/5Arduino for Secret Agents Rating: 4 out of 5 stars4/5Arduino Sketches: Tools and Techniques for Programming Wizardry Rating: 4 out of 5 stars4/5Internet of Things with ESP8266 Rating: 5 out of 5 stars5/5
Hardware For You
iPhone For Dummies Rating: 0 out of 5 stars0 ratingsCompTIA A+ Complete Review Guide: Core 1 Exam 220-1101 and Core 2 Exam 220-1102 Rating: 5 out of 5 stars5/5Chip War: The Fight for the World's Most Critical Technology Rating: 4 out of 5 stars4/5Electrical Engineering | Step by Step Rating: 0 out of 5 stars0 ratingsMacBook For Dummies Rating: 4 out of 5 stars4/5Chromebook For Dummies Rating: 5 out of 5 stars5/5Tor Darknet Bundle: Master the Art of Invisibility Rating: 0 out of 5 stars0 ratingsmacOS Sonoma For Dummies Rating: 0 out of 5 stars0 ratingsCompTIA A+ Complete Review Guide: Exam Core 1 220-1001 and Exam Core 2 220-1002 Rating: 5 out of 5 stars5/5Exploring Apple iPad: iPadOS 15 Edition: The Illustrated, Practical Guide to Using your iPad Rating: 0 out of 5 stars0 ratingsUnlock Any Roku Device: Watch Shows, TV, & Download Apps Rating: 0 out of 5 stars0 ratingsAfter Steve: How Apple Became a Trillion-Dollar Company and Lost Its Soul Rating: 4 out of 5 stars4/5Building Confidence Using Your iPhone: Book I — THE ULTIMATE GUIDE Rating: 0 out of 5 stars0 ratingsAmazon Web Services (AWS) Interview Questions and Answers Rating: 5 out of 5 stars5/5Exploring Arduino: Tools and Techniques for Engineering Wizardry Rating: 4 out of 5 stars4/5Switching to a Mac For Dummies Rating: 0 out of 5 stars0 ratingsLinux All-In-One For Dummies Rating: 2 out of 5 stars2/5Raspberry Pi Electronics Projects for the Evil Genius Rating: 3 out of 5 stars3/5iPhone For Seniors For Dummies: Updated for iPhone 12 models and iOS 14 Rating: 4 out of 5 stars4/5Build Your Own PC Do-It-Yourself For Dummies Rating: 4 out of 5 stars4/5Raspberry Pi Cookbook for Python Programmers Rating: 0 out of 5 stars0 ratingsiMac For Dummies Rating: 0 out of 5 stars0 ratingsProgramming Arduino: Getting Started with Sketches Rating: 4 out of 5 stars4/5Windows 11 For Seniors For Dummies Rating: 0 out of 5 stars0 ratingsHelp! iOS 17 - iPhone: How to Use iOS17 Rating: 0 out of 5 stars0 ratingsRaspberry Pi Mechatronics Projects HOTSHOT Rating: 5 out of 5 stars5/5iPhone X Hacks, Tips and Tricks: Discover 101 Awesome Tips and Tricks for iPhone XS, XS Max and iPhone X Rating: 3 out of 5 stars3/5
Reviews for Building Wireless Sensor Networks Using Arduino
1 rating0 reviews
Book preview
Building Wireless Sensor Networks Using Arduino - Kooijman Matthijs
Table of Contents
Building Wireless Sensor Networks Using Arduino
Credits
About the Author
About the Reviewers
www.PacktPub.com
Support files, eBooks, discount offers, and more
Why subscribe?
Free access for Packt account holders
Preface
What this book covers
What you need for this book
Who this book is for
Conventions
Reader feedback
Customer support
Downloading the example code
Errata
Piracy
eBooks, discount offers, and more
Questions
1. A World without Wires
XBee radio hardware
XBee product families
Versions and variants
Official XBee documentation
Your first transmission
Using the SparkFun XBee Explorer USB
Getting and running XCTU
Updating the firmware
Failed firmware updates
Configuration
Talking to the XBee module
Receiving data
Uploading the sketch
Connecting the XBee
Receiving data
Switching to API mode
First module in API mode
Sending data
Second module in API mode
Starting and joining a network
Module addressing
Network scanning and remote configuration
The Commissioning button and LEDs
Making your network secure
Distributing the network key
Trust center link key
Trust center terminology differences
Selecting encryption keys
Setting up your secure network
Disabling network joining
Other XBee families
Configuration values
Summary
2. Collecting Sensor Data
Hardware setup
Serial on XBee
Handshaking signals
Voltage levels
Serial on a computer
Serial on Arduino
XBee shields
Other shields
Software setup
Example sketches
Variable types
PROGMEM and F() strings
Pointers
Serial port setup
The xbee-arduino library
Creating the sketch
Sending and receiving data
Sending data
The ZBTxRequest objects
Creating the sketch
Blocking and polling
Running the sketch
Callbacks
Callback types
Callback limitations
Receiving data
The ZBRxResponse objects
Creating the sketch
Collecting sensor data
Reading a DHT22 sensor
Handling packets using binary.h
Building and sending a packet
Constructing a packet using binary.h
Creating the sketch
Receiving and parsing a packet
Parsing a packet using binary.h
Creating the sketch
Troubleshooting
Communication with the XBee module is not working
Modules are not joining the network
Modules cannot talk to each other
Summary
3. Storing and Visualizing Your Data
Storing your data in the cloud
Introducing Beebotte
Channels and resources
Security
Access protocols
Sending your data to Beebotte
Preparing Beebotte
Connecting your Arduino to the Internet
Writing the sketch
Visualizing your data
Accessing your data
Keeping your data locally
Sending data over the serial port
Receiving data over the serial port
Summary
4. Controlling the World
Controlling your heating and/or cooling system
Replacing the thermostat
Controlling mains power
Hairdryer – an alternative
Control systems
Adding setpoint control
Subscribing to events
Reading events
Remembering sensor readings
Thermostat controller
Controlling a relay
Controlling off-the-shelf ZigBee devices
ZigBee profiles, endpoints, and clusters
ZigBee public profiles
Selecting a ZigBee device
Talking to a ZigBee on/off device
Joining the network
Factory reset in case of problems
Discovering services
The ZBExplicitTxRequest objects
Sending a message
The ZBExplicitRxResponse objects
Receiving messages
Receiving on/off command responses
More ZigBee features
Summary
5. Standalone XBee Operation
Creating a window sensor
Connecting things
Powering the module
Connecting the window sensor
I/O pin naming
Configuring the XBee module
Remotely sampling the pins
Querying the pin state
Automatically sending the sample data
The configuration values
Receiving the samples on the coordinator
The ZBRxIoSampleResponse objects
Receiving the I/O samples
Creating a standalone relay
Connecting things
Configuring the XBee module
Remotely toggling an output pin
Summary
6. Battery Power and Sleeping
Battery power
Lithium-ion and lithium polymer batteries
Regulators
Saving power
Power saving techniques
Knowing what to optimize and when to stop
XBee power-saving
The XBee sleep modes
Configuring the network
The sleeping window sensor
Battery power
Power usage
Arduino power-saving
The XBee configuration
Hardware
Powering the Arduino
Hardware connections
Putting the Arduino to sleep
Sleep modes
Waking up
Creating the sketch
Power usage
Summary
Index
Building Wireless Sensor Networks Using Arduino
Building Wireless Sensor Networks Using Arduino
Copyright © 2015 Packt Publishing
All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews.
Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the author, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book.
Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information.
First published: October 2015
Production reference: 1121015
Published by Packt Publishing Ltd.
Livery Place
35 Livery Street
Birmingham B3 2PB, UK.
ISBN 978-1-78439-558-2
www.packtpub.com
Credits
Author
Matthijs Kooijman
Reviewers
Anvirup Basu
Roberto Gallea
Vincent Gijsen
Randy Schur
Fangzhou Xia
Commissioning Editor
Nadeem Bagban
Acquisition Editor
Sonali Vernekar
Content Development Editor
Shali Deeraj
Technical Editor
Danish Shaikh
Copy Editor
Tasneem Fatehi
Project Coordinator
Kinjal Bari
Proofreader
Safis Editing
Indexer
Mariammal Chettiyar
Graphics
Abhinash Sahu
Production Coordinator
Conidon Miranda
Cover Work
Conidon Miranda
Layout Coordinator
Conidon Miranda
About the Author
Matthijs Kooijman is an independent embedded software developer who is firmly connected with the maker movement through a local fab lab and his work on the Arduino project. Since his youth, Matthijs has been interested in making things; for example, he built his first television remote control before the age of 10 (using a piece of rope to pull on the volume slider, not a solution that he would choose today).
Matthijs has a firm belief in the merits of open source software and enjoys contributing to the software that he uses—both by coding and helping out other users. His work experience is broad—ranging from Web development to Linux driver hacking, from tech support to various forms of wireless networking, but almost always related to open source software in some way.
About the Reviewers
Anvirup Basu is currently a student pursuing his B.Tech in electronics and communication engineering from the Siliguri Institute of Technology. Besides academics, he is actively involved in robotics, IoT, and mobile application development. Since the first year, he has been involved with Microsoft as a Microsoft Student Partner and organized three seminars and workshops on the various Microsoft technologies, mainly for Windows phones and the Windows app development.
Being enthusiastic about robotics and Microsoft technologies, he has developed several robots, both autonomous and manual, and a couple of manual robot controllers, some of which are the Universal Robot Controller for Windows PCs and Mark 1 pilot for Windows phones. He is also into computer vision and has worked on the detection of wild animals. Automated Elephant Tracker is one of his projects, in the journal named International journal of Electronics and Communication Engineering &Technology, under International Association for Engineering and Management Education, which includes his works on robotics and computer vision.
His website, http://www.avirupbasu.com, holds some of his work and one may get in contact with him there. Being a part-time blogger, he blogs about topics he is interested in. Currently, he is working on autonomous robot control using SONAR and GPS. He dreams about doing research and development in his areas of interest.
Roberto Gallea, PhD, has been a computer science researcher since 2007 at the University of Palermo, Italy. He is committed to researching fields such as medical imaging, multimedia, and computer vision. In 2012, he started enhancing his academic and personal projects with the use of analog and digital electronics and with a particular involvement in the open source hardware and software platforms, such as the Arduino. Besides his academic interests, he conducts personal projects, which are aimed at producing handcrafted items such as musical instruments, furniture, and LED devices using embedded invisible electronics. He also collaborates with contemporary dance companies on digital scenes and costume designing.
Vincent Gijsen is an all-round type of a guy. With a bachelor's degree in embedded systems, a masters in information science, work experience in a Big Data start-up, and being currently active as a security officer and cyber security consultant in industrial and infrastructure environments, he has a broad range of interests. In his spare time, he likes to fiddle with lasers, microcontrollers, and other related electronics.
I would like to thank Packt Publishing for their pleasant cooperation and their ability always present interesting reads to review like: Storm Blueprints: Patterns for Distributed Real-Time Computation, and Arduino Development Cookbook as well as my girlfriend: Lisa-Anne, for her support.
Randy Schur is a graduate student in mechanical engineering at the George Washington University. He has experience working with the Arduino, robotics, and rapid prototyping, and has worked on the book Arduino Computer Vision Programming by Packt Publishing Pvt. Ltd.
Fangzhou Xia is currently pursuing a master's degree in mechanical engineering (ME) at the Massachusetts Institute of Technology (MIT). He received his bachelor's degree in ME from the University of Michigan (UM) and a bachelor's degree in electrical and computer engineering at Shanghai Jiao Tong University (SJTU). His areas of interest in mechanical engineering include system control, robotics, product design, and manufacturing automation. His areas of interest in electrical engineering include Web application development, embedded system implementation, and data acquisition system setup.
www.PacktPub.com
Support files, eBooks, discount offers, and more
For support files and downloads related to your book, please visit www.PacktPub.com.
Did you know that Packt offers eBook versions of every book published, with PDF and ePub files available? You can upgrade to the eBook version at www.PacktPub.com and as a print book customer, you are entitled to a discount on the eBook copy. Get in touch with us at
At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a range of free newsletters and receive exclusive discounts and offers on Packt books and eBooks.
https://www2.packtpub.com/books/subscription/packtlib
Do you need instant solutions to your IT questions? PacktLib is Packt's online digital book library. Here, you can search, access, and read Packt's entire library of books.
Why subscribe?
Fully searchable across every book published by Packt
Copy and paste, print, and bookmark content
On demand and accessible via a web browser
Free access for Packt account holders
If you have an account with Packt at www.PacktPub.com, you can use this to access PacktLib today and view 9 entirely free books. Simply use your login credentials for immediate access.
Preface
The Arduino platform makes it easy to get started with programming and electronics, but introducing wireless communication in your project can get complicated quickly. The XBee wireless platform hides most of the complicated details from you, and this book provides a step-by-step guide to using XBee modules with Arduino.
This book describes an example wireless sensor network, and invites you to build that network yourself. By following the steps in each chapter, you will build a network that can measure temperature and humidity in various rooms of your house, collect that data online, and automatically control your heating and/or cooling system to maintain the proper temperature in your house. This temperature can be configured through an online dashboard, ultimately putting control back in your hands.
All the concepts needed to build this example network will be explained, so you will have the knowledge to build your own project using these same concepts. Concepts that are closely related, but beyond the scope of this book, will be mentioned and appropriate references will be given so you can find out more if needed.
What this book covers
Chapter 1, A World without Wires, introduces the XBee platform and shows how to use the XCTU program to control and configure XBee modules. It covers the AT and API modes, firmware updates, and ZigBee network creation and security. It also shows how to transmit your first messages between two XBee modules.
Chapter 2, Collecting Sensor Data, provides more details on wiring up XBee modules, and introduces the xbee-arduino library that lets an Arduino take control of an XBee module. Reading a sensor, designing a packet format, and wirelessly transmitting data are discussed; thus, by the end of this chapter you will have a basic wireless sensor network where one or more Arduinos read temperature and humidity data and this is wirelessly collected by another Arduino.
Chapter 3, Storing and Visualizing Your Data, covers storing and visualizing your collected data with the Beebotte cloud service, using an Internet-connected Arduino and the MQTT protocol. Storing and visualizing your data on your own computer, using a Python program and database, are also briefly discussed.
Chapter 4, Controlling the World, shows how to let your network control things in addition to monitoring them, such as heating and/or cooling your house. Simple on/off control is covered in detail, either using a relay module connected to an Arduino, or using an off-the-shelf wireless power socket that supports the ZigBee Home Automation protocol.
Chapter 5, Standalone XBee Operation, lets you implement simple devices without using an Arduino, by letting the XBee module directly control or measure things. You will see how to simplify the relay module from Chapter 4, Controlling the World and add window open/closed detection to your network.
Chapter 6, Battery Power and Sleeping, discusses options for battery-powering your projects, as well as techniques to reduce the power used. This includes some hardware techniques, as well as applying various sleep modes to drastically reduce XBee and Arduino power usage when they are idle.
What you need for this book
To upload programs (sketches) to your Arduino boards, you will need the Arduino IDE, which can be downloaded from http://www.arduino.cc Version 1.6.5 was used in this book, but it is recommended to get the newest version. This book assumes you are already familiar with this program and know how to write and upload a sketch, which will not be covered in this book.
For configuring and interacting with XBee modules, you will need the XCTU program, which can be downloaded from http://www.digi.com/xctu. Version 6.2.0 was used in this book, but it is recommended to get the newest version. No prior experience with this program is needed; it will be introduced in detail.
The example sketches in this book use a number of Arduino libraries. These libraries are:
AltSoftSerial by Paul Stoffregen (version 1.3.0)
XBee-Arduino library by Andrew Rapp (version 0.6.0)
DHT sensor library by Adafruit (version 1.2.0)
Adafruit MQTT library by Adafruit (version 0.11.1)
Adafruit SleepyDog library by Adafruit (1.0.0)
Adafruit CC3000 library by Adafruit (version 1.0.3 optional)
In general, it is recommended you download the newest version of a library using the library manager in the Arduino IDE. However, if you run into problems because a library has made changes that are not backwards-compatible, it might be useful to test the exact same version of a library that was used when writing this book. These versions are shown above, but also included in the provided code bundle.
The introduction of each chapter indicates what hardware you will need for the examples in that chapter. This always lists the hardware required to build an example once, sometimes also sharing items between examples. If you want to expand your network to include multiple temperature sensors, window sensors, and so on, you will of course need multiples of some of the components listed.
Who this book is for
This book is for those who have been playing with the Arduino platform and now want to make their creations wireless. There is no need to be a veteran programmer, though a basic understanding of the Arduino and Arduino programming is assumed. All examples make use of ready-made hardware, so no soldering skills are required and, electronically, things are limited to just connecting a few pins and wires. This book will also prove useful for anyone wanting to integrate XBee with microcontroller platforms other than the Arduino, since most of the advice regarding XBee is not specific to the Arduino.
Conventions
In this book, you will find a number of text styles that distinguish between different kinds of information. Here are some examples of these styles and an explanation of their meaning.
Code words in text, folder names, filenames, file extensions, pathnames, dummy URLs, user input, and configuration values are shown as follows: Sending a packet is handled by the sendPacket() function.
A block of code is set as follows:
// the loop function runs over and over again forever
void loop() {
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
Any command-line input or output is written as follows:
openssl rand -hex