CSCI 332 and ECEG432
A broad investigation into the design of internet-connected physical objects and the infrastructure that supports them. This hands-on course covers topics including embedded systems, wireless communication, internet protocols, cloud computing, and security. Students will develop their own IoT system in the course.
Instructor
Alan Marchiori – Associate Professor of Computer Science and Electrical & Computer Engineering
Office: Dana 327
Calendar: https://calendar.google.com/calendar/embed?src=amm042%40bucknell.edu
Appointments: https://calendar.google.com/calendar/selfsched?sstoken=UUNGd08xclV2MHphfGRlZmF1bHR8YzAzMzU2NzgwYmQ1MDBjNmFkYTgxZjQzODgwNTIzZDQ
Course Time and Location
Dana 303, Tuesday and Thursday 8:30 AM – 9:50 AM.
Course Objectives
By the end of the semester student will be able to:
- Define, use, and test an IoT system.
- Develop and analyze the performance and security of an IoT system architecture.
- Design and program an ESP32 SoC using the ESP-IDF toolchain to implement an IoT device.
- Interface various sensors and peripherals to the ESP32 SoC to perform common IoT tasks.
- Evaluate the performance of an ESP32 SoC system.
Required Materials
Each student is expected to purchase at least one or more of the readily available ESP32 development boards listed below. The Kaluga has many interesting peripherals but is a bit more expensive. We will not use these Kaluga’s peripherals in the course instruction but you could use them in your course projects. The DevKitM-1 is the simplest and least expensive. The DevKitC-1 is the mid-range option giving you the most features for the lowest cost but these are currently out of stock.
You may also want to put together your own IoT hardware kit with a breadboard, wires, and a few of your favorite sensors (temperature, humidity, distance, light, etc). Many of these components are available free of charge through the Maker-E Component Database.
ESP32-S2-DevKitM-1 | ESP32-S2-DevKitC-1 | ESP32-S2-Kaluga-1 |
ESP32-S2-DevKitM-1 is an entry-level development board based ESP32-S2-MINI-1 or ESP32-S2-MINI-1U. It has all the ESP32-S2 pins exposed and is easy to connect and use. | ESP32-S2-DevKitC-1 is an entry-level development board based on ESP32-S2-SOLO general-purpose module with a 4 MB SPI flash. This board integrates complete Wi-Fi functions. Most of the I/O pins are broken out to the pin headers on both sides for easy interfacing. Developers can either connect peripherals with jumper wires or mount ESP32-S2-DevKitC-1 on a breadboard. | The new multimedia development board ESP32-S2-Kaluga-1 based on ESP32-S2 has various functions, such as an LCD screen display, touch panel control, camera image acquisition, audio playback, etc. It can be flexibly assembled and disassembled, thus fulfilling a variety of customized requirements. |
Mouser, $9 ea | Mouser, $9 ea, limited availability | Mouser, $48 ea |
Notes on part numbers
Part numbers ending with a U require an external antenna (not recommended). Part numbers ending with an R have a larger flash memory and PSRAM (recommended if available).
Software
We will use the official Espressif development tool, ESP-IDF. We will use the latest stable release (unless we need to change for compatibility reasons) which is v4.3. This includes the Microsoft Visual Studio Code IDE including the Esperssif IDF extension. If we design a PCB, we will use KiCad.
Course Topics
- Define the Internet of Things
- Introduction to the ESP-IDF and FreeRTOS
- ESP32 peripherals
- WiFi
- Bluetooth
- ADC
- DAC
- I2c
- Spi
- Displays
- Filesystem
- Sensors
- Environmental
- Temperature
- Humidity
- RTD
- Environmental
- Introduction to cloud computing
- Amazon EC2
- Messaging protocols, MQTT
- Database storage and retrieval, Timescale (PostgreSQL)
- NodeJS and/or Python services
Course Portfolio and Course Grading
By the end of the course every student is expected to develop a portfolio of their ESP32 knowledge. The goal is to demonstrate you are an expert on the ESP32 IoT platform. Portfolios can be hosted on github/wordpress/google docs/youtube/etc, use whatever format you like. Ideally, every week you should be adding to your portfolio. Every week you will submit a progress report that summarizes your week’s work. Weekly progress will be graded on the 0-3 scale shown below. The 10 highest weekly grades will used to compute your final course grade. Even though you may be working in a small group on a particular topic, each student will develop their own individual portfolio and submit individual weekly progress reports.
Grade | Description |
0 | No progress. |
1 | Marginal – some progress, unorganized, lacking detail, or with errors. |
2 | Good – well documented, considerable details, generally useful, and mostly error free. |
3 | Excellent – consistently excellent content, highly useful, precise, error free. |
Course grades will be determined from the 10 highest weekly grades using the scale below. The minimum/maximum score for each range will correspond to -/+ grades accordingly, when applicable (e.g. 20 is a B- and 24 is a B+, 21-23 (inclusive) is a B; 25 is an A- and there is no A+!).
Score | Grade |
>=25 | A |
20-24 | B |
15-19 | C |
10-14 | D |
< 10 | F |
Suggested Project Areas
Students will complete several projects over the semester. Below are some programs that may help provide good real-world problems you can solve with an IoT device.