Code Monkey home page Code Monkey logo

microsoft / iot-curriculum Goto Github PK

View Code? Open in Web Editor NEW
159.0 43.0 51.0 63.48 MB

Hands on labs and content for students and educators to learn and teach the Internet of Things at schools, universities, coding clubs, community colleges and bootcamps

License: MIT License

Jupyter Notebook 11.10% Python 17.52% C++ 23.34% CSS 0.40% HTML 3.31% JavaScript 37.47% C 3.40% C# 1.04% Dockerfile 0.31% CMake 0.33% Shell 1.78%
iot azure azure-iot machine-learning ai curriculum iot-edge microsoft labs hands-on-lab

iot-curriculum's Introduction

Azure IoT Curriculum

GitHub license GitHub contributors GitHub issues GitHub pull-requests PRs Welcome

GitHub watchers GitHub forks GitHub stars

This repo is actively developed - watch, star or check back often for updates

This repo contains hands-on-labs and other lab and workshop based material designed to support the creation of IoT curricula for higher education, covering IoT and AI on the edge. All the labs use physical devices, such as Raspberry Pis and NVIDIA Jetson boards, and are designed for in-class or at home study. As an educator, you would use these labs in a blended learning environment, teaching concepts and theory in the classroom, mixed with labs from here to supplement the course and provide hands-on experience.

Most of the content here is Microsoft content available in other places - this repo brings some of the content together and provides a single place to find content across different gitHub repos, documentation, Microsoft Learn and other sites.

All the content contained in this repo is free for you to use in your courses however you see fit. We will endeavour to keep the content up to date, but seeing as technology moves fast, things may be missed. If you find any errors in these materials, please either raise an issue, or feel free to raise a PR with the fix.

We will be continually adding and updating the content here. If there is a particular lab or content you would like added, please raise an issue. If you have content you would like to share, please raise a PR.

IoT for beginners

IoT for beginners logo

If you are after beginner IoT content, check out IoT for beginners, a 12-week, 24 lesson curriculum that teaches IoT from the basics. Each lesson includes pre- and post-lesson quizzes, written instructions to complete the lesson, a solution, an assignment and more. Our project-based pedagogy allows you to learn while building, a proven way for new skills to 'stick'.

The projects cover the journey of food from farm to table. This includes farming, logistics, manufacturing, retail and consumer - all popular industry areas for IoT devices.

Hardware needs

These labs make use of a variety of hardware, all connected to cloud services. Each lab indicates up front what hardware is required. There is also an overall list for an 'IoT Cart' that provides a complete, all-in-one hardware solution that covers all these labs. This is designed to be a 'course in a box' - you purchase everything on the list and that can be shared between groups of students learning IoT in a more IoT focused degree program, rather than a single course as part of a wider technology-based learning program. Details of the cart are in the cart folder.

Device setup

The devices folder contains details on setting up the different devices recommended for the IoT Cart.

Labs

The labs folder contains details on a range of different labs covering IoT and AI on the edge.

Educator guides

The educator-guides folder contains guides for educators, including suggested course outlines and IoT lab guides.

Microsoft Learn

Microsoft Learn is a free, online training platform that provides interactive learning for Microsoft products and more. Our goal is to help you become proficient on our technologies and learn more skills with fun, guided, hands-on, interactive content that's specific to your role and goals.

There are a number of Learning Paths covering IoT technologies, services and solutions. These can form a hands-on component of a blended learning setup in the classroom, or provide a way for students to learn by themselves.

Fundamentals

IoT Concepts and services

Data

AI and Machine Learning

IoT Scenarios

IoT Videos

Solution quickstarts

Microsoft offers a number of 'solution accelerators' - almost complete IoT setups that can be customized to your needs. As a part of this, there are a number of quickstarts that allow you to try out the different solutions.

Reference architectures

The Azure Architecture Center provides guidance for architecting solutions on Azure using established patterns and practices.

Industrial IoT

For Industrial IoT (IIoT), Microsoft provides a range of reference materials and samples based around OPC-UA.

Digital Agriculture

Digital Twins

Robotics

Azure RTOS

Azure RTOS is an embedded development suite including a small but powerful operating system that provides reliable, ultra-fast performance for resource-constrained devices. It’s easy-to-use and market-proven, having been deployed on more than 6.2 billion devices worldwide. Azure RTOS supports the most popular 32-bit microcontrollers and embedded development tools, so you can make the most of your team’s existing skills.

Programming languages, platforms and tools

There are many different programming languages, platforms and tools you can use for IoT. Here are some language resources:

Python

Python is a popular language for developing IoT solutions on devices such as the Raspberry Pi. It's also popular for data science, and building machine learning models to analyze the data coming from IoT devices.

