2016/04/10

Arduino Yún:Bridge程式庫入門之Bridge類別的put與get方法

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,首先關閉密碼保護。
透過HTTP請求來讀寫鍵值配對,請開啟瀏覽器,輸入網址「http://arduino.local/data/get/a」的話,可取得鍵a的值,會以JSON格式回傳,如下:
{"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裡,屬於暫時性資料,可用來提供常常更新、但不需要全部儲存的資料吧。


參考資料:

No comments:

Post a Comment