96859 - Embedded Systems and Internet of Things

Academic Year 2021/2022

Learning outcomes

The course introduces the concepts, methods and techniques concerning design and programming of embedded software, i.e. software for embedded systems, focusing in particular on an Internet of Things (IoT) perspective. More in detail, upon completing this course a student will have: - a general background about embedded systems, including Cyber-Physical Systems and Internet-of-Things (IoT); - basic knowledge about the hardware of embedded systems, from microcontrollers to SoC (System-on-a Chip), sensors, actuators, wired/wireless communication technologies and protocols; - basic knowledge about real-time operating systems, their organisation and scheduling techniques - solid knowledge about embedded software design and programming techniques, to deal with aspects related to real-time, reactivity, concurrency, and about main models adopted for that purpose (finite state machines - time triggered and event triggered, tasks and their scheduling); - knowledge about design and programming embedded software systems for mobile and wearable computing; - basic knowledge about main aspects and issues concerning Internet of Things and the organisation and architecture of IoT systems; - the capability of developing embedded system & IoT projects, involving the design and programming of embedded software for microcontrollers or SoC based architectures, and their integration/communication with applications running on mobile devices and with services/backends on the server side.

Course contents

- Introduction to Embedded Systems and Internet of Things (IoT)
-- basics about HW (microcontrollers, SoC, sensors, actuators and electronics)

- Programming Models and Techniques for Embedded Systems
-- super-loop
-- Finite State Machines (time-driven and event-driven)
-- Task
-- event-driven architectures

- Networks of Embedded Systems and IoT
-- models, architectures, communication protocols, wireless technologies for embedded systems
-- message passing models
-- Integration with mobile systems and mobile app programming
-- Basics about IoT architectures and platforms

- Advanced Themes (intro)
-- from mobile computing to wearable computing

In LAB:

- Arduino UNO as microcontroller platform
-- introduction to C++ and Wiring framework
- ESP as SoC/IoT oriented platform
- Android as mobile platform

Readings/Bibliography

An Embedded Software Primer (David E. Simon) - Addison Wesley
- Programming Embedded Systems: An Introduction to Time-Oriented Programming (Vahid, Givargis, Miller)
- Patterns of Time Triggered Embedded Systems (M. Pont) - Addison Wesley
- Exploring Arduino: Tools and Techniques for Engineering Wizardry. J. Blum. Wiley
- Design Patterns for Embedded Systems in C (B.P. Douglas) - Elsevier
- The Internet of Things (S. Greengard) - MIT Press
- Learning Internet of Things (P. Waher) - Packt
- Building Internet of Things with The Arduino (C. Doukas)
- Designing the Internet of Things (McEwen & Cassimally) - Wiley

Teaching methods

Learning is based on hand-in-hand theory (lectures) and practice (lab), promoting group work.

Assessment methods

Assessment is based on the development of 3 small projects (assignments) during the course, possibly working in groups, or - as an alternative - the development of a single project proposed by the students. The assignments/project are discussed during a colloquium, along with the various topics of the course.

Teaching tools

Slides are used to support lectures. In the Lab, a kit including Arduino, basic electronics and ESP is available to students for their work (exercises, assignments, projects).


Office hours

See the website of Alessandro Ricci