各位讀者,本系列專欄要介紹如何使用LinkIt ONE 這塊Arduino 相容板來嘗試製作各種穿戴式裝置與物聯網專題,歡迎和我們一起動手做。不過只把LinkIt ONE 當作Arduino 來用的話就太可惜了,因此我們會直接切入它的聯網功能,之後再回頭結合各種電子元件,讓製作各種物聯網專題更輕鬆。
LinkIt ONE 的聯網功能
LinkIt ONE 的聯網功能共有Wi-Fi、GPRS 行動網路、藍牙與GPS 等。本篇先從由Wi-Fi 取得指定網頁字元開始。LinkIt ONE 的Wi-Fi 是基於MT5931 這顆晶片,加上盒裝內附的天線會有比較好的通訊效果(不安裝也可以)。另ㄧ 方面,Wi-Fi 會有認證問題,請勿使用像是學校這類型的兩階段認證系統。或者如果您的手機門號是無限上網的話,也可以使用您的手機做為LinkIt ONE 的專屬網路熱點。準備硬體時, 請將Wi-Fi / 藍牙天線( 圖1) 接到 LinkIt ONE 背面的Wi-Fi 接點。雖然晶片是整合在板子上,所以未連接也可以進行通訊,但連接後可以得到比較好的通訊效果。板子上有標示天線要接在哪,在這裡請注意別接錯了(圖2)。
所需零件:
• LinkIt ONE 開發板
• Wi-Fi/藍牙天線
擷取網頁字元
本範例可以擷取指定網頁的字元,您可以以此範例為基礎,完成各種簡易的網路爬蟲程式。執行畫面如圖3。
本程式的流程如下: 首先連上指定的Wi-Fi AP , 在此需輸入正確的AP 名稱、密碼與認證方式。成功之後會對指定網站(本範例使用www.cavedu.com , 您可以自行更改為其他的網站) 發送一個HTTP GET 需求,也就是程式的第27 ∼ 30 列。接著就會將網頁字元一個一個讀回來,並顯示於Serial Monitor 中。
接著介紹程式中幾個比較重要的指令:
- #include <LWiFi.h> / #include<LWiFiClient.h>匯入Wi-Fi所需的函式庫。
- #define SITE_URL “www.cavedu.com”要取得字元的網站。
- #define WIFI_AP “Name_of_your_AP”要連接的無線網路名稱。
- #define WIFI_PWD “Password_of_your_AP”無線網路密碼。
- LWiFiClient c;初始化一個名為 client的LWiFiClient物件,之後會用它來連上網站並取得網站內容。
- LWiFi.begin();開始Wi-Fi相關作業。
- 連上無線網路點:使用LWiFi.connectWEP(WIFI_AP,WIFI_PASSWORD)指令來連上指定無線網路,您可以看到該指令中必須填入WIFI_AP 與WIFI_PASSWORD。如果連線成功就會開始取得網頁字元,反之失敗的話就會顯示錯誤訊息「Fail to connect AP!」。i f ( LWiFi . connectWEP (WIFI_AP,WIFI_PASSWORD)<0){
Serial.println(“Fail to connect AP!”);return;
} - 檢查是否連上指定網站:使用c.connect(SITE_URL, 80))指令來連線至指定網站(本範例為www.cavedu.com)與預設的http埠號80 。如果連線失敗, 就會顯示錯誤訊息「Fail to connectwebsite!」。if(!c.connect(SITE_URL, 80)){Serial.println(“Fail toconnect website!”);return;
}
- 發送HTTP指令與讀取網頁字元
透過client.println()指令對指定網站發送GET指令, 並進到loop()函式中不斷讀取網頁字元,再顯示於Serial Monitor中。做到這裡就算是完成了。執行程式時, 會在Serial Monitor中看到一個個字元飛快地跳出來。當
您有移動需求, 又沒辦法幫 LinkIt ONE 準備一張可行動上網的SIM卡的話,可以讓LinkIt ONE 藉由智慧型
手機的無線網路熱點功能來上網。完整程式碼請參考本文末。
小訣竅:活用Serial Monitor
在上述步驟7 與8 中,您有看到我們運用Serial Monitor 來顯示錯誤訊息嗎?這是一個非常重要的技能,因為在沒有外接顯示或發音裝置的情況下,您幾乎無法從LinkIt ONE 看出發生了什麼事情。當程式愈來愈大的時候, 我們需要知道「錯在哪裡」, 因此如果您看到的錯誤訊息是「Fail to connect AP!」,代表現在板子完全無法連上無線網路存取點,必須檢查AP名稱與密碼有無輸入錯誤。
換而言之, 如果錯誤訊息是「Fail to connect website!」的話, 就必須檢查網站名稱是否正確。
如果希望讓LinkIt ONE 變成一臺獨立裝置,就不會將LinkIt ONE 連接上電腦。在這樣的情況下想要得知板子狀態的話,您可以考慮加裝2×16的LCD 模組,就能看到相關的錯誤訊息。簡陋一點的話,可使用LED 或是蜂鳴器,藉由燈號或聲響來得知開發板的狀態。
#include <LWiFi.h> #include <LWiFiClient.h> #define SITE_URL "www.mediatek.com" #define WIFI_AP "Name_of_your_AP" // 請換成您的Wi-Fi AP 名稱 #define WIFI_PWD "Password_of_your_AP" // 請換成您的Wi-Fi 密碼 LWiFiClient c; void setup() { Serial.begin(9600); LWiFi.begin(); Serial.println(); Serial.print("Connecting to AP..."); if(LWiFi.connectWEP(WIFI_AP, WIFI_PASSWORD) < 0) { Serial.println("FAIL!"); return; } Serial.println("ok"); Serial.print("Connecting to site..."); if(!c.connect(SITE_URL, 80)) { Serial.println("FAIL!"); return; } Serial.println("ok"); Serial.println("send HTTP GET request"); c.println("GET / HTTP/1.1"); c.println("Host: " SITE_URL); c.println("Connection: close"); c.println(); } void loop() { int v; while(c.available()) { v = c.read(); // 開始讀取網頁 if(v < 0) break; // 讀取完畢後跳出此段 Serial.print((char)v); // 將讀取到的字元顯示於Serial Monitor } delay(100); }
參考資料:
- MediaTek Labs
- Seeed Studio Wiki
- CAVEDU LinkIt 教學
- http://blog.cavedu.com 搜尋 linkit
文章原文刊載於《ROBOCON》國際中文版2015/7月號