Course Description

Professor: Eduardo Garcia

Course Prerequisite:

  • ESE519 Real–Time and Embedded Systems (
  • Previous experience in embedded development (embedded courses – knowledge of Bare Metal C programming, how MCUs work, peripherals, interrupts, etc.)

    It is assumed students have the following knowledge:
  • Knowledge of the C programming language.
  • Electrical engineering knowledge

Course Description

Interested in the class? Please see what previous students thought of the class down below!

ESE516 is a completely hands-on course that aims to teach its students the tools needed to design and prototype an embedded device. The design of an Internet of Things (IoT) device is used as a medium to teach the students concepts on embedded programming, hardware architecture design, IoT and the cloud.

Students will pair up to design an IoT device from the ground up. Industry tools and best practices will be introduced to the student and applied in this accelerated electronics product cycle. At the end of the class each group of students will end up with a physical prototype of their embedded system design.

The class is divided in two big components – Embedded Programming and Embedded Hardware Design. The following sections explain what you will learn and what you will do for each of these components.

Embedded Programming

What you will learn

  • Best practices for writing C code on Embedded Systems
  • Techniques on writing device drivers
  • Use of Hardware Abstraction Layers to make your code
  • Practice using FreeRTOS, and tools to profile an RTOS (Percepio)
  • Best practices on code commenting – Doxygen (link)
  • Use of Lint for a cleaner code
  • Debugging embedded systems – In-system Debugging. How to use a logic analyzer
  • Use of MQTT to transmit/receive data to/from the cloud!

What you will do

  • Implement a Command Line Interface to issue commands to your device
  • Write drivers for sensors/devices that use I2C, SPI, UART
  • Write a simple bootloader that will allow you to update your device’s program via Wi-Fi (OTAFU)
  • Implement the prototype of your designed device using FreeRtos
  • Implement a Node:Red instance to receive/send data from your device from/to the internet

Embedded Hardware Design

What you will learn

  • Primer on Hardware Architecture design – ideas on how to design a hardware product and what components are usually needed on an IoT device
  • Hardware Design Workflow – how to go from prototype to board. How to prototype effectively
  • How do draw high quality schematics for electrical designs that are clear
  • Introduction to circuit layout. Techniques to route a board and make a PCB/PCBA
  • How to do quality documentation on a hardware design
  • How to use Altium to perform all the previous tasks

What you will do

  • Architect your product – Design components of your system – Power supplies, MCU pin assignment, MCU resource allocation, etc.
  • Draw the schematics for your design in Altium
  • Route your board following Design For Manufacturability guidelines, in Altium
  • Bill of Materials
  • Release your board for manufacturing. Make documentation on your design
  • Board bringup!

Projects from Previous Semesters

Each semester, students are asked to do a DevPost entry explaining their project. The final project of previous semester can be found on the following links.

Usually students design and manufacture their own board from scratch. Although the boards look similar (due to similar outlines), each board is unique to each group, as it was designed by each group for their own product as designed.

The class moved to online teaching on Spring 2020 and Spring 2021. With the help of the ESE staff and our great TAs we were still able to give a high quality class all remote. The students also got to fabricate their PCBAs and have them shipped wherever they were on the world!

Projects by year:

Spring 2019

Fall 2019

Spring 2020

Showcase of the PCBs made in Spring 2020. Students were encouraged to do their boards on the same 60 [mm] x 60 [mm] format if possible.

Spring 2021

Previous Years (Done under professor Nick McGill)

Spring 2018

Spring 2017