Introduction to Device Programming for IoT: C Edition


About This Course

We all know that smart devices play a big role in our day-to-day lives, and that more devices pop up every day. Have you considered that there needs to be a developer behind the scenes for every one of those devices? If you’re ready to change the world by converting the envisioned gadgets of tomorrow into digital reality, join this course and take your first steps toward programming for the Internet of Things.

Learn the basics of embedded device programming by implementing various projects on Raspberry Pi and MXChip AZ3166 devices (the AZ3166 is Arduino-software compatible). Learn how to write the software that controls the hardware (temperature sensors, photo cells, and more), and get started making a difference with procedural programming.

Begin with an intro to embedded programming, exploring embedded device types and the inputs and outputs for devices and sensors. Then work your way through a series of hands-on lab projects that teach you how to develop the hardware/software interface, help you to understand C programming for embedded devices, and explore basic data management for a resource-constrained device. From there, dive into embedded solutions that use your own circuit designs to solve real-world problems.

After completing this course, students will be able to develop embedded device systems that capture and process data from analog and digital sensors commonly found in IoT solutions.

NOTE: The lab project work in this course is based on the hardware found in the Microsoft IoT Pack for Raspberry Pi and the MXChip IoT DevKit.You may want to purchase in advance of starting the course.


在 Raspberry Pi 与 MXChip AZ3166 设备上实现多种项目,学习嵌入式设备编程的基础。学习如何编写控制硬件的软件程序,并开始尝试程序编程。

我们将从嵌入式编成介绍开始,探索针对设备与传感器的嵌入式设备类型,输入以及输出。然后,通过一系列的辅导实验项目,来学习怎样进行硬件/软件接口开发,帮助你理解嵌入式设备的 C 语言编程以及有限资源设备的基础数据管理。接下来,你将独立设计电路来解决实际问题。


注意:本节课实验中使用的硬件设备包括在微软物联网 Raspberry Pi and the MXChip IoT DevKit 工具箱中。你需要在课程开始之前准备好。


  • Some basic programming experience is required.
  • Some knowledge of the C programming language will be beneficial but is not required.
  • 基础编程经验
  • C语言编程经验

What you'll learn

  • Describe the characteristics of an embedded device
  • Configure the development environment for an embedded device
  • Create a simple program that accesses GPIO pins
  • Implement features of the C programming language in a constrained resource environment
  • Configure I/O libraries and take pinout readings
  • Develop a simple embedded device application
  • Explain how to construct simple circuits using common electrical components
  • Describe the sensor and device resources available in the marketplace
  • Implement sensors within an application using SPI and I2C
  • Explain how to develop a solution that uses multiple sensors
  • Build the circuit for a solution
  • Develop a software/hardware solution for a common scenario
  • 描述嵌入式设备特征
  • 设置嵌入式设备开发环境
  • 建立能够进入 GPIO pins 的简单程序
  • 在有限资源环境中实现 C 语言编程的特征
  • 设置 I/O 文库与进行引出线读取
  • 开发简单的嵌入式设备应用
  • 解释怎样使用常见电子元件构建简单电路
  • 描述市场上可用的传感器与设备
  • 使用 SPI 与 I2C 实现传感器应用
  • 解释怎样使用多传感器进行开发
  • 针对解决方案设计电路
  • 针对常见场景开发软件/硬件解决方案

Course Syllabus

    This course is completely lab-based. There are no lectures or required reading sections. All of the learning content that you will need is embedded directly into the labs, right where and when you need it. Introductions to tools and technologies, references to additional content, video demonstrations, and code explanations are all built into the labs.

    Some assessment questions will be presented during the labs. These questions will help you to prepare for the final assessment.

    The course includes four modules, each of which contains two or more lab activities. The lab outline is provided below.




    Module 1: Introduction to Embedded Device Programming

  • Lab 1: Preparing Your Development Environment
  • Lab 2 Developing Your First Embedded Device Application

  • Module 2: Data and Device Inputs

  • Lab 1: Building a Binary Counter
  • Lab 2: Getting Started with the MXChip Device

  • Module 3: Circuit Components and Sensor Hardware

  • Lab 1: Building Simple Circuits
  • Lab 2: Using Sensors
  • Lab 3: Building a Temperature Gauge

  • Module 4: Real-World Solutions

  • Lab 1: Building a Photo Cell Device
  • Lab 2: Comparing Digital and Analog Inputs

  • 第1单元:嵌入式设备编程

  • 实验 1: 准备开发环境
  • 实验 2: 开发第一个嵌入式设备应用

  • 第2单元:数据以及设备输入

  • 实验 1: 建立一个二进制计数器
  • 实验 2: 从 MXChip 设备开始

  • 第3单元:电路组成以及硬件传感器

  • 实验 1: 建立简单的电路
  • 实验 2: 使用传感器
  • 实验 3: 建立一个温度计

  • 第4单元:现实场景

  • 实验 1: 建立一个光电设备
  • 实验 2: 数字与模拟输入比较

Course Staff

Course Staff Chris Howd

Chris Howd

Engineer and Software Developer


Chris is an engineer and software developer who has been working at Microsoft in various roles for the past 15 years. Before coming to Microsoft, Chris worked for the U.S. Department of Defense designing and developing computer controlled instrumentation and robotic systems, and was a self-employed contractor doing engineering research with NASA and select engineering start-ups.

Course Staff Matt Dixon

Matt Dixon

Owner and Founder

Front Range Systems

Matt is owner and founder of Front Range Systems, a software consulting company focusing on custom software solutions for its clients. Matt has over 16 years of professional development experience, and loves solving complex problems with simple solutions. He has helped organizations through mentorship and training and specializes in professional and enterprise solutions with various technologies including HTML5, AngularJS, ASP.Net, WPF and C#.

Frequently Asked Questions

Who can take this course?

Unfortunately, learners from one or more of the following countries or regions will not be able to register for this course: Iran, Cuba and the Crimea region of Ukraine. While edX has sought licenses from the U.S. Office of Foreign Assets Control (OFAC) to offer our courses to learners in these countries and regions, the licenses we have received are not broad enough to allow us to offer this course in all locations. EdX truly regrets that U.S. sanctions prevent us from offering all of our courses to everyone, no matter where they live.

  1. 课程代码

  2. 课程开始

  3. 课程结束

  4. 预期课程目标

    Total 8 to 12 hours