分享本文至 E-mail 信箱
學術引用格式
MLA
APA
EndNote(.enw)

穿戴式裝置與物聯網應用:LinkIt ONE 的Wi-Fi 無線網路功能

2015/08/14 | | 標籤:

文/CAVEDU教育團隊

各位讀者,本系列專欄要介紹如何使用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)。

圖1

圖1 Wi-Fi /藍牙天線。

圖2

圖2 在LinkIt ONE 上安裝Wi-Fi 天線。

所需零件:
• LinkIt ONE 開發板
• Wi-Fi/藍牙天線

擷取網頁字元

本範例可以擷取指定網頁的字元,您可以以此範例為基礎,完成各種簡易的網路爬蟲程式。執行畫面如圖3。

圖3

圖3 擷取網頁字元於Serial Monitor 。

本程式的流程如下: 首先連上指定的Wi-Fi AP , 在此需輸入正確的AP 名稱、密碼與認證方式。成功之後會對指定網站(本範例使用www.cavedu.com , 您可以自行更改為其他的網站) 發送一個HTTP GET 需求,也就是程式的第27 ∼ 30 列。接著就會將網頁字元一個一個讀回來,並顯示於Serial Monitor 中。

接著介紹程式中幾個比較重要的指令:

  1. #include <LWiFi.h> / #include<LWiFiClient.h>匯入Wi-Fi所需的函式庫。
  2. #define SITE_URL “www.cavedu.com"要取得字元的網站。
  3. #define WIFI_AP “Name_of_your_AP"要連接的無線網路名稱。
  4. #define WIFI_PWD “Password_of_your_AP"無線網路密碼。
  5. LWiFiClient c;初始化一個名為 client的LWiFiClient物件,之後會用它來連上網站並取得網站內容。
  6. LWiFi.begin();開始Wi-Fi相關作業。
  7. 連上無線網路點:使用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;
    }
  8. 檢查是否連上指定網站:使用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;

    }

  9. 發送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);
}

 

參考資料:

文章原文刊載於《ROBOCON》國際中文版2015/7月號

想要耳聽分享,嘴吃熱炒、手領好書、同時認識一大群愛科學的朋友嗎?

「生猛科學」的特色是:

  1. 只在台灣南部舉辦(精準一點的定義是雲林以南,一直到屏東)。
  2. 只找當地最生猛的科學人擔任講者。
  3. 只談在地的科學,或是在地人最關注的科學。
  4. 只在最生猛的生猛熱炒舉辦。

我們希望透過「生猛科學」系列活動,更認識在地科學社群,並且讓在地的科學除了讓更多在地人知道以外,也透過PanSci的網絡傳得更遠。好久沒辦了想要見見最生猛的你,限量 25 個名額!報名還可獲得科普好書一本,原價800元,現在只要600元!

[報名 10/1 (日)生猛科學@高雄]

關於作者

馥林文化是由泰電電業股份有限公司於2002年成立的出版部門,有鑒於21世紀將是數位、科技、人文融合互動的世代,馥林亦出版科技機械類雜誌及相關書籍。馥林文化出版書籍http://www.fullon.com.tw/