1

Các Arduino REST APIlà một cơ chế để trao đổi dữ liệu giữa Arduino và các hệ thống bên ngoài khác. Khi khai thác API Arduino REST, ứng dụng khách sẽ đọc hoặc gửi thông tin đến bảng Arduino. Trường hợp sử dụng điển hình cho API Arduino REST là một hệ thống hoặc ứng dụng bên ngoài lấy các giá trị cảm biến. API có thể được sử dụng trong các dự án IoT khi các hệ thống và bảng khác nhau được kết nối với nhau và trao đổi thông tin. Ngay cả các nền tảng đám mây IoT cũng sử dụng cơ chế này. Nó rất hữu ích khi một ứng dụng bên ngoài (máy khách) gửi yêu cầu và Arduino trả lời với một số dữ liệu. API hoạt động trên một giao thức HTTP để các yêu cầu này được đồng bộ. Trong một ứng dụng IoT, có các giao thức khác hiệu quả hơn nhiều so với HTTP (như MQTT). Arduino REST API qua HTTP đóng vai trò quan trọng trong kịch bản máy khách-máy chủ trong đó Arduino hoạt động như một máy chủ. MQTT,

Arduino Rest API: thư viện aRest

Để thực hiện mô hình API REST, có một thư viện thú vị gọi là aREST . Thư viện này là một khung hỗ trợ các dịch vụ REST và cung cấp một số tính năng. Nó hỗ trợ các bảng dev khác nhau như Arduino, Raspberry Pi, ES8266, v.v. Bạn có thể tìm thêm thông tin tại trang web aREST. Thư viện này rất đơn giản để sử dụng và có thể được tải xuống trực tiếp từ thư viện Arduino thông qua Arduino IDE.

Sử dụng thư viện này, chúng tôi có thể triển khai mô hình API REST của Arduino vì hỗ trợ aREST 

  • Đọc giá trị pin theo kiểu REST
  • Viết các giá trị pin theo kiểu REST
  • Chức năng phác họa từ xa

Ví dụ: một ứng dụng hoặc hệ thống bên ngoài có thể đọc giá trị pin bằng một yêu cầu HTTP đơn giản. Hơn nữa, cùng một ứng dụng hoặc hệ thống có thể đặt giá trị pin bằng yêu cầu HTTP REST. Điều này rất hữu ích khi chúng ta có một ứng dụng chạy trên điện thoại thông minh muốn tương tác với bảng Arduino. Sự tương tác này diễn ra bằng cách sử dụng Arduino REST API.

Một khía cạnh thú vị của thư viện aREST là khả năng hiển thị chức năng phác thảo Arduino theo kiểu REST. Các hàm phác thảo này được gọi trực tiếp bằng yêu cầu REST HTTP.

Triển khai API Arduino REST

Bây giờ chúng ta đã biết các khái niệm cơ bản về Arduino REST API và cách sử dụng nó để tích hợp Arduino với một hệ thống bên ngoài, đã đến lúc đưa nó vào thực tế. Trong ví dụ này, chúng tôi muốn kiểm soát dải LED bằng các lệnh gọi API REST. Bản phác thảo rất đơn giản vì chúng ta phải tập trung vào API Arduino REST. Dải đèn LED là  Bảng mạch RGB của Neopixels và sử dụng thư viện Adaf nhung và có thể chọn màu đèn LED RGB đơn. Bản phác thảo dưới đây cho thấy cách nối nó với Arduino UNO.


Bức ảnh này sử dụng các thành phần Neopixel khác nhau nhưng các kết nối là như nhau.

Sử dụng yêu cầu API Arduino REST, chúng tôi muốn đặt màu dải LED. Màu được truyền cho hàm phác thảo dưới dạng tham số ở định dạng HEX. Ví dụ này cho thấy thư viện này mạnh như thế nào. Mã Arduino rất đơn giản:

...
// Create aREST instance
aREST rest = aREST();
// NeoPixel Init
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, 
                                NEO_GRB + NEO_KHZ800);
void setup() {
  Serial.begin(115200);

  // Register RGB function
  rest.function("rgb", setPixelColor);
  Serial.println("Try DHCP...");
  if (Ethernet.begin(macAdd) == 0) {
    Serial.println("DHCP FAIL...Static IP");
    Ethernet.begin(macAdd , ip, myDns, myGateway) ;
  }

  server.begin();
  Serial.print("server IP: ");
  Serial.println(Ethernet.localIP());

  pixels.begin();
  Serial.println("Setup complete.\n");
}

void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  rest.handle(client);
  wdt_reset();
}

int setPixelColor(String hexColor) {
  hexColor="0x" + hexColor;
  Serial.println("Hex color " + hexColor);
  long n = strtol( &hexColor[0], NULL, 16);
  Serial.println("N :" + String(n));
  long r = n >> 16;
  long g = n >> 8 & 0xFF;
  long b = n & 0xFF;

  // set single pixel color
  return 1;
}


Chức năng Arduino mà chúng tôi muốn cung cấp trong Arduino REST API là setColor. Vì vậy, bản phác thảo đăng ký nó ở dòng 36 gọi nó rgb.

Hãy chạy bản phác thảo trên bảng Arduino UNO và thực hiện một yêu cầu HTTP đơn giản bằng trình duyệt. Giả sử chúng ta muốn đặt màu đỏ, kết quả được hiển thị bên dưới:

http://192.168.1.5/rgb?param=_FFFF00


Đây là một số ảnh chụp màn hình với các màu LED khác nhau, được điều khiển bởi các yêu cầu REST từ trình duyệt:


Và bên dưới video cho thấy Arduino tại nơi làm việc:


Hy vọng rằng, bạn đã học cách sử dụng API Arduino REST để gửi và nhận dữ liệu từ Arduino bằng các yêu cầu kiểu REST.

|