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

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

Jan 14, 2017

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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