Giới thiệu
Internet of Things (IoT) đang trở thành xu hướng chủ đạo trong lĩnh vực công nghệ, cho phép các thiết bị kết nối và trao đổi dữ liệu thông minh. Trong hệ sinh thái này, IoT hub đóng vai trò trung tâm, giúp quản lý, điều khiển và thu thập dữ liệu từ các thiết bị ngoại vi. Việc kết hợp NodeJS - một runtime JavaScript mạnh mẽ - với Raspberry Pi - một nền tảng phần cứng giá rẻ và linh hoạt - tạo ra giải pháp hoàn hảo để xây dựng một ứng dụng IoT hub hoàn chỉnh. Bài viết này sẽ hướng dẫn từng bước thiết kế, lập trình và triển khai hệ thống như vậy.
Chuẩn bị môi trường
Trước khi bắt đầu, cần đảm bảo các thành phần sau đã sẵn sàng:
- Raspberry Pi được cài đặt hệ điều hành (thường là Raspbian hoặc Raspberry Pi OS).
- NodeJS được cài đặt trên Pi (có thể tải bản LTS từ trang chủ).
- Cảm biến nhiệt độ (ví dụ: DHT11 hoặc DS18B20) để minh họa.
- Thư viện cần thiết: onoff để điều khiển GPIO, node-dht-sensor hoặc w1thermsensor để đọc cảm biến.
Cài đặt NodeJS trên Raspberry Pi có thể thực hiện qua terminal:
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs
Thiết kế kiến trúc ứng dụng
Một ứng dụng IoT hub thường có cấu trúc client-server, trong đó:
- Server (chạy trên Raspberry Pi) đóng vai trò hub, quản lý kết nối, xử lý dữ liệu và giao tiếp với client. - Client có thể là ứng dụng web, mobile app hoặc các thiết bị IoT khác.
Kiến trúc đề xuất bao gồm:
1. Module cảm biến: Đọc dữ liệu từ DHT11 qua GPIO. 2. Module server: Sử dụng Express.js để tạo API REST. 3. Module WebSocket: Dùng Socket.IO để truyền dữ liệu thời gian thực. 4. Module lưu trữ: Có thể dùng file JSON hoặc cơ sở dữ liệu nhẹ như SQLite.
Lập trình chi tiết
1. Đọc dữ liệu từ cảm biến
Sử dụng thư viện node-dht-sensor:
const sensor = require('node-dht-sensor');
function readSensorData() {
const data = sensor.read(11, 4); // DHT11, GPIO 4
return {
temperature: data.temperature.toFixed(1),
humidity: data.humidity.toFixed(1)
};
}
2. Thiết lập server Express
const express = require('express');
const app = express();
const http = require('http').createServer(app);
const io = require('socket.io')(http);
app.use(express.static('public'));
Quảng cáo
300x250 In-Content Advertisement
app.get('/api/sensor', (req, res) => {
const data = readSensorData();
res.json(data);
});
io.on('connection', (socket) => {
console.log('Client connected');
});
3. Cập nhật dữ liệu thời gian thực
setInterval(() => {
const data = readSensorData();
io.emit('sensor-data', data);
}, 5000); // Mỗi 5 giây
4. Giao diện web đơn giản
Tạo file public/index.html:
<!DOCTYPE html>
<html>
<head>
<title>IoT Hub Dashboard</title>
<script src="/socket.io/socket.io.js"></script>
</head>
<body>
<h1>Sensor Data</h1>
<p>Temperature: <span id="temp">--</span> °C</p>
<p>Humidity: <span id="hum">--</span> %</p>
<script>
const socket = io();
socket.on('sensor-data', (data) => {
document.getElementById('temp').textContent = data.temperature;
document.getElementById('hum').textContent = data.humidity;
});
</script>
</body>
</html>
Chạy và kiểm thử
Khởi động ứng dụng:
node server.js
Mở trình duyệt tại địa chỉ http://:3000 để xem dashboard. Mỗi 5 giây, dữ liệu sẽ tự động cập nhật.
Mở rộng và nâng cao
Để ứng dụng thực tế hơn, có thể bổ sung:
- Lưu trữ dữ liệu: Kết nối với SQLite hoặc MongoDB để lưu lịch sử. - Cảnh báo: Gửi email/SMS khi nhiệt độ vượt ngưỡng. - Bảo mật: Xác thực JWT cho API, mã hóa dữ liệu. - Mobile app: Dùng React Native hoặc Flutter để xây dựng giao diện di động.
Kết luận
Việc tạo một ứng dụng IoT hub với NodeJS và Raspberry Pi không chỉ giúp nắm vững kiến thức về IoT, mà còn mở ra khả năng phát triển các giải pháp thông minh trong thực tế. Từ hệ thống giám sát nhiệt độ đơn giản, bạn có thể mở rộng thành trạm quan trắc môi trường, nhà thông minh hay thậm chí là nhà máy tự động hóa. Điều quan trọng là bắt đầu từ những bước nhỏ, thử nghiệm và không ngừng cải tiến.