Contenu connexe
Similaire à Arduino Yún使用Http restful api控制io (20)
Plus de 吳錫修 (ShyiShiou Wu) (20)
Arduino Yún使用Http restful api控制io
- 1. 電子工程系應 用 電 子 組
電 腦 遊 戲 設 計 組
使用HTTP RESTful
API控制IO
吳錫修
November 20, 2015
- 2. shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
Bridge函式庫提供AVR及Linux處理器之間的介接
Bridge函式庫提供RESTful web service作業,透過REST樣式之
URL字串命令,來指示操作動作與回應訊息
REST API
2
- 3. shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
範例: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
- 6. shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
使用sswuyun.local/arduino/digital/13/1開啟Arduino Yún D13
LED
測試Bridge範例 3/3
6
直接指定Arduino Yún IP可加快連線速度
- 7. shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
#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
- 8. shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
void loop() {
YunClient client = server.accept(); //取出用戶連線URL字串
if (client) {
process(client); //開始處理,解析URL
client.stop(); //中止連線
}
delay(50); //間隔50ms再重複作業
}
解析Bridge範例程式碼 2/10
8
- 9. shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
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
- 10. shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
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
- 11. shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
else {
value = digitalRead(pin); //執行digitalRead
//在用戶端顯示作業訊息
client.print(F("Pin D"));
client.print(pin);
client.print(F(" reads "));
client.println(value);
}
}
解析Bridge範例程式碼 5/10
11
- 12. shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
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
- 13. shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
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
- 14. shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
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
- 15. shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
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
- 16. shapethefuture
電子工程系
應 用 電 子 組
電 腦 遊 戲 設 計 組
//若不是“input”或“output”,則表示指令錯誤
client.print(F("error: invalid mode "));
client.print(mode);
}
解析Bridge範例程式碼 10/10
16