View
2.196
Download
7
Category
Preview:
Citation preview
Arduino Yun物聯網應用
Lesson 3
RestfulAPI 控制繼電器
Web 介面
發布 Facebook 動態
本日進度
• Arduino Yún 接上繼電器,並透過Yún REST API來使用網路瀏覽器遙控此繼電器。
• 使用類比電流感測器來測接接在繼電器的設備電力消耗量,並計算電力即時消耗量。
• 將此資料傳送至Google Docs試算表以方便從任何瀏覽器或是手機應用程式來遠端存取。
• 製作簡易網路介面以方便使用電腦、智慧型手機或平板來遙控檯燈。
範例列表
• EX_1:sensor_test
–透過網路瀏覽器下指令來控制繼電器開關。
–顯示感測器值於 Serial Monitor
• EX_2:energy_log
–等待網路指令來開關繼電器。
–將資料定期發送到Google Docs 試算表。
• EX_3:webinterface
–使用網路介面來遙控(電腦或手機皆可)
專題1 [遠距耗能監控裝置]
所需硬體
• Arduino Yun
• 類比電流感測器 Arduino A0
• 繼電器模組 Arduino D8
• 公/母電線接頭
繼電器
• 繼電器是一個電磁開關,當我們需要用小電壓(Arduino開發板的5V)的指令訊號來開關相當大的電壓(110V或230V)時便會派上用場。
• 訊號Arduino D8,GNDArduino GND
類比電流感測器
• 是由印刷電路板、晶片本體與其它元件(電阻和電容等)組成。
• 這個感測器會輸出與測得電流量成正比的類比訊號。
• 訊號Arduino A0,GNDArduino GND
接線完成繼電器為HIGH時,電路接通電流感測器與電線串聯
REST API
• 請到Arduino Yun 的設定頁面最下方,把REST API ACCESS 改為 OPEN。
• 不然會一直要您輸入密碼,而且沒反應…
• 由 sketch 中的 void process(YunClient client)來處理 API call。
如果發生這種狀況
• 請把 Line35 的 server.listenOnLocalhost();
註解掉
測試 D13 with LED
• <網址>/arduino/digital/腳位/1 or 0
讀取數位腳位狀態
也可以類比寫入
• <網址>/arduino/analog/腳位/0~255
讀取類比腳位狀態
• A0 腳位對應的編號為14
• http://playground.arduino.cc/Learning/Pins
設定數位腳位狀態
• <網址>/arduino/mode/input 或 output
EX_1 網路控制繼電器與抓感測器值
/ sensor_test透過網路瀏覽器下指令來控制繼電器
開關。還可把感測器值顯示於 Serial Monitor
修改電壓 230 110 (V)
• float effective_voltage = 230;
getSensorValue()函式移動平均(取100筆)
for (int i = 0; i < nb_measurements; i++) {
sensorValue = analogRead(CURRENT_SENSOR);
avgSensor = avgSensor + float(sensorValue);
}
avgSensor = avgSensor/float(nb_measurements);
return avgSensor //回傳計算結果
功率量測:Line59
• // Perform power measurement
• float sensor_value = getSensorValue();
• Serial.print("Sensor value: ");
• Serial.println(sensor_value);
轉換為電流:Line64
• // Convert to current
• amplitude_current
=(float)(sensor_value-zero_sensor)/1024*5/185*1000000;
• effective_value=amplitude_current/1.414;
//電流振幅÷根號2即為有效電流
轉換為有效功率:Line74
• abs(effective_value*effective_voltage/1000)
• 功率 = 電流 * 電壓 // P = IV
開始測試
• 確認您的Yun與電腦都在同一個無線網路
• 在瀏覽器輸入 xx.local/arduino/digital/8/1
• 透過REST API來呼叫digitalWrite(8,HIGH) 指令。您應該馬上會聽見繼電器切換的聲音,並看見燈光亮起。
• 請用 …/8/0 來關閉檯燈
檢視電流量測值
• 把Arduino Yun 用 USB接回電腦
• 在Serial Monitor 中檢查以下數值
EX_2 傳送資料到Google Doc
/energy_log等待網路指令來開或關上繼電器;將資料依固定時間區間傳送到Google Docs 試算表,方便追蹤能量消耗值。
建立Google Docs試算表
• 試算表名稱任意,本範例為 Power (Line42)
• 欄位: Time、Interval、Power和Energy
公式說明
• Energy = Power x Time
• 能量 = 功率 x 時間
• 在此其實要用到積分,但我們改用梯形公式來近似即可。
• Energy= (PowerMeasurement + NextPowerMeasurement)*TimeInverval/2
• D2 = (B2 + B3)*C2/2
申請Temboo帳號
https://www.temboo.com/
註冊流程
• 在主頁面中,請輸入您的電子郵件地址來註冊並點選 Sign up。
• 建立您的第一個應用程式。請記錄以下資料:應用程式的名稱,還有系統指派給您的金鑰;本書之後都會用到它們。
ACCOUNT/新增一個 Application
• 建立您的第一個應用程式。請記錄以下資料:應用程式的名稱,還有系統指派給您的金鑰;本書之後都會用到它們。
ACTIVITY/流量監控畫面
Temboo Choreo 物件
• 用來與指定web service 互動,本範例為Google Docs
• 另外也可用於 Gmail、Twitter等
在程式中加入Google account
• Line40
• const String GOOGLE_USERNAME = "yourGoogleUsername";
• const String GOOGLE_PASSWORD = "yourGooglePass";
• const String SPREADSHEET_TITLE = "Power";
在TembooAccount.h中修改
• #define TEMBOO_ACCOUNT "temboo_accout_name"
//Temboo 帳號名稱
• #define TEMBOO_APP_KEY_NAME " temboo_app_name "
//Temboo app 名稱
• #define TEMBOO_APP_KEY " temboo_api_key "
//Temboo app 金鑰
檢查是否該量測電流了
• if (power_measurement_cycles > power_measurement_cycles_max)
• float sensor_value = getSensorValue();
計算
• // 轉換為電流
• amplitude_current=(float)(sensor_value-zero_sensor)/1024*5/185*1000000;
• effective_value=amplitude_current/1.414;
• // 計算功率
• float effective_power = abs(effective_value * effective_voltage/1000);
傳送資料,計數器歸零
• runAppendRow(measurements_interval,effective_power);
• power_measurement_cycles = 0;
組合資料並送出
• // Format data – L149• String data = "";• data = data + timeString + "," +
String(measurements_interval) + "," + String(effectiveValue);
• // Set Choreo inputs• AppendRowChoreo.addInput("RowData", data);
• // Run the Choreo• unsigned int returnCode = AppendRowChoreo.run();
檢查Google Docs 有沒有資料進來
EX_3 使用網路介面來遙控
/webinterface
Arduino 程式沿用 EX_2
網路介面包含了那些東西
• Interface.html
• jquery-2.0.3.min.js
• script.js
• style.css
• update_state.php
interface.html
• <script src="jquery-2.0.3.min.js"></script>
• <script src="script.js"></script>
• <link rel="stylesheet" type="text/css" href="style.css">
//匯入 JS 函式庫與css樣式檔
• <input type="button" id="on" class="commandButton" value="On"
• onClick=“relayOn()”/>
//按下ON按鈕呼叫 relayOn() 函式
style.css 中定義版面配置與顏色等
body {
font-family: Helvetica;
}
#relay {
text-align: center;
}
.commandButton {
background-color: orange;
border: 1px solid black;
font-size: 40px;
cursor: pointer;
border-radius: 10px;
width: 300px;
height: 100px;
}
@media screen and (max-device-width:
400px) {
.commandButton {
width: 100%;
height: 200px;
border: 2px solid black;
font-size: 80px;
margin-bottom: 50px;
text-align: center;
background-color:
orange;
}
}
JavaScript 用來溝通 html 與 php
• function relayOn(){
• $.get( "update_state.php", { command: "1"} );
• }
update_state.php 中則是實際動作
<?php
// Create cURL call, make sure to change it with your Yun name
$service_url = 'http://myarduinoyun.local/arduino/digital/8/' . $_GET["command"];
$curl = curl_init($service_url);
// Send cURL to Yun board
curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
$curl_response = curl_exec($curl); //執行curl_close($curl);
?>
自行架設php server
• 安裝 Appserv 之後,把 webinterface 資料夾中所有檔案都放到 C:\AppServ\www 中
• 在 cmd 中使用 ipconfig 指令查找本機 IP,這樣才可以用手機等外部裝置連入。
• 在瀏覽器中輸入 http://localhost/index.php可看到預設畫面
AppServ 預設畫面
操作
• 打開瀏覽器,輸入您的電腦IP或網路名稱,應該會看見專案中的各檔案顯示出來。
• http://localhost/interface.html
• http://YourIP/interface.html
手機端操作
• 如果是智慧型手機,則介面會自動調整螢幕大小
Facebook 發布動態
Temboo 連結 Facebook app
Temboo 網站左側的 Facebook
• Facebook / Publishing/SetStatus
目標:先取得 OAuth Tokens 再取得AccessToken
0. 記得開 IoT Mode / Arduino Yun
• Arduino + 網路擴充板
• Arduino Yun
• 德儀 LaunchPad
1. 先在Facebook Developer建立一個app
2. 設定FB app 的 Callback URL
在Settings 下設定完成
3. 填入App ID 與 App Secret
4. 啟動認證 – 同意外部連結
5. 取得 AccessToken
6. 輸入AccessToken 與 Message
畫面下方會自動產生Arduino code
發布完成!
參考資料
• RESTAPI– http://android.serverbox.ch/?p=1039– https://learn.adafruit.com/a-rest-api-for-arduino-and-the-
cc3000-wifi-chip/overview– http://yehnan.blogspot.tw/2014/04/arduino-
yunbridgeyunserveryunclient.html
• PHP– http://blog.xuite.net/arcloveangel/lovestore/22930165-
Appserv%E6%9E%B6%E7%AB%99%E6%95%99%E5%AD%B8-%E5%AE%8C%E6%95%B4%E5%AE%89%E8%A3%9D%E8%A8%AD%E5%AE%9A%E6%8C%87%E5%8D%97
– http://mark528.pixnet.net/blog/post/7267604-%E5%9C%A8windows%E5%AE%89%E8%A3%9Dphp%E9%96%8B%E7%99%BC%E7%92%B0%E5%A2%83
Recommended