# 第02週- IoT 第一個 LED 電路、程式
###### tags: `Arduino IDE` `電路` `IoT` `程式` `ESP32`
---
## 簡介課本、零件教材內容
---
## 依個人 NB 安裝 Arduino IDE 版本、設定 ESP32
**下載 Arduino IDE 2.0.4 版本:**
前往 https://www.arduino.cc/en/software
1. 點選所需版本

2. 選擇 just download

**安裝 Arduino IDE 2.0.4 版本:**
1. Windows 版本




2. Mac 版本




**Arduino IDE 2.0.4 版本的環境:**

**Arduino 2.0.4 版本的ESP32環境設定 :**
1. 先動 Perferences:

2. 再點選 Additional boards manager URLs:

3. 選擇 "Click for a list of unofficial support URLs"

4. 到 github 挑選 "Espressif ESP32:"

5. 點選 "OK"

**Arduino IDE 2.0.4 選擇開發板:**
1. 選 "boards manager"

2. key-in "esp32"

3. 選 "esp32 by Espressif systems" 和 "install"

4. 選 "Select other board and port..."

5. 選 "SEP32 Wrover Module"

**Arduino IDE 所需之 USB 驅動程式**
前往網頁下載對應的 windows 或 Mac driver:
1. 參考網頁: https://www.wch.cn/download/CH341SER_EXE.html
2. 安裝完成後,選擇正確的 port:

---
## 第一個麵包板電路、程式
**認識麵包板**

**安裝 ESP32 並貼上腳位標籤**

**依 +、- 腳位,正確放置 LED**

**再放置 220 歐姆 電阻**

決定電阻值:
1)LED 耐電壓約 2V
2)LED 所需電流約 20 mA = 0.02 A
R = V / I = (3.3 – 2) / 0.02 = 65 ohm (至少)
--> 因此 220 ohm 是OK的。
**接地線、3.3V電源**
是否 LED 亮起?

**去除 3.3V電源,連 GPIO2**

## 點亮第一顆 LED
**執行第一支程式**
1. 選 Blink

2. 接上 USB 線,押選 "Upload"

3. Upload 發生錯誤

4. 修改程式內容

5. 上傳成功!是否閃耀第一顆LED電路?

---
## Arduino 程式基礎

**1. 語法**
一種「類C語言」,很多觀念跟 “C語言” 相同 (編譯式,非直譯式)
**2. 架構、函式**
內定一定要包含有二個函式,不然程式編譯時,會產生錯誤:
>setup():第一個執行的函式,而且只會執行一次
>loop() :第二個執行的函式,而且會一直重覆執行
**3. 資料型態**
int:用來宣告變數為整數
void : 用於宣告函式,不回傳任何數值
**4. 指令**
pinMode(gpio #, mode)
digitalWrite(gpio #, state)
---
## SP32 GPIO 腳位
1. 全部腳位圖

2. SPI 記憶體專用,不可當輸出入

3. 無內電阻,僅可輸入,不可當輸出

4. I2C 專用

5. 兩組 ADC,第二組會和BLE或wifi相衝突

---
## 電路設計基礎
**你需具備的電路基礎觀念 (What you need to know before starting your first Electrical circuit):**
1. 直流電源 (DC Power source)

2. 封閉環 (Close loop)

3. 接地 (Grounding)

4. 數位訊號輸入接地(digital read grounding)

5. 感測器接地線 (Sensor grounding):
> Normal LOW, Resistive Sensors

> Normal HIGH, Voltage-controlling Sensors

:::warning
### 挑戰題::wink:延伸整合題
設計街口交通燈號
>紅、黃、綠 依序啟閉
>紅 LED 亮兩秒半後關閉,同時亮綠 LED
>綠 LED 亮兩秒後關閉,同時亮黃 LED
>黃 LED 亮半秒後關閉,同時亮紅 LED
提示 (hint):
選擇正確的 ADC(2) 腳位,分別接不同 LED
delay(1000) 代表延遲一千亳秒 = 一秒
:::spoiler
```javascript=
int redled = 15;
int yellowled = 2;
int greenled = 4;
void setup() {
pinMode(redled, OUTPUT);
pinMode(yellowled, OUTPUT);
pinMode(greenled, OUTPUT);
}
void loop() {
digitalWrite(redled, HIGH);
delay(2500);
digitalWrite(redled, LOW);
digitalWrite(greenled, HIGH);
delay(2000);
digitalWrite(greenled, LOW);
digitalWrite(yellowled, HIGH);
delay(500);
digitalWrite(yellowled, LOW);
}
```
:::
---
## 免費線上模擬器介紹
1. TinkerCAD 電路設計:
- 模擬 Arduino 各種開板、各項電子零件和電路 (circuits)
- 建立帳戶 (Account creation)
- 開始第一專案 (Start your first project)
- 交換學習專案 (Exchanging your projects)
2. WOKWI 模擬器:
- 免費的線上Arduino, ESP32 和 Raspberry Pi Pico 開發板模擬器
- 建立帳戶 (Account creation)

---
## 參考資料
>1)IOT物聯網應用第七章 – 尤濬哲(夜市小霸王) 編著