.NET

.NET is a free, cross-platform, open source developer platform for building applications, and supports programming languages such as C# and F#.

C/C++

JavaScript/Node.js

  • Azure IoT Node SDK - The Azure IoT Node.js SDK enables developers to create IoT solutions written in Node.js for the Azure IoT platform.
  • Beginner's Series to: JavaScript - a series of practical, bite-sized videos about JavaScript for beginners so you can get up to speed quickly!
  • Beginner's Series to: Node.js - a series of practical, bite-sized videos about Node.js for beginners so you can get up to speed quickly!

Arduino

  • Azure IoT Hub library for Arduino - This library is a port of the Microsoft Azure IoT device SDK for C to Arduino. It allows you to use several Arduino compatible boards with Azure IoT Hub

Visual Studio Code

Visual Studio Code (VS Code) is a free, open source, cross-platform developer text editor that can be extended by a huge range of extensions to support different programing languages and capabilities.

  • Visual Studio Code - the home of VS Code
  • Platform.io - an extension for VS Code that provides tools for embedded C/C++ development, with no additional dependencies
  • Remote developer pack - an extension to support remote development, such as connecting to a Raspberry Pi and developing on that Pi from your PC or Mac
  • PyLance - Python language extension - an extension providing Python language support to VS Code
  • C/C++ - full intellisense and debugging support for C and C++ development

IoT Events in a box

If you are interested in running an IoT event, here are some 'events in a box', giving access to event materials, such as slide decks, video walkthroughs and code samples.

  • IoT Event Learning Path - The Internet of Things Event Learning Path is designed for Solution Architects, Business Decision Makers, and Development teams that are interested in building IoT Solutions with Azure Services. The content is comprised of 5 video based modules that approach topics ranging from IoT device connectivity, IoT data communication strategies, use of artificial intelligence at the edge, data processing considerations for IoT data, and IoT solutioning based on the Azure IoT reference architecture.

Azure subscriptions

These labs are designed for courses where Azure resources are provided to students by the institution. To try them out, you can use one of our free subscriptions. Head to the Azure Subscriptions Guide for from information on setting up a subscription.

Get certified

Microsoft offers a certification in IoT - AZ-220, the Microsoft Certified: Azure IoT Developer Specialty.

Microsoft Learn Student Ambassadors

Finding your community is more important than ever as classes and social activities take place virtually. Amplify your impact and bring together your peers to learn new skills, solve real-world problems, and build communities across the globe.

Students can apply to be a Microsoft Learn Student Ambassadors. The Student Ambassadors program provides clear steps to help you learn and lead so you can make a difference and empower those around you.

Student Ambassadors get access to unique resources like our global student network on Microsoft Teams and a Microsoft 365 account, and can earn badges for activities and contributions to unlock additional benefits such as cloud credits.

If you are an educator, encourage your students to sign up for this program to help their peers learn new skills, and to improve employability after their studies.

You can learn more on the Microsoft Learn Student Ambassadors site.

Imagine Cup

Reimagine our world with technology in the 2021 Imagine Cup

We’re looking for bold thinkers and big dreamers to join the 2021 competition journey.

Make an impact through coding, collaboration, and competition. Innovate with passion to tackle global issues and bring your idea to life in the Imagine Cup.

The 19th annual Imagine Cup is more than just a competition for students—you can work with friends (and make new ones!), network with professionals, gain new skills, make a difference in the world, and have the chance to win great prizes.

Read more and sign up at imaginecup.microsoft.com.

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.

When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

Legal Notices

Microsoft and any contributors grant you a license to the Microsoft documentation and other content in this repository under the MIT License, see the LICENSE file, and grant you a license to any code in the repository under the MIT License, see the LICENSE-CODE file.

Microsoft, Windows, Microsoft Azure and/or other Microsoft products and services referenced in the documentation may be either trademarks or registered trademarks of Microsoft in the United States and/or other countries. The licenses for this project do not grant you rights to use any Microsoft names, logos, or trademarks. Microsoft's general trademark guidelines can be found at http://go.microsoft.com/fwlink/?LinkID=254653.

Privacy information can be found at https://privacy.microsoft.com/

Microsoft and any contributors reserve all other rights, whether under their respective copyrights, patents, or trademarks, whether by implication, estoppel or otherwise.

iot-curriculum's People

Contributors

chagen24 avatar jimbobbennett avatar kartben avatar microshak avatar microsoftopensource avatar moizmhm avatar tanmoy-tcs avatar toolboc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

iot-curriculum's Issues

Azure Kinect DK lab

The original cart had an Azure Kinect DK in it. Although this has been removed from the final cart spec, there are a number of use cases for this in IoT, so there needs to be labs created.

