Lập trình Arduino bằng Javascript trong môi trường NodeJS - Chuyện thật hay đùa?

Mô tả dự án: 

Hồi giờ đã nghe đến việc lập trình Arduino bằng C/C++, đã nghe đến việc lập trình Arduino kéo thả, tôi tự hỏi, liệu có thể dùng Javascript trong môi trường NodeJS - môi trường lập trình thần thánh hiện nay với lượng thư viện đến hơn 1 triệu trên toàn bộ thế giới này - để lập trình cho con Arduino cùi bắp của mình hay không? Và hãy tin tôi đi, bạn sẽ bất ngờ!

Javascript là gì?

Javascript là một ngôn ngữ lập trình kịch bản hướng sự kiện dựa vào đối tượng phát triển có sẵn hoặc tự định nghĩa ra, javascript được sử dụng rộng rãi trong các ứng dụng Website. Javascript được hỗ trợ hầu như trên tất cả các trình duyệt như Firefox, Chrome, ... thậm chí các trình duyệt trên thiết bị di động cũng phải hỗ trợ nó.

Và với môi trường NodeJS, bạn có thể chạy được Javascript trên các thiết bị nhúng hay trên server chạy NodeJS. Để rõ hơn các bạn có thể xem bài của ksp.

Trích Lập trình nhúng trên Raspberry Pi bằng ngôn ngữ Javascript trong môi trường NodeJS - chìa khóa thành công

NodeJS là gì?

NodeJS là một hệ sinh thái Javascript mà ở đó bạn có thể lập trình nó như mọi ngôn ngữ lập trình nhúng như C++, python,... nó cũng có thể chạy đa nền tàng như Java vậy đó nhé. Nhưng luôn ghi nhớ Javascript và Java là khác nhau bạn nhé. Nodejs được xây dựng trên bộ Javascript engine V8 của Google. Mình sẽ không nói quá nhiều về chuyên môn trong bài viết này vì nó sẽ đi lệch định hướng của cộng đồng Arduino Việt Nam và cũng có rất nhiều cộng đồng NodeJS ở Việt Nam sẽ giúp bạn am tường hơn về NodeJS.

Trích Cài đặt NodeJS trên Windows - mô hình môi trường IOT chuyên nghiệp

Vì sao tôi lại tự hỏi: "Phải dùng Javascript trong môi trường NodeJS để lập trình Arduino"

Các bạn biết đấy, là một người yêu khoa học và đam mê kĩ thuật, tôi thấy cực kì chán ghét việc mỗi lần lập trình Arduino phải biên dịch lại, và khi sketch size sau khi biên dịch lên đến vài chục byte thì việc debug và code sẽ cực kì tốn thời gian vì mỗi lần upload phải mất vài chục giây. Đã thế, lại rất khó debug trong môi trường máy tính, giao tiếp thì xùm xà xùm xề, mỗi lần muốn làm 3 cái giao tiếp I2C, SPI, Serial cùng lúc thì ôi thôi sketch size đã lên mười mấy byte. Nói chung, tôi chán ghét phải dùng ngôn ngữ C++ trong Arduino, vì nó cứng nhắc, khó debug và dễ bị hết RAM (xem bài của ksp về cách lưu trữ dữ liệu thì bạn sẽ hiểu điều tôi nói!).

Và khi biết đến NodeJS qua bài của ksp, được thử nghiệm nó trên Intel Edison và Raspberry Pi, tôi đã bị xoáy và vòng xoáy tình yêu với NodeJS. Ở đó, tôi tìm được giá trị bản thân, giá trị gia đình và xã hội. Với NodeJS, tôi đã tiếp cận đúng hướng lập trình mà tôi thích, đã là lập trình kịch bản thời gian thực, gia đình NodeJS là một gia đình mở, các câu lệnh không quá nhiều để nhớ, không có con trỏ, xã hội trong môi trường nodejs được cả một cộng đồng lớn trên toàn thế giới. Với Javascript, không còn khái niệm dấu code, không còn khái niệm sản phẩm thương mại, mà nó tiên tiến hơn, tốt hơn, nó đã tiến hóa các ứng dụng thương mại được xây dựng trên nó thành dịch vụ thương mại. Ở đó, dù bạn có copy code của họ làm thương mại thì cũng chả mấy người mua và dùng cái của bạn heart. Nói tóm lại, NodeJS giúp tôi có thể là chính mình, xây dựng dịch vụ thương mại, chia sẻ miễn phí mã nguồn cho mục đích học tập, và hơn cả, giúp tôi có suy nghĩ mã nguồn không phải là thứ phải đi dấu để xây dựng thương hiệu của mình.

