Software Toolkits: Practical Aspects of the Internet of Things—A Survey <s> 2 <s> Wireless sensor networks are composed of large numbers of tiny networked devices that communicate untethered. For large scale networks, it is important to be able to download code into the network dynamically. We present Contiki, a lightweight operating system with support for dynamic loading and replacement of individual programs and services. Contiki is built around an event-driven kernel but provides optional preemptive multithreading that can be applied to individual processes. We show that dynamic loading and unloading is feasible in a resource constrained environment, while keeping the base system lightweight and compact. <s> BIB001 </s> Software Toolkits: Practical Aspects of the Internet of Things—A Survey <s> 2 <s> Create your own Arduino-based designs, gain in-depth knowledge of the architecture of Arduino, and learn the user-friendly Arduino language all in the context of practical projects that you can build yourself at home. Get hands-on experience using a variety of projects and recipes for everything from home automation to test equipment. Arduino has taken off as an incredibly popular building block among ubicomp (ubiquitous computing) enthusiasts, robotics hobbyists, and DIY home automation developers. Authors Jonathan Oxer and Hugh Blemings provide detailed instructions for building a wide range of both practical and fun Arduino-related projects, covering areas such as hobbies, automotive, communications, home automation, and instrumentation. Take Arduino beyond "blink" to a wide variety of projects from simple to challenging Hands-on recipes for everything from home automation to interfacing with your car engine management system Explanations of techniques and references to handy resources for ubiquitous computing projects Supplementary material includes a circuit schematic reference, introductions to a range of electronic engineering principles and general hints & tips. These combine with the projects themselves to make Practical Arduino: Cool Projects for Open Source Hardware an invaluable reference for Arduino users of all levels. You'll learn a wide variety of techniques that can be applied to your own projects. What you'll learn Communication with serial devices including RFID readers, temperature sensors, and GPS modules Connecting Arduino to Ethernet and WiFi networks Adding synthesized speech to Arduino Linking Arduino to web services Decoding data streams from commercial wireless devices How to make DIY prototyping shields for only a couple of dollars Who is this book for? This book is for hobbyists and developers interested in physical computing using a low-cost, easy-to-learn platform. <s> BIB002 </s> Software Toolkits: Practical Aspects of the Internet of Things—A Survey <s> 2 <s> Abstract Multi-hop wireless networks, such as sensor-, ad hoc- and mesh-nets, can be differentiated in terms of participating devices and usage scenarios. However they share strong characteristics and requirements, such as node cooperation to enable multi-hop forwarding and dynamic routing protocols to deliver packets. As a result of these similarities, protocols designed for all these wireless networks revolve around a common core of functionality, for example coping with link and node dynamics. They differ only in additional network-specific functionality, such as tree routing structures in sensornets, and parameterization, for example buffer sizes. This convergence of functionality and design goals, as well as the sheer number of proposed protocols in each network class, motivates the idea of applying protocols to more than just their one original class. However, network-layer protocols are usually developed for and tested in only one class of wireless network due to the lack of a platform that allows testing of protocols across different classes of networks. As a result, we unnecessarily constrain the range of settings and scenarios in which we test network protocols. In this article, we propose a platform for protocol testing and evaluation in multiple, heterogeneous networks and discuss the requirements and challenges of such a solution. As a first step and case study, we present the detailed architecture of TinyWifi, a platform for executing native sensornet protocols on Linux-driven wireless devices as found in wireless mesh and mobile ad-hoc networks (MANETs). TinyWifi builds on nesC code base that abstracts from TinyOS and enables the execution of nesC-based protocols in Linux. Using this abstraction, we expand the applicability and means of protocol execution from one class of wireless network to another without re-implementation. We demonstrate the generality of TinyWifi by evaluating four well-established protocols on IEEE 802.11 and 802.15.4 based testbeds using a single implementation. Based on the experience of building TinyWifi and the presented evaluation, we deduce the feasibility of a cross-network evaluation platform and sketch the requirements for inclusion of further network classes. <s> BIB003
International Journal of Distributed Sensor Networks of sensor networks (SNs). TinyOS is component based and event-driven, providing a series of reusable components. Programs are built from software components that are connected to one another using interfaces. TinyOS is completely nonblocking and has one stack to accomplish split-phase operations for maintaining high concurrency. TinyOS is widely used in WSNs and can be ported to various kinds of sensor nodes. TinyOS employs nesC as its programming language. nesC, an event-driven programming language based on components, is designed for building applications that run on TinyOS. nesC is built as an extension to C. Extensions include the separation of construction and composition, specification of component behavior in terms of a set of interfaces, bidirectional interfaces, components statically linked to one another via their interfaces, and code generated by wholeprogram compilers. Alizai et al. BIB003 proposed the TinyWifi platform, built on nesC code, as a base for protocol testing and evaluation in multiple heterogeneous networks and discussed the requirements and challenges in such a solution. Contiki BIB001 is a lightweight, open source node OS for networked, memory-constrained systems with a particular focus on low-power wireless IoT devices. Contiki was created by Adam Dunkels in 2002 and was further developed by a worldwide team of developers from Atmel, Cisco, Enea, ETH Zurich, and Oxford University. Contiki provides multitasking and a built-in TCP/IP stack, including IPv6 networking, as well as 6LoWPAN, RPL, and CoAP, but it only requires approximately 10 kilobytes of RAM and 30 kilobytes of ROM. ContikiMAC enables nodes to run in a low-power mode and still be able to receive and relay radio messages. Even wireless routers can be battery operated. Created specifically for the IoT, the 6LoWPAN of Contiki makes it possible to connect resource-constrained devices to the internet because there are plenty of available IP addresses. Nut/OS  is a small open source real-time OS licensed under the BSD license. It is the OS for boards under the project Ethernut, an open source hardware and software embedded-Ethernet-system. All reference designs of the hardware share the same set of interfaces such as Ethernet connectors, RS-232 ports, and power connectors, and nearly all I/O pins of the microcontroller are available on an expansion port. The primary differences are the use of a microcontroller and available memory size. The Nut/OS supports cooperative multithreading and is most applicable to situations in which there are several concurrent tasks that must be simultaneously executed. Ethernut implements its own network stack called Nut/Net, which implements a number of protocols and socket APIs for use in Nut/OS. Nut/OS is in fact an embedded-Ethernet-system that controls and monitors embedded devices without a PC. Therefore, this OS may be used as part of an intelligent home system or many other such applications of the IoT. IBM Zurich Research Laboratory developed Mote Runner, a high-performance, resource-efficient middleware platform with hardware-agnostic and language-independent features. It provides a viable solution to some of the cost-related and technological problems of large-scale applications in the IoT. As shown in Figure 1 , using Mote Runner, applications that are dynamically distributed, loaded, updated, and deleted can be easily created and managed with a high-level objectoriented programming language by using an event-driven programming model. In this manner, a large amount of postdeployment and maintenance costs are reduced. In addition, with state-of-the-art back-end infrastructures, Mote Runner makes it possible for IoT applications to be seamlessly integrated. The Raspberry Pi [8] is an open source hardware system with strong manipulability. There are several OSs that can be ported to Raspberry Pi, including GNU/Linux flavors (e.g., Debian, Fedora, Arch Linux ARM, and Android), RISC OS, FreeBSD, and Plan 9. The Raspbian, which is a Debian-based OS optimized for the Raspberry Pi, is the OS recommended by the Raspberry Pi Foundation. Although the Raspberry Pi is a credit-card-sized single-board computer, the computing and memory resources are more remarkable than the typical sensor nodes or boards. Arduino BIB002 is another open source hardware system similar to the Raspberry Pi. Just as with the Raspberry Pi, we can also port various OSs to the Arduino, including the Free Real Time Operating System (FreeRTOS), Duin OS, Pyxis OS, ArduinoMacOS, TaOS, Contiki, and FemtoOS. Arduino's microcontroller is based on the 8-bit Atmel AVR or 32-bit Atmel ARM, while the software consists of a standard programming language compiler and a boot loader that executes on the microcontroller. OS programs are written either in C or in C++. Android  is a Linux-based OS designed primarily for touchscreen mobile devices; however, Android can be ported to many other devices such as the Raspberry Pi. Android uses Java for creating interfaces and functions. Although Android has a Linux kernel, it does not have a native X Window System by default or the full set of standard GNU libraries, which makes it difficult to port existing Linux applications or libraries to Android. It runs on embedded devices that generally have sufficient computing and storage resources beyond that of the Raspberry Pi. Therefore, Android provides a much higher level and richer set of services in the IoT, but the consumption is inevitably much more than that of traditional sensor nodes. Table 1 summarizes and compares the above OSs. International Journal of Distributed Sensor Networks 3 