One example lab would be a music controller, where the human body is used to play music.

Hardware used

  • Azure Kinect DK
  • PC with NVIDIA GPU (required for the body tracking SDK)

Lab steps

  • Set up the Azure Kinect DK
  • Using the distance sensor detect when something moves too close to the Kinect and play a sound, the position left to right determined the pitch of the sound
  • Add body tracking, so each limb is a different instrument

GPS lab

The cart lists a GPS sensor. A good lab for this would be to show the location of a device on a map using Azure Maps and IoT Hub.

This will use an ESP32 to connect to the GPS sensor, coded in C++, and a Python/Flask web app to show the location on a map.

Hardware required

  • NEO-6M GPS module
  • ESP32

Lab

  • Setting up for ESP32 development with PlatformIO
  • Connecting the ESP32 to the GPS module
  • Connecting the ESP32 to IoT Hub to send GPS data
  • Plotting the GPS data on Azure Maps using a Python/Flask web page

TinyML lab with Arduino Nano Sense board

This lab will show bow to build a number of TinyML models using Azure Machine Learning Studio that work on the Arduino Nano Sense board. This board has an accelerometer and a microphone, so both motion and voice should be covered.

Hardware used

  • Arduino Nano sense

Lab steps

  • How to set up Azure Machine Learning Studio
  • Creating a movement model (how?)
  • Creating a speech model (how?)

Not sure what would be a good example for this. Some suggestions:

  • A magic wand where you have to combine the right movement with the right word to 'cast a spell' - avoiding any copyright issues of course.

    Hermione Granger saying a spell

  • Conducting music, connecting to something like a Raspberry Pi over bluetooth and playing music based on motion, with words to change the instrument

All labs should follow the lab contribution guidelines.

Add electricity demand workshop

Electricity demand/pricing can affect manufacturing costs. We need a workshop/lab or other content that could be used by an educator to create a course that shows how to create ML models for energy demand prediction.

An example of such content would be:

Description

Electricity demand forecasting is an important area of study for energy management and maintenance scheduling. To address these business needs, companies are looking into appropriate technologies and machine learning-based solutions to forecast electricity demand. In the past few decades, machine learning model-based forecasting has also become very popular in the private and the public decision-making process.

In this course, students will learn the most important concepts and tools for building, training, and deploying demand forecasting models. Students will build a theoretical foundation as we cover the essential aspects of time series representations, modeling, and forecasting before diving into deep learning methods for forecasting time series data.

Students will then gain hands-on experience applying these models to a real-world scenario, using Azure and machine learning components available in open source Python packages, such as pandas, scikit-learn and Keras.

Topics

  • Introduction to time series data
  • Time series forecasting to predict demand
  • Machine learning for time series forecasting with Python
  • Deep learning for time series forecasting with Python
  • Azure Machine Learning notebooks
  • Build, train, test and evaluate a demand forecasting model on Azure
  • Deploy a demand forecasting model as web services on Azure

Examples of resources

Guide on teaching IoT in the classroom and remote

This repo should add guides to help educators to teach IoT in the classroom. Guides could include:

  • How to set up an on-campus lab - software, hardware, networking etc.
  • Configuring development environments in the cloud using CodeSpaces
  • Configuration for remote students

Add AI model to environment monitor lab

The environment monitor could do with an additional step showing how to build an AI model using Azure Machine Learning Studio to do something more with the data.

This model would need to be trained on some kind of existing data set - such as a mocked up data set, and use this to make predictions.

For example, the sound level could be noise from a machine, and if this increases along with temperature it means the machine is about to fail. A dummy data set of temperature/noise to chance of failure could be used to train a model, and then use this from Stream Analytics to report the chance of failure based on live data from the Pi.

Text to speech lab with a Raspberry Pi

This is a second phase to #6 - adding text to speech.

This should be a second step in the speech to text lab, expanding on it to build a scenario based on speech services on devices.

It should cover re-using the existing cognitive services account and converting speech to text, for example building a simple question/answer scenario - you ask the device the time and it returns the current time, something like that.

All labs should follow the lab contribution guidelines.

Connecting to IoT Hub over a LoRa network

The cart lists a LoRa gateway, as well as an ESP32 board compatible with LoRa. To support this we need a lab that shows how to connect this device to IoT Hub and send data over LoRa to IoT Hub.

One idea would be to add a LoRa extension to #20 to show location over a wide area, instead of just limited to in WiFi range

Add simulator to environment monitor lab

The Environment monitor lab relies on physical hardware. This makes it hard to teach to remote students who may not have access to the same hardware, either due to cost or shipping limitations.

