2014/04/13

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

Bridge類別算是Bridge程式庫裡其他類別的苦力,當其他類別需要在Yún的Arduino端與Linux端之間溝通時,其實都是透過Bridge類別來完成。

Bridge類別提供了put與get方法(另外還有transfer方法),可讓我們在Linux端的記憶體裡存放鍵值配對,這一篇試著玩玩看。

存放的地方是AR9331的RAM,所以若Linux端的Bridge軟體部分重置的話,東西就會消失,譬如拔插電源、重置Linux處理器、透過WiFi或Ethernet上傳草稿碼,都會造成重置Linux端的Bridge軟體;但若重置ATmega32U4並不影響。

範例程式如下,會先存放四個鍵值配對,然後讀取序列埠,根據讀到的鍵取回相對的值。

#include <Bridge.h>

void setup() {
  Serial.begin(19200);
  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()){
    char c = Serial.read();
    char k[2];
    k[0] = c;
    k[1] = '\0';
    char buf[10];
    // 參數是鍵、存放值的緩衝區,緩衝區的大小
    Bridge.get(k, buf, 10); // 傳入鍵、取回值
    Serial.println(buf);
  }
}

執行結果如下,輸入a、b、c、d可取回相對應的鍵,並輸出序列埠監控視窗。
嗯,這有什麼用呢?如果有很大的暫時性資料,或許可透過這兩個Bridge的方法存放在Linux端吧,但平時應該不太需要。


參考資料:

5 comments:

  1. Anonymous26/9/14 14:28

    您好,最近剛摸 Arduino Yun,在官網找到了Http Client的範例
    但是code裡是用get取值,感覺挺不安全的,使用post會比較麻煩嗎?

    ReplyDelete
    Replies
    1. 不懂你的意思。
      HttpClient(http://arduino.cc/en/Reference/YunHttpClientConstructor)與YunClient(http://arduino.cc/en/Reference/YunClientConstructor),都沒有post這個API吧。

      Delete
  2. 老師您好,學生想詢問
    char k[2](2代表是甚麼值呢)
    Bridge.get(k, buf, 10);(10代表是甚麼值呢?)

    ReplyDelete
    Replies
    1. 代表k陣列的空間是兩個char。

      10代表buf的大小是10個char,char等於一個byte。

      Delete
    2. 謝謝老師給予協助,學生受益良多!

      Delete