Tôi yêu Arduino gửi vào
- 23917 lượt xem
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.
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 . 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!
Xem bài của ksp bạn nhé
Cài đặt NodeJS trên Windows - mô hình môi trường IOT chuyên nghiệp
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é.