Bridge類別算是Bridge程式庫裡其他類別的苦力,當其他程式碼需要在Yún的Arduino端(ATmega32U4)與Linux端(AR9331、OpenWrt-Yun)之間溝通時,其實都是透過Bridge類別來完成。
Bridge類別提供了put與get方法(另外還有transfer方法),可讓我們在Linux端的記憶體裡存放鍵值配對,存放地方是AR9331的RAM,所以若Linux端的Bridge軟體部分重置的話,東西就會消失,譬如拔插電源、重置Linux處理器、透過WiFi或Ethernet上傳草稿碼,都會造成重置Linux端的Bridge軟體;但若重置ATmega32U4並不影響。
範例程式如下,會先存放四個鍵值配對,然後讀取序列埠,根據讀到的鍵取回相對的值。
#include <Bridge.h>
void setup() {
Serial.begin(57600);
while(!Serial){
}
Serial.print("Starting Bridge...");
Bridge.begin(); // 啟動Bridge,阻斷式呼叫
Serial.println("done.");
// 存放東西,參數是鍵與值,都是一般C字串型別
Bridge.put("a", "101");
Bridge.put("b", "abcd");
Bridge.put("c", "!@#$%");
Bridge.put("d", "0.77");
}
void loop() {
if(Serial.available() > 0){
char x = Serial.read();
if('a' <= x && x <= 'z'){
char key[2];
key[0] = x;
key[1] = '\0';
char val[10] = "\0";
// 參數是鍵、存放值的緩衝區,緩衝區的大小
unsigned int len = Bridge.get(key, val, 10); // 傳入鍵、取回值
Serial.print("Key is ");
Serial.print(key);
Serial.print(" , value is ");
Serial.println(val);
}
}
}
執行結果如下,輸入a、b、c、d可取回相對應的鍵,並輸出序列埠監控視窗。
此外,Yun預設已有一套存取這份鍵值空間的REST API,首先關閉密碼保護。
{"value":"101","key":"a","response":"get"}
若是網址「http://arduino.local/data/put/e/hello」,則可寫入鍵值配對,成功的話瀏覽器會顯示:
{"value":"hello","key":"e","response":"put"}
然後在序列埠監控視窗輸入e,可看到:
Key is e , value is hello
語法如下,請把arduino.local換成你的Yun的IP位址;不要忘記網址中的「/data」部分;HTTP回應皆為JSON格式:
- http://arduino.local/data/get/KEY:讀取,取得鍵為KEY的值。
- http://arduino.local/data/get:讀取,取得所有鍵值配對。
- http://arduino.local/data/put/KEY/VALUE:寫入,新增鍵為KEY、值為VALUE的配對。
- http://arduino.local/data/delete/KEY:刪除鍵為KEY的鍵值配對。
嗯,這有什麼用呢?因為放在RAM裡,屬於暫時性資料,可用來提供常常更新、但不需要全部儲存的資料吧。
參考資料:
- Arduino官方文件,Bridge程式庫、Bridge類別。
- Arduino - ArduinoYun。
No comments:
Post a Comment