This series of labs exposes students to introductory embedded systems concepts. The labs focus on cyber physical systems modeling and design. They use the Lingua Franca coordination language to provide timing, concurrency, and state-machine modeling (via its modal models), and low-level programming is in C. The labs are designed to be companion exercises for a course based on Lee and Seshia, Introduction to Embedded Systems: A Cyber-Physical Systems Approach, MIT Press, 2017. The C code runs on a Raspberry Pi RP2040 on the Pololu 3pi+ 2040 robot. The same RP2040 microprocessor is also available on the low-cost Raspberry Pi Pico board, but this board does not have the sensors and actuators of the Pololu robot, so you will need the robot to be able to complete all the exercises.


You can find the Markdown sources of these labs on GitHub. If you discover any problems, please consider creating an issue or submitting a pull request.


The main authors of this version of the labs are:

  • Abhi Gundrala
  • Edward A. Lee
  • Marten Lohstroh

These labs are derived from several generations of lab exercises for the Berkeley EECS 149/249A course, Introduction to embedded systems. Contributors to the lab design include:

  • Joshua Adkins
  • Prabal Dutta
  • Branden Ghena
  • Shromona Ghosh
  • Abhi Gudrala
  • Jeff C. Jensen
  • Eric S. Kim
  • Edward A. Lee
  • Shaokai Lin
  • Sanjit Seshia
  • Trung Tran
  • Matthew Weber