教你如何用 WINDOWS PHONE APP 來連結控制 AZURE 與 EDISON

評論
評論

於 2016 年 1 月 6 日由 Avirup Basu 提交

簡介

此文章將引領您透過 Edison 與 Windows azure 連結, 來執行控制的相關功能。在此範例中將會呈現與 Edison 面板上 LED 燈的開啟與關閉狀態與 Arduino breakout 面板的連結配對。

讓我們來了解實際的運作情形。 Azure 行動服務將做為 Edison 與控制器之間連接的橋樑 ( Windows 手機應用程式會在這使用)。 Edison 會從行動服務端判讀其所傳遞數據數值。而 Windows 手機應用程式將會更新相關數,所以我們必須依照其數值來變更在 Edison 的程式碼。

首要條件

假設判讀器在 Windows 手機應用程式開發有基本的知識, 而且能利用 azure 行動服務與相關應用程式連結。若是您不知如何建立一個屬於您自己的應用程式後台, 可以透過其連結來了解。

配備需求 (硬體)

Intel Edison 搭配 Arduino breakout 面板
LED 燈

軟體需求

Visual studio
Arduino IDE

服務需求

1: Azure 行動服務

首先讓我們先建立 Azure 行動服務。有許多關於建立 Azure 行動服務的文章。請依照其連結來建立相關的 Azure 行動服務, 其包含 single table, 並將其命名為 controltable。而此 table 當中在欄位的名稱為 “status” 而另一個名稱為 “name” 。欄位狀態的數值可以為 1 或 0 。而 name 的數值可以在 Edison / Arduino 當中設定。

Screenshot (366)

現在我們將開發能新增/修改 windows 手機應用程式的數值。下面所呈現的圖片為 Azure sql table 的擷取畫面。請注意其數值屬性與“裝置”無關。若是在有其必要的情況, 您可將此屬性排除。

在下一章節將處理關於 Windows 手機應用程式開發的議題。

Windows 手機應用程式

此應用程式主要是由開啟與關閉兩種按鍵所構成。應用程式的擷取畫面如下所示:

wp_ss_20160103_0001_0

您可忽略登出按鍵,事實上我嘗試新增些其他功能。而現在這些按鍵將會具有什麼功能?這將會更新“status”數值的屬性。當我們按下按鍵時, “status”的數值將會顯示為 1,不然它會顯示為 0 。

在這會出現一些問題。若是在沒有建立任何東西時,會做什麼更新?針對這個情況,我們將佈署 2 次應用程式。首先我們將建立起 table 並指定一些原始設定數值。而在下次我們會針對之前所更新的數值來做更新。

現在我們的應用程式已經設定完成。可以測試應用程式並檢視 “status” 的數值是否已經更新。當完成更新後, 就可以開始執行, 且完成應用程式的設定。在下一個部份, 我們會著重在 Edison 程式碼的編輯。

Edison 程式碼

Screenshot (367)

讓我們來了解 Edison。在開始將程式碼應用於 Edison 之前, 請依照之前所提到的步驟來設定您的 Edison。當連結 Edison 之後, 請注意您的相對應編號。然後開啟 Arduino IDE 並從面板選擇 Intel Edison。若是您無法找到 Intel Edison 選項. 您需要從 boards manager 來下載相關的檔案。

當您開啟 Arduino IDE 後,會看到兩個之前所提到的函數。 Void setup() 與 void loop() 。而 Edison 有內建 Wi-Fi 功能。我們可以透過 Wi-Fi 來與網路連結。而我們須做的動作就是將程式庫含蓋在 Wi-Fi 當中。請到 Sketch->include library->Wi-Fi 來設定。完成設定後, 讓我們將此程式碼新增並與 Wi-Fi 連結。

螢幕截圖 2016-04-07 18.29.53

上面的程式碼主要是透過 Wi-Fi 將 Edison 與網路連結。而我們將 PIN 13 設定為輸出模式,而目前為關閉狀態。我們利用 IDE 序列監控來監控整個程序狀態。現在,讓我們來了解 loop() 函數。透過 http 並藉由 Azure 來檢索相關數據。

螢幕截圖 2016-04-07 18.32.56

