# Prerequisite Knowledge

## Electric Circuits

Having a basic conceptual understanding of electric circuits is **very helpful**, so students can better understand how to correctly connect the parts in their IoT electronics kit (and how to troubleshoot connection issues) – however, it is **NOT** required:

* Atoms and Electrons
* Static Electricity vs. Current Electricity
* Conductors vs. Insulators
* Closed Circuit vs. Open Circuit
* Voltage, Current, and Resistance
* Series Circuit vs. Parallel Circuit

Being able to solve quantitative equations involving circuits (Ohm's Law, etc.) is NOT required.

The IoT tutorials will provide a limited explanation of circuits, which should be sufficient for using the IoT kit to create devices.

## Physical Computing

Previous experience building and programming devices using an Arduino electronics kit – such as a robotics kit, etc. – is **very helpful**. However, it is **NOT** required. The IoT tutorials will assume that students have **no** prior experience in building or programming physical computing devices.

### Arduino

Previous experience and familiarity with the following Arduino development concepts is **very helpful** before programming IoT device apps – however, it is **NOT** required:

* Variables – declaring data type (`int`, `float`, `boolean`, `String`, etc.) and name (unique identifier), assigning and changing values, converting data type, global vs. local scope
* Program Functions – `setup()` function, `loop()` function, creating custom functions, calling a custom function, passing arguments into a function, returning value from a function
* Input/Output Functions – such as: `pinMode()`, `digitalRead()`, `digitalWrite()`, `analogRead()`, `analogWrite()`, `tone()`, etc.
* Libraries and Objects – including external library file in device app, constructing new object using defined class in library, using object properties and methods
* Comparison Operators – such as: `>`, `<`, `==`, `!=`, etc.
* Logical Operators (NOT, AND, OR): `!`, `&&`, `||`
* Conditional Statements using `if` and `else`
* Loops – such as: `for`, `while`, etc.

## Web Development

Previous experience and familiarity with these web development concepts is **highly recommended** before programming IoT web apps – however, mastery is **NOT** required:

### HTML

* Tag syntax for common HTML elements – such as: `<div>`, `<h1>`, `<h2>`, `<p>`, `<span>`, `<a>`,`<img>`, `<button>`, `<input>`, `<ul>`, `<li>`, etc.
* Nesting of HTML elements within other elements
* Use of `class` and `id` attributes for HTML elements
* Loading external files – such as: CSS style sheets, JavaScript files, images, other web pages, etc.&#x20;

### CSS

* CSS selectors for HTML elements, classes, and ids
* Common properties used in styles – such as: `background-color`, `color`, `font-size`, `margin`, `padding`, `border`, `width`, `height`, `display`, etc.

### JavaScript (including jQuery)

* Variables – declaring names (unique identifiers), assigning and changing values, data types (numbers, strings, boolean, etc.), global vs. local scope
* Functions – creating functions, calling a function, passing arguments into a function, returning value from a function
* Objects – constructing new object using defined class, using object properties and methods
* Comparison Operators – such as: `>`, `<`, `==`, `!=`, etc.
* Logical Operators (NOT, AND, OR): `!`, `&&`, `||`
* Conditional Statements using `if` and `else`
* Loops – such as: `for`, `while`, etc.
* Events – such as: `onclick`, `onchange`, etc.
* jQuery selectors for HTML elements, classes, and ids
* jQuery syntax for basic functions – such as: `.html()`, `.show()`, `.hide()`, `.addClass()`, `.removeClass()`, etc.

{% hint style="success" %}
Familiarity with these JavaScript concepts will make it easier for students to learn and apply similar concepts when programming their IoT device apps (using either the [Wiring](http://www.wiring.org.co/reference/) or [Arduino](https://www.arduino.cc/reference/en/) programming language).
{% endhint %}
