Building Wireless Sensor Networks Using Arduino
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
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
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
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.
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 Mic...