visudoblog gửi vào
- 16844 lượt xem
CylonJS là một thư viện Javascript hỗ trợ trong việc phát triển Robot và các dự án IoT trên nền tảng Node.js. Sức mạnh của CylonJS nằm trong số lượng 43 mạch điều khiển (hardware platform) và phần mềm (software platform) mà nó hỗ trợ; con số này chắc chắn sẽ còn tăng lên trong thời gian tới. Trang web chính thức cung cấp thông tin và tài liệu hướng dẫn https://cylonjs.com/.
Nếu bạn đã quen sử dụng Arduino IDE trong việc phát triển các dự án trên Arduino, Intel Edison hoặc Intel Galileo thì CylonJS có thể sẽ là một cộng cụ mới khiến bạn phải suy nghĩ lại và có thể thay thế khi làm việc với các mạch IoT. Trường hợp bạn đang sở hữu một mạch Arduino và muốn tìm hiểu về CylonJS, hãy truy cập ngay trang web chính thức để có thể bắt đầu từ bây giờ https://cylonjs.com/documentation/platforms/arduino/.
1. Cài đặt Cylon.js
Tiến hành kết nối đến Edison thông qua SSH sử dụng cổng console hoặc mạng Wifi, bảo đảm Edison có thể kết nối Internet.
Bước 1: Cài đặt thư viện MRAA trên Yocto Linux
libmraa - Low Level Skeleton Library for Communication on GNU/Linux platforms
Tôi tiến hành cài đặt thư viện libmraa trên Edison sử dụng trình quản lý gói tin opkg. Tham khảo Giới thiệu Intel Edison - OPKG Package Manager - P4.
echo "src mraa-upm http://iotdk.intel.com/repos/3.5/intelgalactic/opkg/i586" > /etc/opkg/mraa-upm.conf opkg update opkg install mraa
Bước 2: Cài đặt Cylon.js
Thực hiện lệnh npm trên nền tảng Node.js cài đặt gói thư viện cylon và cylon-intel-iot
npm install cylon cylon-intel-iot
Sau khi cài đặt hoàn tất, bạn có thể bắt đầu các dự án IoT của mình sử dụng Cylon.js trên nền tảng Node.js hoặc Intel XDK
2. Kiểm tra hoạt động Blink.js
Để thực hiện kiểm tra hoạt động của thư viện Cylon, tôi thực thi một đoạn mã blink.js sử dụng lệnh node trên Edison như sau:
- Tiến hành cài đặt gói thư viện bổ sung npm install cylon-firmata cylon-gpio cylon-i2c.
- Tạo tập tin blink.js hoặc tải tại Github với nội dung như sau:
var Cylon = require('cylon'); Cylon.robot({ connections: { edison: { adaptor: 'intel-iot' } }, devices: { led: { driver: 'led', pin: 13 } }, work: function(my) { every((1).second(), my.led.toggle); } }).start();
-
Tải đoạn mã blink.js từ Github wget https://raw.githubusercontent.com/visudoblog/IntelEdison_Cylon.js/master/Blink/blink.js
-
Thực thi lệnh node blink.js và kiểm tra kết quả.
Chú ý
Mã Blink chỉ hiệu lực mặc định trên Edison Arduino breakout board (Pin 13). Trên Edison Mini breakout board người dùng cần kết nối đèn led rời để kiểm tra hoạt động.
root@Arduinovn:~# node blink.js 2016-09-03T09:42:57.205Z : [Robot 1] - Starting connections. 2016-09-03T09:42:57.334Z : [Robot 1] - Starting connection 'edison'. 2016-09-03T09:42:57.343Z : [Robot 1] - Starting devices. 2016-09-03T09:42:57.345Z : [Robot 1] - Starting device 'led' on pin 13. 2016-09-03T09:42:57.346Z : [Robot 1] - Working.
3. Ứng dụng Cylon API trong việc điều khiển từ xa Intel Edion
3.1 Giới thiệu Cylon API
Một tính năng khá mạnh mẽ mà Cylon hỗ trợ cho các dự án IoT đó là Cylon API. Người dùng có thể ứng dụng tính năng mạnh mẽ này vào các yêu cầu như: gởi lệnh đến thiết bị Edison, gởi/nhận dữ liệu thời gian thực, giám sát tình trạng hoạt động của thiết bị. Cylon hỗ trợ một số API cho phép người dùng nhanh chóng sử dụng các giao thức (protocol) phổ biến trong kiến trúc của hệ sinh thái IoT hiện nay bao gồm: http/https (REST), socket.io và mqtt.
Để sử dụng được các API này, người dùng cần tiến hành cài đặt các thư viện hỗ trợ theo nhu cầu sử dụng một cách nhanh chóng thông qua lệnh npm install cylon-api-http, npm install cylon-api-socketio và npm install cylon-api-mqtt.
3.2 Tosenkyo Robot
Trong ví dụ đơn giản này, tôi tiến hành sử dụng Cylon HTTP API hỗ trợ người dùng từ xa kết nối và gởi lệnh đến thiết bị thông qua giao diện web. Chức năng trong ví dụ sau sẽ thực hiện khai báo các thông tin đối tượng, hàm thực thi và thực thi lệnh khi nhấn vào nút lệnh tương ứng tại giao diện web.
Bước 1: Khai báo thông tin đối tượng, hàm thực thi
Lấy cảm hứng từ cuộc thi ABU Robocon 2017, tôi thực hiện khai báo một số thông tin cơ bản để định nghĩa tên và một số thuộc tính trong Cylon như sau:
- Khai báo thông tin thư viện Cylon được sử dụng trên nền Node.js
"use strict"; var Cylon = require("cylon");
- Khai báo các thông số kết nối HTTP sử dụng Cylon API
Cylon.api({ host: "0.0.0.0", port: "3000", ssl: false });
- Khai báo tên của Robot là Tosenkyo Robot
Cylon.robot({ name: "Tosenkyo Robot",
- Khai báo, định nghĩa các hàm (function) được sử dụng trong Cylon
sayRelax: function() { return this.name + " is throwing a Sensu"; }, work: function(my) { console.log(my.sayRelax()); }, commands: function() { return { say_relax: this.sayRelax }; } });
- Thực hiện các function và khởi tạo kết nối
Cylon.start();
Toàn bộ mã sau khi được tập hợp sẽ có nội dung như bên dưới hoặc có thể tải mã tại TosenkyoRobot.js.
"use strict"; var Cylon = require("cylon"); Cylon.api({ host: "0.0.0.0", port: "3000", ssl: false }); Cylon.robot({ name: "Tosenkyo Robot", sayRelax: function() { return this.name + " is throwing a Sensu"; }, work: function(my) { console.log(my.sayRelax()); }, commands: function() { return { say_relax: this.sayRelax }; } }); Cylon.start();
Bước 2: Kiểm tra hoạt động
Người dùng có thể tạo tập tin TosenkyoRobot.js với nội dung như trên hoặc tải từ Github, sau đó tiến hành thực thi đoạn mã thông qua lệnh node để kiểm tra hoạt động.
root@Arduinovn:~# node TosenkyoRobot.js API using insecure connection. We recommend using an SSL certificate with Cylon. 2016-09-03T17:48:31.031Z : [Tosenkyo Robot] - Starting connections. 2016-09-03T17:48:31.041Z : [Tosenkyo Robot] - Starting devices. 2016-09-03T17:48:31.042Z : [Tosenkyo Robot] - Working. Tosenkyo Robot is throwing a Sensu Cylon HTTP API server is now online. Listening at http://0.0.0.0:3000
Người dùng có thể sử dụng trình duyệt web để truy cập đến địa chỉ IP của Edison thông qua Wifi hoặc NIC USB RNDIS với cổng dịch vụ là http://Edison-IP-Address:3000
4. Tạm kết
Cylon.js được cài đặt dễ dàng và mang đến cho người dùng nhiều tiện ích trong việc tương tác với hơn 43 loại mạch IoT và phần mềm điều khiển phổ biến hiện nay như: Ardruino, Beaglebone Black, Intel Edison, Intel Galileo, Raspberry Pi, BLE, OpenCV,... Ngôn ngữ lập trình trên nền tảng Javascript nói chung và CylonJS nó riêng sử dụng Node.js của Edison hoàn toàn phù hợp cho các tác vụ điều khiển (control), truyền/nhận dữ liệu thời gian thực (stream real time data) và giám sát tổng thể hoạt động của thiết bị (monitoring). Việc kết hợp CylonJS, Node.js và Intel XDK sẽ mang đến cho người dùng một bộ công cụ hoàn hảo thay thế cho Arduino IDE khi làm việc với mạch Intel Edison và Intel Galileo.