NRA - Phần 1: Bật tắt led đơn giản trên Web

Mô tả dự án: 

Lâu rồi mới có thời gian nghịch với Raspi và Arduino. Hôm nay mình sẽ giới thiệu các bạn những sức mạnh của sự kết hợp giữa Nodejs (N), Raspberry Pi (R), Arduino (A). Ở đây các bạn sẽ điều khiển, thu thập dữ liệu, làm được rất nhiều thứ với arduino và raspberry pi trên website một cách đơn giản và chuyên nghiệp. Đã có nhiều bài viết trên Arduino.vn nói về việc điều khiển bằng Nodejs nhưng hôm nay tôi sẽ giới thiệu các bạn thư viện khác để sử dụng đa dạng hơn.

Bài đầu tiên này, mình sẽ hướng dẫn các bạn một số cơ bản, và một ví dụ bài điều khiển led cổ điển. Tiếp tục xem nhé!!! devil

Bước 1: Thiết lập môi trường

Chúng ta sẽ làm việc trên môi trường nodejs trong Raspi. Để cài đặt nodejs các bạn tham khảo bài viết của anh KSP.

Hoặc có thể làm theo mình:

sudo apt-get update
sudo apt-get upgrade

- Tải  Nodejs mới nhất:

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -

- Install nó nhé

sudo apt-get install -y nodejs

- Xem phiên bản:

node -v

- Tiếp theo bạn sẽ cài thêm một số module để làm web cũng như giao tiếp Serial

npm install express socket.io ejs serialport

express, ejs : giúp chúng ta tạo được một trang web

socket.io: dùng để tạo  web realtime 

serialport: module dùng để giao tiếp với cổng serial 

Dĩ nhiên các bạn cũng có thể làm những điều này trên máy windown hay MacOS mà không cần phải raspberry pi, nhưng ở đây mình hướng dẫn bạn làm trên Pi vì sẽ ứng dụng tiện, tốt hơn ở những chức năng khác.

 

Bước 2: Lắp mạch

Đơn giản: các bạn chỉ cần cắm Arduino vào Raspi qua cổng USB thôi cool

Bước 3: Giải thích

Nguyên lí của bài vi dụ này:

  • Người dùng sẽ truy cập vào trang web client và click vào nút bật đèn, nhờ socketio nên sự kiện được cập nhật ngay lập tức phát về phía server.
  • Phía server sẽ nhận được và gửi dữ liệu điều khiển cho công Serial mà ở đây là arduino.
  • Cùng lúc đó phía server cũng gửi lại trạng thái bật đèn cho các client, nên khi chũng ta mở một tab khác thì sẽ cập nhật được trạng thái đèn đang bật.
  • Raspberry có nhiệp vụ chạy file server.js để tạo server.

Bươc 4: Code Code

1. Server

- Các bạn tạo thư mục test

mkdir test
cd test

-  Tạo project nodejs

npm init -y

- Install các module như  trên

npm install express socket.io ejs serialport

- tạo file server.js (mình sẽ hướng dẫn kĩ trong code nha wink)

//**********Thiet lap server can ban***********//
const express = require("express");
const app = express();
const io = require("socket.io")(server);

app.use(express.static("./public"));  //noi dat cac file css, script.js
app.set("view engine","ejs");   //File html cua minh se la ejs
app.set("views","./views");     //dat vao tong thu muc views

const  server = require("http").Server(app);
server.listen(3000);  //cong port 3000
 
 //*********su dung module serialport*******?//
var SerialPort = require("serialport").SerialPort
var serialPort = new SerialPort("/dev/ttyACM0", { baudrate: 115200 });

var status = 0;  //trang thai ban dau la tat den
 
app.get('/',(req, res) => {
   res.render("home");
});
io.sockets.on('connection', function (socket) {   //khi cac client ket noi
        socket.on('led', function (data) {
                if(status){
                    status = 0;
                    serialPort.write(status); //gui du lieu cho serrial port
                    io.sockets.emit('led', {value: status});  //phat cho tat cac cac client
                }else{
                    status = 1;
                    serialPort.write(status);
                    io.sockets.emit('led', {value: status});   
                }
                
        });

});
console.log("running");

2. Client

- Các bạn tạo một thư mục views trong test

- tạo file home.ejs:

<!DOCTYPE html>
<html>
  <head>
        <title>Tudc</title>
        <meta name="viewport" content="width=400px" />
       
        <script src="socket.io/socket.io.js"></script>

  </head>
  <body>
        <button id="btn" value="Bat Den"></button>
       
        <script type="text/javascript">
                var socket = io("http://localhost:3000");
               
                socket.on('led', function (data) {
                    if(data){
                        document.getElementById("btn").value = "Tat den";
                    } else {
                        document.getElementById("btn").value = "Bat den";
                    }
                        

                });
               
                $(#btn).click(function(){
                    socket.emit('led');
                })
        </script>
  </body>
</html>

3. Arduino

void setup()
{
  Serial.begin(115200);
}
void loop()
{
  while(!Serial.available());	//wait until a byte was received
  digitalWrite(13,Serial.read());
}

Vậy là xong rồi đó!! Test nào laugh

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

Xe điều khiển bằng tay game Dual Shock3 thông qua Bluetooth

Vừa bắt đầu với arduino được hơn 1 tuần, có tham khảo qua các nguồn từ "trung ương đến địa phương", nắm được 1 số kiến thức cơ bản nên mình bắt đầu thực hiện 1 sản phẩm để đúc kết kinh nghiệm. Trong số đó thì xe điều khiển là dễ nhất. Kết hợp với cái tay game ps3 nằm lăn lóc ở góc nhà. Thế là có 1 chiếc xe điều khiển từ xa. Bắt đầu nhé.

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

Làm xe điều khiển từ xa bằng Bluetooth - Điều khiển bằng Android với App Inventor

Mình rất thích điện tử nhưng không học về ngành điện tử. Rất may là có Adruino, rồi có cộng đồng Adruino Việt Nam, đặc biệt là sự nhiệt tình của tất cả các bạn trong cộng đồng, mình đã làm được 1 chiếc xe điều khiển từ xa. Cho con chơi là lí do phụ thôi, còn tìm hiểu, học tập là chính. Hôm nay chia sẻ cùng các bạn, cùng gửi lời cảm ơn đến tất cả các bạn trong cộng đồng. Có bạn thì giúp đỡ trực tiếp, có bạn thì viết bài, rồi có bạn thì bình luận, nêu câu hỏi. Tất cả đều có giá trị đối với mình.

Ngại viết bài nên mình đăng dưới dạng ảnh.

lên
26 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

Robot phơi Nông sản - Robot Helper Farmers

Xin chào các bạn, như chúng ta biết nền nông nghiệp nước ta đang phát triển cùng với sự áp dụng những sản phẩm KH-KT vào sản xuất. Nhằm đi theo bước tiến đó, hôm nay mình xin giới thiệu các bạn một ứng dụng nhằm giúp ích một phần nhỏ cho người nông dân.

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