這些函數能從 Azure table 來檢索其數據。但在深入了解這方法之前, 我們需要新增通用變數將 Edison 與 azure table 連結。請新增通用變數。

螢幕截圖 2016-04-07 18.33.49

這個應用程式的指令能在 Azure 平台的管理指令按鍵中找到。我們將使用 void loop() 函數來編寫程式碼。

螢幕截圖 2016-04-07 18.35.09

我們執行 HTTP 並召喚之前在 table 所指定的名稱 GET , 而伺服器的名稱與程式代碼能正確的檢索相關數據。然後指定所需檢索的數據模式並將其設定為 JSON 。讓我們來透過 wait_response() 程式碼來編寫。

螢幕截圖 2016-04-07 18.35.52

然後我們來讀取所檢索到的數據。因為它是以 JSON 模式, 所以我們必須分析 JSON 字串來得到所需數值。以下為其字串範例:

{"id":"2492D996-C471-48F0-B3C9-F33E3B37477F","status":"0″,"name":"arduino"}

最具效益的程式庫是 ArduinoJson 。且有強大執行分析的能力。但是 JSON 字串附含在'[‘ 與 ‘]' 當中。而必須將這些符號在程式庫當中移除才能執行其功能。所以首先您必須將程式碼包含在您的程式碼當中,並新增以下通用變數。

螢幕截圖 2016-04-07 18.36.33

然後編寫 read_response method() 程式碼。

螢幕截圖 2016-04-07 18.37.21

上面的程式碼是用來讀取 response 而 parse method 是用來解碼字串。 parse() method 的功能執行如下所示, 我們將以 Parse() method 來變更 PIN13 的狀態。

螢幕截圖 2016-04-07 18.37.54

在上面的程式碼中, f 為儲存數值的屬性狀態。然後我們檢視 f 數值並設定 PIN 在 HIGH 或 LOW 的狀態。

關於 ArduinoJson 程式庫相關詳細的文件能參照此連結。然而, 在程式庫中仍有一些需要克服的問題。後續會再來討論。現在我們將編寫 remaining method 程式碼。

螢幕截圖 2016-04-07 18.38.59

您將會看到當在編譯程式碼時, 常會遇到的錯誤問題。而這些錯誤是必須被移除的。在移除之前, 必須先了解相關問題。檔案 WString.h 當中遺失了一些程式碼。能在這裡發現其差異性。而您必須在這邊更新檔案。

C:\Users\Username\AppData\Roaming\Arduino15\packages\Intel\hardware\i686\1.6.2+1.0\cores\arduino\WString.h

更新過後,就能解決相關錯誤的問題。在完成程式碼編譯後,將其燒入到您的 Edison 。當程式碼燒入到 Edison 時, 將 LED 較長腳的部分與 PIN13 連接, 而較短腳的部分接地。而 233 歐姆電阻與 LED 較長腳部分連結。 Windows Phone 透過 Windows Azure 來控制 Edison 已就緒。當 Edison 執行如以下所示時,擷取 serial window 的螢幕畫面。

起始階段為 Edison 與 Wi-Fi 網路連結。

Screenshot (373)

接下來是 Edison 與 Azure 行動服務連結。在連結之後,能取得經由 JSON 程式庫解碼 JSON 的數據與結果。解碼的結果主要是對應 PIN13 在 Edison 的狀態。

Screenshot (374)

結論

我們已經在本文學習到如何透過 Azure 行動服務來控制您的 Edison 。其中以 Mobile 服務作為橋梁。本文並沒有關於 Windows phone 相關的開發,但可以透過連結來提供您所需了解的訊息。而完整的 Edison 程式碼以文字檔案上傳。也可以在這邊來連結觀看 Youtube 影片。

更多精選文章.....

 

歡迎加入「Inside」Line 官方帳號,關注最新創業、科技、網路、工作訊息

好友人數

精選熱門好工作

賣家關係維護專員

樂購蝦皮股份有限公司
臺北市.台灣

獎勵 NT$20,000

行銷企劃專員(海外市場/電商)

VeryBuy非常勸敗
臺北市.台灣

獎勵 NT$20,000

Web UI視覺設計師

酷遊天國際旅行社股份有限公司
臺北市.台灣

獎勵 NT$20,000

評論