ESE5160: IoT Edge Computing

Course Description

ESE5160 is a completely hands-on course that teaches 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.

The class is divided into two big components – Embedded Programming and Embedded Hardware Design. 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 semester, each group will end up with a physical prototype of their embedded system design.

Final Projects

Students design and manufacture their own board from scratch, then program them with custom firmware. Although the boards may look similar (due to similar outlines), each board is unique to each group, as it was designed by each group for their own product. You can review projects from previous years at the links below.

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 bring up!

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