Từ đó, tôi tự hỏi hỏi: "Khi đã có thể lập trình được trên những hệ thống nhúng, tôi có thể làm được gì với nó hơn nữa? Ví dụ như lập trình Arduino bằng NodeJS chẳng hạn". Và thật đáng mừng, điều đó là hoàn toàn có thể. Cùng với tôi khám phá nhé!

Cài đặt NodeJS trên môi trường Windows!

Cài đặt Johnny-five

Bạn chạy lệnh 

npm install -g johnny-five

... để cài đặt thư viện johnny-five nhé!

Nạp firmware Firmata cho Arduino

Bạn chỉ cần upload firmware famata cho Arduino (Uno, Nano, Mega, Micro, Leonardo,...) là mọi thứ ở Arduino-side đã hoàn thiện! Quá dễ dàng!

Cuối cùng là lập trình cho Arduino thôi!

Ở đây, mình sẽ ví dụ về code blink thần thánh.

Bạn tạo file blink.js ở thư mục bất kỳ, ví dụ ở ở C:\blink.js, rồi dán vào nội dung sau

var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  console.log("Toi yeu Arduino, Arduino da san sang");
  // Khai báo một con LED (chả cần pinMode gì cả)
  var led = new five.Led(13);

  // sau đó cho nó nhấp nháy với chu kỳ 500ms
  led.blink(500);
});

Gắn board đã nạp firmware Firmata vào và chạy lệnh

node c:\blink.js

Ở command line Windows thôi (nhấn tổ hợp phím Windows + R, gõ cmd để mở command line của Windows)

Ai sẽ là người dùng NodeJS lập trình Arduino

  • Các bạn đã biết Javascript
  • Các bạn yêu thích Arduino và có kiến thức
  • Làm các dự án lớn với máy tính nhúng, vì nó cần một máy tính nhúng hoặc máy tính mới chạy được!
  • Thích tập trung xử lý thay vì phải chia nhiều ngã rẻ để xử lý.

Kiểu lập trình này không dành cho ai

  • Thích sự kĩ càng
  • Xử lý tốc độ cực cao
  • Newbie.

Kết luận

Chúc các bạn thành công với NodeJS và Arduino. Mà nó dễ lắm, các bạn sẽ làm được mà, cố gắng lên nhé. Hay thì rate node cho mình nhé.

lên
7 thành viên đã đánh giá bài viết này hữu ích.
Chuyên mục: 
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

Hướng dẫn sử dụng cảm biến dòng điện ACS712 với Arduino

Cảm biến dòng điện ACS712  là một IC cảm biến dòng tuyến tính dựa trên hiệu ứng Hall. ACS xuất ra 1 tín hiệu analog, Vout biến đổi tuyến tính theo sự thay đổi của dòng điện được lấy mẫu thứ cấp DC (hoặc AC), trong phạm vi đã cho. Tụ (Cf theo sơ đồ) được dùng với mục đích chống nhiễu và có giá trị tùy thuộc vào từng mục đích sử dụng.

lên
20 thành viên đã đánh giá bài viết này hữu ích.
Từ khóa: 

Hướng dẫn sử dụng cảm biến nhiệt độ DS18B20 (-55°C đến +125°C) sai số ±0.5°C

Lại quay về vấn đề đo nhiệt độ, như ở bài trước, mình đã dùng cả LM35, cả TMP36. Nhưng rốt cuộc vẫn không hiệu quả, lần này mình đang sử dụng con DS18B20 này và cảm thấy khá ổn hơn so với lần trước. Nhiệt độ ít bị chênh lệch hơn và như quảng cáo là chỉ có sai số ±0.5°C thôi (nếu nhiệt độ trong phạm vi -10°C to +85°C, đáng để thử phải không nào?

lên
14 thành viên đã đánh giá bài viết này hữu ích.