# 第02週- IoT 第一個 LED 電路、程式 ###### tags: `Arduino IDE` `電路` `IoT` `程式` `ESP32` --- ## 簡介課本、零件教材內容 --- ## 依個人 NB 安裝 Arduino IDE 版本、設定 ESP32 **下載 Arduino IDE 2.0.4 版本:** 前往 https://www.arduino.cc/en/software 1. 點選所需版本 ![](https://hackmd.io/_uploads/HJMJPgEF3.png) 2. 選擇 just download ![](https://hackmd.io/_uploads/Hk-GvxEth.png) **安裝 Arduino IDE 2.0.4 版本:** 1. Windows 版本 ![](https://hackmd.io/_uploads/SyYVOxVYn.png) ![](https://hackmd.io/_uploads/HyR8OgNK2.png) ![](https://hackmd.io/_uploads/rye1YlEY3.png) ![](https://hackmd.io/_uploads/rkdWKxEK2.png) 2. Mac 版本 ![](https://hackmd.io/_uploads/Hye8Kg4F3.png) ![](https://hackmd.io/_uploads/ByApYlNFn.png) ![](https://hackmd.io/_uploads/Hk9x5lEY3.png) ![](https://hackmd.io/_uploads/rJzE5gVK2.png) **Arduino IDE 2.0.4 版本的環境:** ![](https://hackmd.io/_uploads/SkhHse4Kh.png) **Arduino 2.0.4 版本的ESP32環境設定 :** 1. 先動 Perferences: ![](https://hackmd.io/_uploads/B1w2ilVYn.png) 2. 再點選 Additional boards manager URLs: ![](https://hackmd.io/_uploads/HJszneEYh.png) 3. 選擇 "Click for a list of unofficial support URLs" ![](https://hackmd.io/_uploads/HJyThgEt3.png) 4. 到 github 挑選 "Espressif ESP32:" ![](https://hackmd.io/_uploads/HyG8TeEt2.png) 5. 點選 "OK" ![](https://hackmd.io/_uploads/Hk6iplNFn.png) **Arduino IDE 2.0.4 選擇開發板:** 1. 選 "boards manager" ![](https://hackmd.io/_uploads/rk_6AeNY2.png) 2. key-in "esp32" ![](https://hackmd.io/_uploads/SylM1bVK3.png) 3. 選 "esp32 by Espressif systems" 和 "install" ![](https://hackmd.io/_uploads/SypY1-Nt2.png) 4. 選 "Select other board and port..." ![](https://hackmd.io/_uploads/HyvoJ-Vth.png) 5. 選 "SEP32 Wrover Module" ![](https://hackmd.io/_uploads/H1d6y-NY3.png) **Arduino IDE 所需之 USB 驅動程式** 前往網頁下載對應的 windows 或 Mac driver: 1. 參考網頁: https://www.wch.cn/download/CH341SER_EXE.html 2. 安裝完成後,選擇正確的 port: ![](https://hackmd.io/_uploads/SkdPZbEYh.png) --- ## 第一個麵包板電路、程式 **認識麵包板** ![](https://hackmd.io/_uploads/BJEffbVYh.png) **安裝 ESP32 並貼上腳位標籤** ![](https://hackmd.io/_uploads/H1gwMWVK2.png) **依 +、- 腳位,正確放置 LED** ![](https://hackmd.io/_uploads/Hy4Az-NF2.png) **再放置 220 歐姆 電阻** ![](https://hackmd.io/_uploads/Hyjh7WVtn.png) 決定電阻值: 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 亮起? ![](https://hackmd.io/_uploads/HyEQEZVFh.png) **去除 3.3V電源,連 GPIO2** ![](https://hackmd.io/_uploads/rkJi4-NFn.png) ## 點亮第一顆 LED **執行第一支程式** 1. 選 Blink ![](https://hackmd.io/_uploads/SJvgLbNK3.png) 2. 接上 USB 線,押選 "Upload" ![](https://hackmd.io/_uploads/HJ-Vd-NKn.png) 3. Upload 發生錯誤 ![](https://hackmd.io/_uploads/Hk4SvWNF2.png) 4. 修改程式內容 ![](https://hackmd.io/_uploads/BJpAwbEtn.png) 5. 上傳成功!是否閃耀第一顆LED電路? ![](https://hackmd.io/_uploads/HJlowZNth.png) --- ## Arduino 程式基礎 ![](https://hackmd.io/_uploads/HJ_miZNKh.png) **1. 語法** 一種「類C語言」,很多觀念跟 “C語言” 相同 (編譯式,非直譯式) **2. 架構、函式** 內定一定要包含有二個函式,不然程式編譯時,會產生錯誤: >setup():第一個執行的函式,而且只會執行一次 >loop() :第二個執行的函式,而且會一直重覆執行 **3. 資料型態** int:用來宣告變數為整數 void : 用於宣告函式,不回傳任何數值 **4. 指令** pinMode(gpio #, mode) digitalWrite(gpio #, state) --- ## SP32 GPIO 腳位 1. 全部腳位圖 ![](https://hackmd.io/_uploads/ByBYsW4tn.png) 2. SPI 記憶體專用,不可當輸出入 ![](https://hackmd.io/_uploads/rJfijZVK2.png) 3. 無內電阻,僅可輸入,不可當輸出 ![](https://hackmd.io/_uploads/SJLToZNt3.png) 4. I2C 專用 ![](https://hackmd.io/_uploads/BkECo-4th.png) 5. 兩組 ADC,第二組會和BLE或wifi相衝突 ![](https://hackmd.io/_uploads/BJoZ2Z4tn.png) --- ## 電路設計基礎 **你需具備的電路基礎觀念 (What you need to know before starting your first Electrical circuit):** 1. 直流電源 (DC Power source) ![](https://hackmd.io/_uploads/rJ7eAW4F2.png) 2. 封閉環 (Close loop) ![](https://hackmd.io/_uploads/S1Gm0Z4Yh.png) 3. 接地 (Grounding) ![](https://hackmd.io/_uploads/rJ7eAW4F2.png) 4. 數位訊號輸入接地(digital read grounding) ![](https://hackmd.io/_uploads/Hy7LR-EY2.png) 5. 感測器接地線 (Sensor grounding): > Normal LOW, Resistive Sensors ![](https://hackmd.io/_uploads/SJqD0bEK2.png) > Normal HIGH, Voltage-controlling Sensors ![](https://hackmd.io/_uploads/rkqd0WNYn.png) :::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) ![](https://hackmd.io/_uploads/H1Ig0LZK2.png) --- ## 參考資料 >1)IOT物聯網應用第七章 – 尤濬哲(夜市小霸王) 編著