//Logo Image
作者:張凱維(2012-05-04);推薦:徐業良(2012-05-05)
附註:本文為元智大學機械系自動化機械設計課程Arduino使用教材。

使用網頁瀏覽器傳送指令至Arduino Server控制數位腳位輸出

本文說明遠端使用者如何在網頁瀏覽器的網址列中鍵入指令,透過網際網路傳送指令至Arduino Server,控制Arduino Server上的Digital腳位做輸出電壓的動作。藉著控制Digital腳位的輸出可加以控制LED燈的明暗、繼電器的跳動、伺服馬達的轉動角度或輸出訊號至馬達驅動IC以控制直流馬達等。本文以控制LED燈的明暗來表現Digital腳位的輸出狀態。

1.       軟硬體需求與設定

本文中需要的軟硬體與程式碼如下:

(1)     Arduino Server模組,USB傳輸線,以及Arduino IDE軟體開發環境0023版。

(2)     無線網路基地台。

(3)     WiFly函式庫壓縮檔(請至portal教材下載區下載),將下載的WiFly函式庫壓縮檔解開,放至libraries資料夾底下即可,資料夾位置為「arduino-0023 > libraries」。

(4)     WiFlyDigital程式碼壓縮檔(請至portal教材下載區下載)。

由於Arduino Server中的WiFly Shield已使用Digital Pin 710-13作為傳輸指令的腳位,且通常不使用Digital Pin 01做為控制腳位(原因是當開啟序列埠溝通功能在Serial Monitor中列印訊息時,其Arduino UNO開發板上的Digital Pin 01已預設為序列埠溝通腳位),所以只剩下Digital Pin 2-689供使用者作為數位輸出或輸入使用。若使用者需要更多的腳位作為數位腳位,也能在程式碼中將Arduino開發板上的Analog Pin轉換為Digital Pin供使用者使用,本文將在下一段落中說明如何轉換。

使用者準備好Arduino IDEWiFlyDigital程式碼後,先將7LED燈的正極(長腳)分別插入Digital Pin 2-689,負極則插入麵包板上串起全部的負極,再以一條電線將負極插入Arduino Server上的GND腳位(如圖1)。

1. LED燈插上Arduino UNO

2.       程式說明

使用者將Arduino Server接上電腦,將WiFlyDigital程式碼壓縮檔解壓縮後,資料夾內有主程式WiFlyDigital.pde與副函式Credentials.h兩個檔案。使用者只需在Arduino IDE軟體開發環境中打開WiFlyDigital.pdeCredentials.h即會出現在主程式的右側。首先,使用者點開Credentials.h後,在char ssid[] = "______"char passphrase[] = "______"的雙引號內填入網路名稱(SSID)與登入密碼(Passphrase)。在本文中無線網路基地台預設網路名稱為AutomatedMachineryDesign,登入密碼為3423342323

再回到WiFlyDigital.pde,如圖2所示,void setup()迴圈中的程式碼主要為設定值的初始化與腳位的設定。使用者可在迴圈中找到程式碼pinMode(2, OUTPUT)digitalWrite(2, LOW),這行程式碼主要功能為將Digital Pin 2設定為輸出,且腳位在初始化時為LOW,意即為不發出訊號,以此類推至Pin 9。另外,使用者亦可在迴圈中找到程式碼pinMode(A0, OUTPUT)digitalWrite(A0, LOW),這行程式功能為將Analog Pin A0轉換為Digital Output,且腳位初始設定為LOW,以此類推至Pin A5

2. void setup()迴圈

如圖3所示,在void loop()迴圈中最上層的程式碼主要為等待使用者使用網頁瀏覽器傳送指令至Arduino Server、分析指令為何、且將指令存進Buffer。使用者可在圖3中找到程式碼Serial.println(buffer),這行程式功能為將存在Buffer裡的指令列印在Serial Monitor,供使用者確認Arduino Server是否收到正確的指令。

void loop()迴圈中接著的程式為判斷Buffer裡的指令(如圖4)。使用者可在圖中找到程式碼if (strcmp(buffer, "offLED") == 0),這行程式碼的主要功能為判斷Buffer中的指令是否為offLED,使用者亦可自行定義雙引號中的指令,但在本程式中指令不可超過十個字元。如果判斷為""則跳過這個if迴圈,判斷為""則進入這個if迴圈,在迴圈中可看到程式碼switchLED(1),這行程式為一副函式void switchLED(int current),副函式寫在void loop()迴圈之後,程式碼switchLED(1)括弧中的數字1為對應至副函式void switchLED(int current)迴圈中的case 1(如圖5)。副函式中的case即為設定腳位的HIGHLOW,使用者可自行設定在哪個case要使哪些腳位為HIGH

本程式已預先設定指令offLED對應至case 1,腳位設定全部為LOW。指令LED123對應至case 2,點亮前三顆LED燈;指令LED4567對應至case 3,點亮後四顆LED燈,以此類推。當使用者定義好指令與腳位設定後即可上傳程式碼至Arduino Server

3. void loop()迴圈(讀取使用者傳送的指令)

4. 判斷Buffer中的指令

5. 在副函式中的case裡設定腳位HIGHLOW

3.       實際操作

上傳程式碼與打開Serial Monitor等待數秒後,即會出現IP位址(如圖6)。將電腦連線至無線基地台,接著打開網頁瀏覽器鍵入IP位址,在IP位址後面加上"/"再鍵入使用者要傳輸的指令。請使用者留心,在本程式中要求在鍵入IP位址與指令後須再加上"/"(如圖7)。圖7中鍵入的指令為LED123,則Arduino Server會點亮前三顆LED燈(如圖8)。使用者可自行測試其他指令以點亮其他顆LED燈,如有發生錯誤,請仔細檢查鍵入的指令與對應的case是否正確。

6. 顯現IP位址

7. 在網頁瀏覽器中漸入IP位址與指令

8. 點亮前三顆LED

4.       參考資料

[1]     Arduino官方網站,http://arduino.cc/