Virtual Pin

[Ngày cập nhật: 24/12/24]

1. Virtual pin là gì

Virtual pin hay pin ảo là tính năng dùng để giao tiếp dữ liệu giữa E-Ra AppGateway, để người dùng có thể tùy biến xây dựng ứng dụng của mình với E-Ra.

2. Virtual pin là gi:

Để sử dụng Virtual pin giao tiếp giữa App và gateway ta dùng 2 hàm sau:

2.1 Để gửi dữ liệu từ gateway lên server:

ERa.virtualWrite(vPin, value);

Trong đó:

  • vPin: tên pin ảo V0, V1...

  • Value: giá trị muốn gửi lên app.

2.2. Để nhận dữ liệu từ server về gateway:

ERA_WRITE(vPin);

Với 2 tham số truyền vào:

  • pin: số pin

  • param: dữ liệu là server truyền xuống gateway

Lưu ý: hiện tại E-Ra chỉ hỗ trợ dữ liệu dạng số là integer, float, double

Để lấy dữ liệu từ server ta dùng như sau:

Với kiểu integer: int value = param.getInt() hoặc (int)param

Với kiểu float: float value = param.getFloat() hoặc (float)param

Với kiểu double: double value = param.getDouble() hoặc (double)param

4. Ví dụ

Dùng pin V0 để nhận lệnh điều khiển đèn led build in trên board ESP32.

Dùng pin V1 để gửi thời gian chạy (uptime) của gateway lên server.

Dùng pin V2 để gửi nhiệt độ chip ESP32 lên server.

Chi tiết API Virtual pin vui lòng truy cập vào trang wiki tại đây

1. Nhận chuỗi từ ERa

Để lấy chuỗi từ ERa gửi xuống cần dùng hàm sau:

param.getString();

Bên trong hàm callback:

ERA_WRITE(vPin) {
}

Ví dụ (Nhận chuỗi bằng V0):

ERA_WRITE(V0) {
    // Kiểm tra có phải chuỗi hay không
    if (!param.isString()) {
        return;
    }

    // 1. Lấy chuỗi C-style strings
    const char* cstr = param.getString();
    // 2. Lấy chuỗi bằng ERaString
    ERaString estr = param.getString();
    // 3. Lấy chuỗi bằng Arduino String
    String astr = param.getString();
    // 4. Lấy chuỗi bằng std string
    string sstr = param.getString();

    // Dùng 1 trong 4 cách trên để lấy dữ liệu chuỗi
    // Xử lý chuỗi (ví dụ với cách 2)
    if (estr == "on") {
        // Bật LED tại GPIO 2
        digitalWrite(2, HIGH);
    }
    else if (estr == "off") {
        // Tắt LED tại GPIO 2
        digitalWrite(2, LOW);
    }
}

Ngoài ra nếu chuỗi là dạng JSON, có thể dùng hàm sau để parse dữ liệu:

// Hàm này sẽ trả về kiểu dữ liệu ERaJson
param.toJSON();

Ví dụ (Khi nhận chuỗi là dạng JSON):

ERA_WRITE(V0) {
    // Kiểm tra có phải chuỗi hay không
    if (!param.isString()) {
        return;
    }

    // Parse chuỗi sang JSON
    ERaJson ejs = param.toJSON();
    // Kiểm tra có phải JSON hay không
    if (ejs == nullptr) {
        return;
    }

    // {"x":0, "y":0, "msg":"Hi, I'm ERa"}
    // Ví dụ dùng chuỗi JSON trên để in message lên LCD 16x2
    // Lấy giá trị từ key "x" JSON
    int x = ejs["x"].getInt();
    // Lấy giá trị từ key "y" JSON
    int y = ejs["y"].getInt();
    // Lấy giá trị từ key "msg" JSON
    const char* msg = ejs["msg"].getString();

    // Xóa LCD
    lcd.clear();
    // Đưa con trỏ LCD đến tọa độ x, y
    lcd.setCursor(x, y);
    // In message lên LCD
    lcd.print(msg);
}

2. Gửi chuỗi lên ERa

Đồi với kiểu dữ liệu C-style strings (char* và const char*)ERaString có thể gửi trực tiếp:

Ví dụ:

// Gửi trực tiếp chuỗi lên ERa
ERa.virtualWrite(V0, "Hi, I'm ERa");

// Gửi chuỗi lên ERa bằng C-style strings (const char*)
const char* value = "Hi, I'm ERa";
ERa.virtualWrite(V0, value);

// Gửi chuỗi lên ERa bằng ERaString
ERaString estr = "Hi, I'm ERa";
ERa.virtualWrite(V0, estr);

Đối với kiểu dữ liệu Arduino Stringstd string cần chuyển sang C-style strings bằng hàm c_str() trước khi gửi lên ERa.

Ví dụ:

// Gửi chuỗi lên ERa bằng Arduino String
String astr = "Hi, I'm ERa";
ERa.virtualWrite(V0, astr.c_str());

// Gửi chuỗi lên ERa bằng std string
string sstr = "Hi, I'm ERa";
ERa.virtualWrite(V0, sstr.c_str());

3. Thư viện bỗ trợ cho Terminal Box Widget

Thêm thư viện bằng dòng include sau:

#include <ERa.hpp>
#include <Widgets/ERaWidgets.hpp>

Khai báo Terminal Box như sau:

// Tạo biến ERaString để lưu chuỗi nhận được khi gửi từ ERa
ERaString estr;
// Tạo terminal box trong đó:
// V1 là from datastream
// V2 là to datastream
ERaWidgetTerminalBox terminal(estr, V1, V2);

Tạo hàm callback khi nhận được chuỗi gửi từ ERa:

// Hàm này sẽ được gọi khi nhận được chuỗi từ ERa gửi xuống
void terminalCallback() {
    // Ví dụ khi từ ERa gửi chuỗi "Hi"
    // Chip sẽ phản hồi lại "Hello! Thank you for using ERa."

    // Kiểm tra nếu nhận được chuỗi "Hi"
    if (estr == "Hi") {
        // Đưa chuỗi "Hello! " vào buffer gửi
        terminal.print("Hello! ");
    }
    // Đưa chuỗi "Thank you for using ERa." vào buffer gửi
    terminal.print("Thank you for using ERa.");
    // Gửi chuỗi trong buffer lên ERa
    terminal.flush();
}

Khởi tạo Terminal bằngdòng code sau:

// Khởi tạo Terminal box widget với hàm callback: terminalCallback
terminal.begin(terminalCallback); 
// Đặt hàm trên trước dòng
// ERa.begin(ssid, pass);

Last updated

Was this helpful?