To make this lab easier to run, it should have an alternative to the physical hardware using simulated hardware - essentially a Python app that can be run on the users PC or Mac that simulates random temperature, humidity and sound data, with a way to simulate a sound spike on demand.

Manufacturing line validation with ESP-EYE

This is a lab that shows a prototype setup for using vision based AI to validate the output of a manufacturing line, running on an ESP-EYE.

This lab will use C++ on the ESP-EYE, and Python on a Raspberry Pi

Hardware used

  • ESP-EYE
  • Raspberry Pi 4
  • Grove Pi+ - hat, LEDs, button

Lab parts

The parts to this lab are:

  • Setting up the ESP-EYE development environment using PlatformIO
  • Building a 'hello world' app on the ESP-EYE to prove the setup works in C++
  • Constructing an assembly line (example using Lego)
  • Add a camera control web server to the ESP-EYE to capture source images of valid and broken parts on the assembly line
  • Use the images to train a Custom Vision model
  • Add calls to the Custom Vision model to the ESP-EYE code so it validates images after capturing them
  • Connect the ESP-EYE to IoT Hub for control
  • Connect the Raspberry Pi to IoT Hub to control the ESP-EYE via a button and show the Custom Vision results using LEDs
  • Run the Custom Vision model on the Pi using IoT Edge

All labs should follow the lab contribution guidelines.

Speech to text lab with Raspberry Pi

The cart contains a Raspberry Pi, along with a USB speakerphone containing a microphone and speaker.

One of the labs we need to use this is speech to text based off the Azure cognitive services speech service, all coded in Python.

There isn't a Speech SDK in Python for the Raspberry Pi at the moment, so this lab should use the REST API.

Hardware

  • Raspberry Pi 4
  • M0 USB speakerphone

Lab parts

This lab should focus on the Speech to Text scenario, with output to the console. As this lab needs to explain all the steps it needs to be documented either as markdown, or a Jupyter notebook that can be run on the Pi.

The lab should have a structure something like:

All labs should follow the lab contribution guidelines.

Robotics lab

It would be good to have a robotics lab here. This will use parts not in the cart, but maybe something like the PiCar-V kit and could work with AI models to create a self driving car

Predictive maintenance lab

Add a lab that covers predictive maintenance. Not sure what hardware etc. to use.

There are a number of docs on this, so it would be good to distill this into a short lab.

Smart door using ESP-32

This lab shows a prototype smart door setup using an ESP32 board.

An ESP32 and a stepper motor will simulate a door lock. The ESP32 can detect a magnet nearby, and this can simulate a detector for an open/closed door. The door status will feed to IoT Hub. The stepper motor will simulate a lock, and be controlled by IoT Hub to show how a smart lock can be cloud controlled.

The ESP32 will be coded in C++. There will be a Python app to show the data running in a Jupyter notebook

Hardware used

  • ESP32
  • Stepper motor
  • Breadboard
  • Magnet

Lab steps

  • Setting up ESP32 coding using PlatformIO
  • Setting up IoT Hub (links to existing Microsoft Docs)
  • Detecting a magnet and controlling a stepper motor
  • Connection to IoT Hub to send magnet detection data and respond to direct methods to lock the door
  • Visualizing door data and controlling the lock via a Jupyter notebook.

All labs should follow the lab contribution guidelines.

Using the Jetson AGX Xavier with the e-CAM20_CUTX2 – 2MP HDR Jetson TX2/TX1 Camera Board

The cart provides the e-CAM20_CUTX2 – 2MP HDR Jetson TX2/TX1 Camera Board for use with the Jetson Xavier.

For this device, the content links to a number of labs, some of which are vision based using USB cameras, or the Raspberry Pi camera.

We need to provide instructions on using this camera board for these labs, either by separate configuration details, or by submitting PRs to the relevant labs to include information on using this camera board.

Curriculum guides

This repo contains a wide variety of labs and links. To help educators create courses, there needs to be guidance on how to use these materials, with some suggested course structures.

For example:

  • IoT 101 for a CS degree: Covers the outline of a single module as part of a Computer Science course with hardware suggestions, labs, concepts to teach etc. Covering IoT, the cloud, connecting them, protocols, using the data in the cloud
  • IoT 201: Covers more depth on top of 101. Covering adding AI using IoT Edge, more advanced cloud services
  • IoT for electrical engineering
  • IoT for business

Add information on VS Code live share

With students working remotely, or in class with social distancing, it would be nice to provide details on VS Code live share and how it can be used to allow students to collaborate on code.

Add info on IoT Plug and Play

IoT device builders can leverage Azure IoT Plug and Play to help their devices integrate with Azure with no configuration.

Students may well learn how to build their own IoT Devices, so we should provide content links or maybe a short lab to show how this can be set up.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.