# 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 %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.idew.org/code-internet-of-things/prerequisite-knowledge.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
