第 01 章 - 認識 Arduino 與 IDE 整合環境說明
上次更新日期 2022/05/30
arduino 是由一個義大利團隊的工程師開發出來的,針對硬體設備以及開發軟體進行規劃,然後以 GPL v2 的授權發布, 因此 arduino 是開放原始碼的硬體+軟體~只要有興趣,大家都能作為硬體開發商或軟體開發商呢!那 arduino 要用來幹麻? 其實,最重要的是作為各項小物品的互動中間那塊界面!尤其近來我們經常需要做一些感測器數據的收集,那連接感測器, 並且將數據擷取後送出的,就是這個玩意兒最重要的任務之一了!
學習目標:
- 認識 arduino 硬體
- 了解與操作 arduino IDE 開發界面
- 測試燒錄程式碼到 arduino 上
1.1: 認識 arduino 與相關硬體
Arduino 是一個開放原始碼的嵌入式硬體平台,這個專案開始於 2005 年的一個義大利團隊,目的是在為新手和專業人員, 提供一種低成本且簡單的方法,以快速的建立感測器與環境互動的執行器。Arduino 是一家義大利的酒吧,專案的創始人常來這家店, 這家店的店名則是以 1000 年前的義大利某國王來命名的。
我們都知道,要運作程式,似乎就要有 CPU、記憶體、與 I/O 界面,然而就算很省電的 ARM 單版電腦好了, 通常還是價格不斐,而且也需要比較大的電量。那如果我們只是需要連接 LED 燈,或者是作一些簡單的控制面板, 似乎不必要用到這麼好的板子!於是,就有了 Arduino 專案的開發!目的就是在進行一些簡單元件的控制。
Arduino 使用的是 Atmel AVR 的微處理控制器,型號大多採用為 ATmega8, 168, 328 等, 然後將這塊微處理控制器搭配許多的 I/O 腳位,就可以設計出可以用來與物品互動的中間界面設備! 官方也針對這樣的設計,推出許多的開放原始碼硬體藍圖,也同時釋出相關的硬體!常見的有 arduino UNO, arduino nano, arduino Lilypad 等等。
前面說到 arduino 使用 Atmel 的微處理控制器,這家公司的微處理器主要使用 RISC 精簡指令集作為設計, Arduino 主要使用 Atmel 的 ATmega 系列。我們以 ATmega328 做個簡介:
參數 | 數值 |
CPU 類型 | 8 位元 AVR |
CPU 時脈 | 20MHz |
Flash 記憶體 | 32KB |
主記憶體 | 2KB |
最大 I/O 腳位 | 23 |
- arduino nano
arduino 的硬體板子非常多,因為是開發使用,所以許多同學比較喜歡功能較為強大的 arduino UNO 版。 我們這門課則拿比較小的 arduino nano 版本來作為測試!詳細的硬體規格可以前往 arduino 官網查詢:
arduino nano 的公板長的有點像底下這樣,長 x 寬 大概是 4.5cm x 1.8cm,長度不到 5 公分, 寬度不到 2 公分,相當有趣!至於板子的四周,就是所謂的腳位,RX, TX 腳位通常用在傳輸與接收, D2~D13 為數位功能 (digital) 腳位,A0~A7 則是類比腳位 (analog)。如果要持續供電給感測器, 則有 3.3V 與 5V 的腳位,接地則是 GND 腳位。要注意的是,根據上述官網的說明,每個腳位最大提供 40mA 的供電, 使用 5V 來看的話,單一腳位最大供電大概是 40mA * 5V = 0.2AV 大概是 0.2W 左右!使用上得要注意喔!
另外注意,arduino nano 上面有 4 個 LED 燈,分別代表開機、傳輸、接收、迴圈運作等燈號說明, 程式碼的記憶量 (flash memory) 共有 32KB,其中有 2KB 用在開機啟動管理 (bootloader, 最簡單的想法,就是 arduino 的 BIOS 啦!)。CPU 時脈為 16MHz,主記憶體有 2KB 等。
- 杜邦線
杜邦線是杜邦公司,為了特殊用途所作的線材,經常用於開發板 (麵包板) 上面,可以快速接合感測器與接受器, 當測試成功後,開發者才會將設計的圖示開模去實際的洗板。
杜邦線根據需求,有母對母、公對公、公對母等多種接頭。我們在使用麵包板的時候,大部分會用到公對母的接頭, 如果是感測器直接連接到 arduino 上,則大部分使用母對母的接頭,某些感測器或 arduino 使用母頭, 那就會用到公對公的杜邦線連接到麵包板上面了!
- 麵包板
有時候,我們得要透過某些界面來將許多的電子、感測器、供電等連接在一起,因為是測試過程, 所以不想要直接焊接。這時就可以透過麵包板的協助來處理。麵包板有很多規格,我們這裡來查看一下 17x10 個接點的小麵包板,有點像底下這樣:
以上圖來說,每一個 5 個接點都是連接在一起的,所以,安插在上面的接點,都會通電! 如果要用到 5 個以上的插座,可以使用公對公杜邦線連接另一個 5 接點,就可以擴充到 8 個接點! 以此類推~我們也可以將 LED 燈或者是感測器接在上面,在拉另一條線連結到 arduino 上, 就可以連線了!大部分的連線也都是這樣做的喔!
1.2: arduino 硬體連結 IDE 開發環境
認識了 arduino 的硬體之後,再來就是要處理放入 arduino 板子內的程式碼了。 放到 arduino 的程式碼,主要是透過 arduino 的 IDE 整合開發環境來處理的。執行的過程也是很簡單, 只要將 arduino 板子連接到 USB 之後,再將 USB 放入 Windows/Linux/Mac 等系統中, 就可以透過 IDE 的功能,來將編譯好的程式碼上傳了。
Arduino 的 IDE 軟體,可以在底下的網站上面直接下載:
根據你慣用的系統來下載軟體即可。我們這裡假設你用的是 windows 的作業系統進行開發, 那麼你可以下載『 Windows ZIP file 』的那個項目,該項目可以在解壓縮之後, 立刻可以操作 arduino IDE 開發環境,而不需要安裝喔!
按下『Windows ZIP file』之後,螢幕上會出現『Support the Arduino IDE』的斗內說明, 你可以嘗試斗內給開發單位,也可以直接找到『JUST DOWNLOAD』按鈕,就可以直接下載了。 鳥哥將上面的軟體下載之後,直接加壓縮到 D:\> 底下,所以,未來要操作 IDE 軟體時, 只要前往按下 D:\arduino-1.8.19\arduino.exe 即可操作囉!現在請立刻點擊喔! 執行 IDE 的畫面有點像這樣:
- 將 arduino 直接連線到你的 Windows 工作機
想要放程式碼進入 arduino,你得要先知道 arduino 與你工作機的連線界面埠口號碼才行! 現在,請拿出你的 arduino,安插上 USB 線,然後將 USB 線安插到你的工作機上面, 連接成功之後,你會發現 POW 的 LED 燈號會亮起來!如下圖所示,arduino nano 的四個 LED 燈號, 由右邊數來第 2 個,就是 POW (power) 燈號囉!要亮起來才是有供電喔!
確定燈號亮起來之後,再來就是打開你的裝置管理員,開啟裝置管理員的方法很多,鳥哥使用的流程是: 『開始程式集』-->『設定』-->『系統』-->『關於(左下方最底下)』-->『裝置管理員 (右側或者是下方)』。 設定的畫面有點像這樣:
接下來,在裝置管理員上面,點選『連接埠』(COM和LPT)的按鈕,你應該就會看到一個『USB-SERIAL-CH340』的裝置, 這個裝置後面接的那個 COM 號碼,就是你的連接埠了!以鳥哥的畫面來說,我的連接埠就會是 COM4 這樣! 如果你有多個設備,那有時候就得要拔除 arduino 的 USB 連線,底下裝置少了什麼,然後再接回 arduino, 這樣也能抓到正確的裝置連接埠喔!
- (Option) 安裝驅動程式 ch340
如果運氣不好,你的 Windows 系統並不支援 ch340 這個驅動程式的時候,那就得要自己安裝驅動程式了。 取動程式的下載可以到底下的連結看看,下載 ch341sr.zip 檔案,下載完畢解壓縮之後,執行 setup.exe, 讓程式跑一陣子,大概就可以安裝好驅動程式~之後回到上述的畫面去瞧一瞧,應該就可以看到你的 arduino nano 囉!
- 確認 IDE 環境取得正確的 arduino nano 資訊
再回到 arduino IDE 的畫面中,接下來選擇正確的 arduino 裝置,前往『工具』、『開發版』,選擇『Arduino Nano』的板子, 如下圖所示,就是正確的 arduino 型號了 (針對我們課程來說,請依據實際的你的 arduino 型號選擇。)
一般來說,選擇正確的 arduino 開發版之後,基本上,CPU 與開機載入器 (bootloader) 就會正常選擇。不過, 我們的 arduino nano 是比較早期的產品,因此不能選擇預設的 ATmega328P CPU,而是選擇 ATmega328P (Old Bootloader) 這個項目才對!選擇的畫面有點像這樣:
然後,就開始選擇連接埠,當然就是選擇 COM4 啦!如果沒有出現 COM4,那問題就比較大!可能需要額外安裝驅動程式! 基本上,windows 10 以後的支援度都足夠,應該不至於出現這個問題就是了。選擇連接埠情況有點像底下這樣:
這樣 IDE 開發環境與 arduino 的連結就完成了!為了讓我們在編譯、上傳資料過程當中有比較詳細的解釋, 讓我們挑選一下偏好設定,勾選幾個重要的項目來看看。在 IDE 畫面中,選擇『檔案』裡面的『偏好設定』項目, 會出現如下圖示,勾選『編輯』與『上傳』的項目,然後警告選擇『預設』即可。如果你在編寫程式碼當中需要知道行號, 也可以勾選『顯示行號』就是了!如果字型大小你覺得看不清楚,也可以放大字型就是了。鳥哥選擇如下所示:
1.3: 使用 arduino IDE 整合開發環境
再次回到 IDE 畫面中,先來查看一下畫面當中有什麼,以及怎麼操作 IDE 的許多小圖示 (icon)。
- 認識小按鈕功能
先再次看一下 IDE 的圖示好了,挑選完成大致的設定資料後,顯示的情況有點像底下這樣:
上圖當中,在分類標籤底下的小圖示共有 6 個,功能分別是:
- 編譯目前的程式碼
- 將程式碼編譯完成後寫入 (上傳) 到 arduino 裝置上
- 開啟新的專案
- 開啟 IDE 既有的範例檔,或者是曾經開啟過的專案檔
- 儲存目前的專案
- 使用序列埠 (serial port) 的功能,連接 arduino,可接收/傳送訊息給 arduino 喔!
你也可以看一下畫面最下方,你選擇的硬體是否正確喔!
- 認識 arduino IDE 程式碼設計方式
arduino 開發軟體是以 C 程式語言為範本來設計的,不過,設計的比 C 簡單之外,又將很多的腳位設定與功能, 通通寫成函式了,所以,呼叫函式並帶入參數,就可以設計/取得 arduino 腳位的功能!相當方便! 觀察 IDE 畫面,基本上,你會發現主要是兩個函數,分別是 setup() 與 loop(),setup 的中文是『設定』的意思, 所以,你要初始化 arduino 的某些功能,得要寫入到這邊。至於 loop 的中文則是『迴圈』之意, 亦即寫入到這個函式的程式碼,會一直不斷的迴圈跑下去!不會中斷喔!
為什麼程式碼不會中斷呢?基本上, arduino 供電之後,就會開始載入上一次寫入的程式碼,然後開始運作! 接下來它就自己幫你跑所有的資料!當然,你無須經常去修改裡面的資訊~所以, arduino 當然會持續迴圈執行上次規範的動作啊! 但是,如果沒有給予限制,那麼迴圈的速度通常是很快速喔!所以,先來了解一下有個重要的函數,那就是 delay() 啦!
delay(1000);
注意,跟 C 或 php 語言相似,每個程式碼後面都以分號 (;) 做結尾!不能錯誤了喔!delay 中文是『延遲』的意思, 也就是執行到這行程式碼後,程式會『暫停』括號內的毫秒數,也就是 0.001 秒!所以,寫上 1000 就代表 1000*0.001=1 秒鐘! 當然啦,這個 delay(1000) 絕對是放在 loop 後面的!這樣說,沒問題吧!
- 測試燒錄上傳功能
我們總是得要確認 IDE 與 arduino 真的是可以連動的才行!因此,『假裝』已經連線了 LED 燈 (其實沒有), 然後載入範本檔裡面的 LED 燈號控制範本程式,就可以測試一下了!請到 IDE 環境,由『檔案』、『範例』、『01.Basices』、『Blink』, 就可以開啟一個 LED 控制燈號的範本 (英文版 wiki 建議執行看看這個程式碼),如下圖所示:
上述程式碼你都先不要理解,之後慢慢處理就知道了!現在,先按下小按鈕列最左邊的編譯,測試一下 IDE 能不能編譯這個程式碼? 若編譯成功,就會如下圖所示:
如果這個編譯單純就是測試程式碼有沒有問題而已!因為每次上傳程式到 arduino 時,上傳前還是會重新編譯一次的。 現在,按下上傳看看!看看能不能有上傳成功的情況!
因為你的程式碼已經上傳到 arduino 了,因此 arduino 開始會迴圈不斷的進行 LED 燈號的開/關,雖然現在真的沒有 LED 啦。 再回到你的 arduino 硬體上,注意看板子上面四個燈號有個 L 的燈號,那應該就是 loop 的控制!亦即,每跑一次 loop, 燈號就會閃爍一次~現在查看一下你板子,是不是一直閃爍啊!如果是的話,恭喜你了!
- 修改後重新上傳測試
我們想要測試一下,那修改程式碼要怎麼處理?請現在將上圖的程式碼當中的 delay(1000) 改成 delay(500), 讓延遲只有 0.5 秒,而不是原本的 1 秒!改完之後直接按下『上傳』按鈕,然後再度觀察你的 arduino 硬體, 應該會發現 L 燈號的閃爍頻率變高了!這是當然的!因為延遲降低啦!這就代表我們修改程式碼是沒問題的!
最後,離開程式的時候,不需要儲存喔!這個檔案是範本檔,我們不要修改它!未來可以持續應用的!
1.4: 硬體操作注意事項
再次拿出 arduino nano 來觀察一下,你會發現有 D2~D13 以及 A0~A7 等數位/類比腳位 (pin)。 數位腳位很有趣喔!除了 5V 與 3.3V 會持續不斷的供電之外,其他數位腳位也可以透過 digitalWrite 函數來供電! 雖然 arduino 不是太耗電,基本上供電量不是太大,但是,如果你在 arduino 接上電源的情況下, 不小心讓腳位互相短路,而不巧該腳位有供電...你的 arduino 很可能會燒毀喔!所以,操作時很需要注意連線! 不要亂接!尤其是接到麵包版上面時,不要隨便安插啦!注意注意!
許多 LED 燈所需要的電壓是很低的,不會到 5V 這麼大!所以,當你要透過剛剛講的 digitalWrite 提供數位腳位電力時, 最好還是得要接上電阻!這個部份我們後面講到許多的裝置時,都會介紹!大家要特別注意就是了! 基本上,玩 arduino,你的程式底子有一點點就好,程式不是重點!而是接線的時候,腦袋要很清楚, 電線的連結圖要很注意!短路或接反了,要不是感測器燒毀,就是你的 arduino 燒毀...注意注意!
1.5: 參考資料
- Arduino 在 wiki 的解釋:https://zh.wikipedia.org/wiki/Arduino
- ATmel ARV 在 wiki 的解釋:https://zh.wikipedia.org/wiki/Atmel_AVR
- ATmega328 在 wiki 的解釋:https://en.wikipedia.org/wiki/ATmega328
- 楊明豐,碁峰資訊,『Arduino 最佳入門與應用,打造互動設計輕鬆學(第二版)