arduino yún使用http restful api控制io

16
電子工程系 電腦遊戲設計組 使用HTTP RESTful API控制IO 吳錫修 November 20, 2015

Upload: -

Post on 14-Jan-2017

634 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Arduino Yún使用Http restful api控制io

電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組

使用HTTP RESTfulAPI控制IO

吳錫修November 20, 2015

Page 2: Arduino Yún使用Http restful api控制io

shap

e th

e fu

ture

電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組

Bridge函式庫提供AVR及Linux處理器之間的介接

Bridge函式庫提供RESTful web service作業,透過REST樣式之URL字串命令,來指示操作動作與回應訊息

REST API

2

Page 3: Arduino Yún使用Http restful api控制io

shap

e th

e fu

ture

電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組

範例:File/Examples/Bridge/Bridge

展示如何透過HTTP REST calls方式來存取Arduino Yún控制板之IO;我們可以參照Bridge程式,使用REST設計風格來創建自己的Web API

Possible commands created in this shetch: "/arduino/digital/13" -> digitalRead(13)

"/arduino/digital/13/1" -> digitalWrite(13, HIGH)

"/arduino/analog/2/123" -> analogWrite(2, 123)

"/arduino/analog/2" -> analogRead(2)

"/arduino/mode/13/input" -> pinMode(13, INPUT)

"/arduino/mode/13/output" -> pinMode(13, OUTPUT)

線上解說http://www.arduino.cc/en/Tutorial/Bridge

Bridge範例

3

Page 4: Arduino Yún使用Http restful api控制io

shap

e th

e fu

ture

電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組

登入Arduino Yún,確認網路連線正常

測試Bridge範例 1/3

4

Page 5: Arduino Yún使用Http restful api控制io

shap

e th

e fu

ture

電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組

使用sswuyun.local/arduino/digital/13/0關閉Arduino Yún D13 LED

測試Bridge範例 2/3

5

Page 6: Arduino Yún使用Http restful api控制io

shap

e th

e fu

ture

電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組

使用sswuyun.local/arduino/digital/13/1開啟Arduino Yún D13 LED

測試Bridge範例 3/3

6直接指定Arduino Yún IP可加快連線速度

Page 7: Arduino Yún使用Http restful api控制io

shap

e th

e fu

ture

電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組

#include <Bridge.h>

#include <YunServer.h>

#include <YunClient.h>

YunServer server; //建立YunServer物件

void setup() {

pinMode(13, OUTPUT);

digitalWrite(13, LOW);

Bridge.begin(); //啟動Bridge,約需2秒時間

digitalWrite(13, HIGH); //點亮LED表示完成Bridge啟動作業

server.listenOnLocalhost();//若要從internet連接,須註解此行

server.begin(); //啟動YunServer

}

解析Bridge範例程式碼 1/10

7

Page 8: Arduino Yún使用Http restful api控制io

shap

e th

e fu

ture

電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組

void loop() {

YunClient client = server.accept(); //取出用戶連線URL字串

if (client) {

process(client); //開始處理,解析URL

client.stop(); //中止連線

}

delay(50); //間隔50ms再重複作業

}

解析Bridge範例程式碼 2/10

8

Page 9: Arduino Yún使用Http restful api控制io

shap

e th

e fu

ture

電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組

void process(YunClient client) { //處理REST CALL

String command = client.readStringUntil(‘/’); //解析第⼀層

if (command == "digital") {

digitalCommand(client); //處理數位IO指令

}

if (command == "analog") {

analogCommand(client); //處理類比IO指令

}

if (command == "mode") {

modeCommand(client); //處理接腳IO設定指令

}

}

解析Bridge範例程式碼 3/10

9

Page 10: Arduino Yún使用Http restful api控制io

shap

e th

e fu

ture

電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組

void digitalCommand(YunClient client) {

int pin, value;

pin = client.parseInt(); //讀取腳位編號

//若下⼀個字元為'/',表示URL格式如同"/digital/13/1"

if (client.read() == '/') {

value = client.parseInt(); //讀取設定值

digitalWrite(pin, value); //執行digitalWrite

//在用戶端顯示作業訊息

client.print(F("Pin D"));

client.print(pin);

client.print(F(" set to "));

client.println(value);

}

解析Bridge範例程式碼 4/10

10

Page 11: Arduino Yún使用Http restful api控制io

shap

e th

e fu

ture

電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組

else {

value = digitalRead(pin); //執行digitalRead

//在用戶端顯示作業訊息

client.print(F("Pin D"));

client.print(pin);

client.print(F(" reads "));

client.println(value);

}

}

解析Bridge範例程式碼 5/10

11

Page 12: Arduino Yún使用Http restful api控制io

shap

e th

e fu

ture

電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組

void analogCommand(YunClient client) {

int pin, value;

pin = client.parseInt(); //讀取腳位編號

//若下⼀個字元為'/',表示URL格式如同"/analog/5/120"

if (client.read() == '/') {

value = client.parseInt(); //讀取設定值

analogWrite(pin, value); //執行analogWrite

//在用戶端顯示作業訊息

client.print(F("Pin D"));

client.print(pin);

client.print(F(" set to analog "));

client.println(value);

}

解析Bridge範例程式碼 6/10

12

Page 13: Arduino Yún使用Http restful api控制io

shap

e th

e fu

ture

電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組

else {

value = analogRead(pin); //執行analogRead

//在用戶端顯示作業訊息

client.print(F("Pin A"));

client.print(pin);

client.print(F(" reads analog "));

client.println(value);

}

}

解析Bridge範例程式碼 7/10

13

Page 14: Arduino Yún使用Http restful api控制io

shap

e th

e fu

ture

電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組

void modeCommand(YunClient client) {

int pin;

pin = client.parseInt(); //讀取腳位編號

//若下⼀個字元不是‘/’,表示URL不符合"/mode/13/input"格式

if (client.read() != '/') {

client.println(F("error"));

return;

}

String mode = client.readStringUntil(‘\r’); //讀取腳位設定

if (mode == "input") {

pinMode(pin, INPUT); //執行pinMode

//在用戶端顯示作業訊息

解析Bridge範例程式碼 8/10

14

Page 15: Arduino Yún使用Http restful api控制io

shap

e th

e fu

ture

電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組

client.print(F("Pin D"));

client.print(pin);

client.print(F(" configured as INPUT!"));

return;

}

if (mode == "output") {

pinMode(pin, OUTPUT); //執行pinMode

//在用戶端顯示作業訊息

client.print(F("Pin D"));

client.print(pin);

client.print(F(" configured as OUTPUT!"));

return;

}

解析Bridge範例程式碼 9/10

15

Page 16: Arduino Yún使用Http restful api控制io

shap

e th

e fu

ture

電子工程系應 用 電 子 組電 腦 遊 戲 設 計 組

//若不是“input”或“output”,則表示指令錯誤

client.print(F("error: invalid mode "));

client.print(mode);

}

解析Bridge範例程式碼 10/10

16