Since 2017, I have been teaching the fundamentals of IoT software for resource-constrained devices in a number of different settings, from summer schools to full-fledged graduate courses. As colleagues more and more often asked to share the material I created over the years, I eventually decided to make the courseware I develop on this topic publicly available under a Creative Commons BY-NC 4.0 license.

The material teaches the fundamentals of developing networked embedded IoT applications using a distinctly hands-on approach: concepts are briefly introduced abstractly and immediately put in practice. Short exercises placed at strategic points in the flow allow students to experiments as soon as possible with what they learn. The sequence of topics is also thought to allow one to slice the course based on time available and scheduling constraints.

Programming is based on Contiki-NG and Mbed, using simulations or real hardware. Should you want to adopt the entire material in your course, your students need to be equipped with:

The material I’m making available includes the complete slide decks in modifiable form, custom forks of the official repositories adapted to this course, a preconfigured virtual machine for running Contiki-NG, and (soon) an accompanying booklet. The hands-on part of Mbed uses the free online compiler.


Lecture Material (last update March 19th, 2021)

  1. Introduction to IoT Software
  2. IoT Software Architectures
  3. Concurrency and Contiki-NG Protothreads
  4. The COOJA Simulator
  5. Contiki-NG Timers
  6. IoT Networking
  7. RPL in Contiki-NG
  8. TI CC2650/CC1350 with Contiki-NG
  9. Contiki-NG Shell
  10. Maintaining Distributed State
  11. MQTT in Contiki-NG
  12. Energy Management in Contiki-NG
  13. Memory Handling in Contiki-NG
  14. Introduction to Mbed
  15. Mbed Timers and Threads
  16. Mbed Sensors and Buttons
  17. Advanced Concurrency in Mbed
  18. Bluetooth and BLE
  19. BLE in Mbed
  20. Storage in Mbed
  21. Going into Production
  22. Booklet (coming soon!)

Hands-on Material

I am also providing here the raw recordings of my lectures in the “Middleware Technologies” course at Politecnico di Milano in 2020, to give a taste of how I concretely use the material during lectures and about the interleaving between explanations and hands-on activities. The course was offered online because of the ongoing COVID19 pandemic and used only part of the material available here. Access to the recordings requires a (free) WebEx account.


I used this material at KTH, Uppsala University, TUD, University of Trento, and Politecnico di Milano in various courses, as well as in several summer schools. As far as I know, this material also was or is in use at these other institutions, in its entirety or partly. If you adopt it in your courses too, I’d appreciate it if you drop me an email and let me know how it goes!

  • Universita della Svizzera Italiana (Switzerland), Dr. Alberto Ferrante
  • University of Murcia (Spain), Prof. Alexandra Jimborean
  • University of Cambridge (UK), Prof. Cecilia Mascolo
  • University College London (UK), Prof. Licia Capra
  • Shanghai Jiao Tong University (China), Prof. Yuan Hu
  • Chinese Academy of Science (China), Prof. Li Cui
  • University of Hong Kong (Hong Kong), Prof. Edith Ngai
  • Shanghai Technology Centre (China), Dr. Xin Lee
  • University of Virginia (US), Prof. Kamin Whitehouse
  • Politecnico di Milano (Italy), Prof. Tiziana Poli
  • Politecnico di Milano (Italy), Prof. Gianpaolo Cugola
  • University of Southern California (US), Prof. Viktor Prasanna
  • [to be completed, more to come…]

While I intend to continuously update the material, I cannot provide absolute guarantees on consistency or correctness and I am providing it “as-is”.

Fundamentals of IoT Software by Luca Mottola is licensed under CC BY-NC 4.0.