Hướng dẫn Truyền nhận dữ liệu giữa Arduino và Raspberry Pi qua sóng RF sử dụng module nrf24l01
Cũng giống như con người, để các thiết bị thông minh hơn thì cần phải giao tiếp với nhau để trao đổi thông tin, dữ liệu. Quá trình truyền nhận dữ liệu này được chia thành hai dạng:
Trong số các phương thức truyền/nhận dữ liệu không dây, RF (Radio Frequency) là một giải pháp với giá thành rẻ, dễ sử dụng và khoảng cách truyền nhận xa. Ở bài viết này, mình sẽ hướng dẫn các bạn cách sử dụng module NRF24L01 để truyền và nhận dữ liệu giữa hai board Arduino và Raspberry Pi.
Bạn có thể dùng nhiều loại board Arduino, có loại nào dùng loại đó cũng được chứ không nhất thiết phải sử dụng board giống trong bài viết của mình (Arduino Uno). Sau khi đã có board, bạn cần tiến hành cài đặt phần mềm Arduino IDE trên máy tính của mình để lập trình và nạp firmware cho Arduino.
Link download: https://www.arduino.cc/en/Main/Software
Phức tạp hơn Arduino, Raspberry Pi là một board máy tính nhúng (nghe tới máy tính là thấy nó giống giống Laptop hay PC của bạn rồi đó). Một máy tính muốn hoạt động được thì đòi hỏi phải có hệ điều hành. Nếu chưa biết cài hệ điều hành cho Raspberry Pi, bạn hãy tham khảo bài viết này của mình nhé https://ratdongian.blogspot.com/2020/06/cai-dat-he-dieu-hanh-va-ket-noi-wifi-cho-raspberry-pi.html
Như đã giới thiệu ở đầu bài viết, để truyền nhận dữ liệu không dây qua sóng RF, mình sẽ sử dụng 02 module NRF24L01 (1 cái kết nối với Arduino, 1 cái kết nối với Raspberry Pi).
Kết nối module NRF24L01 với Raspberry Pi:
Cài đặt thư viện: Sketch >> Include Library >> Add .ZIP Library ...
Trước khi nạp chương trình, bạn hãy kiểm tra lại tên board arduino đang sử dụng và chọn cổng COM để nạp và debug chương trình nhé!
Sau khi nạp chương trình GettingStarted xong, tiến hành mở serial monitor trên Arduino để xem debug thông tin code (Tools >> Serial Monitor). Nếu chương trình in ra được các thông tin như hình dưới thì kết nối giữa module và board Arduino đúng. Nếu không giống, vui lòng xem lại kết nối chân ở mục 2.1.
Cách 2: Trong termial, nhập command sau và chọn 5 Interfacing Options >> P4 SPI >> YES
Cấp quyền cho file install.sh:
Chạy file install.sh:
Vào thư mục chứa example:
Xem và chỉnh sửa code:
Build code:
Chạy code vừa build:
Tải file cài đặt nodejs:
Giải nén file vừa tải:
Copy nodejs vào thư mục /usr/local:
Kiểm tra version nodejs vừa cài đặt:
Vào thư mục example:
Khởi chạy file GettingStarted.js:
Raspberry Pi: Link Source code cho Raspberry Pi
Với sự tài trợ về phần cứng lẫn kinh phí tìm hiểu, Xin chân thành gửi lời cảm ơn anh Phan Sơn đã tài trợ cho bài viết này. Hy vọng trong tương lai, sẽ có nhiều hơn những bạn hỗ trợ mình trong quá trình viết bài chia sẻ cho cộng đồng.
Một số tài liệu tham khảo sử dụng trong bài viết:
- Truyền dữ liệu có dây: dùng dây điện để kết nối hai thiết bị lại với nhau. Chúng sẽ truyền và nhận dữ liệu theo một chuẩn giao tiếp mà người lập trình quy định sẵn. Ví dụ: UART, I2C, SPI, CAN, ...
- Truyền dữ liệu không dây: với cách truyền/nhận này, chúng ta không cần dùng dây điện để nối hai thiết bị, mà chúng vẫn có thể giao tiếp được với nhau. Có rất nhiều cách để làm được điều này, tiêu biểu phải kể đến RF (Radio Frequency), Wifi, Bluetooth, ...
Trong số các phương thức truyền/nhận dữ liệu không dây, RF (Radio Frequency) là một giải pháp với giá thành rẻ, dễ sử dụng và khoảng cách truyền nhận xa. Ở bài viết này, mình sẽ hướng dẫn các bạn cách sử dụng module NRF24L01 để truyền và nhận dữ liệu giữa hai board Arduino và Raspberry Pi.
Danh mục chính trong bài viết
- 1. Chuẩn bị những linh kiện cần thiết
- 2. Kết nối dây với module NRF24L01
- 3. Lập trình giao tiếp Arduino với module NRF24L01
- 4. Lập trình Raspberry Pi giao tiếp với module NRF24L01
- 5. Source, cách sử dụng và fix lỗi
- 6. Tổng Kết
1. Chuẩn bị những linh kiện cần thiết
1.1. Arduino
![]() |
Board Arduino Uno |
Link download: https://www.arduino.cc/en/Main/Software
1.2. Raspberry Pi
![]() |
Board Raspberry Pi 3 model B |
1.3. Module NRF24L01
![]() |
Module RF NRF24L01 |
Như đã giới thiệu ở đầu bài viết, để truyền nhận dữ liệu không dây qua sóng RF, mình sẽ sử dụng 02 module NRF24L01 (1 cái kết nối với Arduino, 1 cái kết nối với Raspberry Pi).
2. Kết nối dây với module NRF24L01
2.1. Arduino và NRF24L01
![]() |
Kết nối Module NRF24L01 với Arduino Uno |
Arduino | NRF24L01 |
---|---|
3V3 | VCC |
GND | GND |
8 | CE |
10 | CSN |
13 | SCK |
11 | MOSI |
12 | MISO |
Không dùng | IRQ |
2.2. Raspberry Pi và NRF24L01
![]() |
Raspberry Pi Pinout |
Raspberry Pi | NRF24L01 |
---|---|
17 (3V3) | VCC |
25 (GND) | GND |
18 (GPIO24) | CE |
24 (GPIO8) | CSN |
23 (SCLK) | SCK |
19 (MOSI) | MOSI |
21 (MISO) | MISO |
22 (GPIO25) | IRQ |
3. Lập trình giao tiếp Arduino với module NRF24L01
3.1. Tải và cài đặt thư viện NRF24L01 cho Arduino
Tải thư viện nRF24L01 cho Arduino tại đường dẫn: https://drive.google.com/file/d/18PgMGd3G7hk2UYKbY0DUUDwtw9-uCB7f/view?usp=sharingCài đặt thư viện: Sketch >> Include Library >> Add .ZIP Library ...
![]() |
Thêm thư viện vào arduino IDE |
3.2. Sử dụng example
Sau khi cài đặt xong thư viện NRF24L01 cho arduino, chúng ta sẽ tiến hành vào phần ví dụ của thư viện này (Chọn File >> Examples >> RF24 >> GettingStarted).
![]() |
Mở ví dụ NRF24L01 |
Trước khi nạp chương trình, bạn hãy kiểm tra lại tên board arduino đang sử dụng và chọn cổng COM để nạp và debug chương trình nhé!
![]() |
Chọn board, cổng COM |
Sau khi nạp chương trình GettingStarted xong, tiến hành mở serial monitor trên Arduino để xem debug thông tin code (Tools >> Serial Monitor). Nếu chương trình in ra được các thông tin như hình dưới thì kết nối giữa module và board Arduino đúng. Nếu không giống, vui lòng xem lại kết nối chân ở mục 2.1.
![]() |
Nạp và chạy chương trình GettingStarted |
4. Lập trình Raspberry Pi giao tiếp với module NRF24L01
4.1. Cho phép tính năng SPI trên Raspberry Pi
Cách 1: Trong terminal, nhập command dưới đây và xóa dấu # trước tại dòng dtparam=spi=on
sudo nano /boot/config.txt
Cách 2: Trong termial, nhập command sau và chọn 5 Interfacing Options >> P4 SPI >> YES
sudo raspi-config
![]() |
Bật tính năng SPI trên Raspberry Pi |
4.2. Lập trình giao tiếp Raspberry Pi với module NRF24L01 sử dụng ngôn ngữ C
Tải file install.sh:
wget http://tmrh20.github.io/RF24Installer/RPi/install.sh
Cấp quyền cho file install.sh:
chmod +x install.sh
Chạy file install.sh:
./install.sh
Vào thư mục chứa example:
cd rf24libs/RF24/examples_linux
Xem và chỉnh sửa code:
nano gettingstarted.cpp
Build code:
make
Chạy code vừa build:
sudo ./gettingstarted
- Nhập 1 nếu bạn muốn Raspberry Pi truyền dữ liệu cho Arduino.
- Nhập 0 nếu bạn muốn Raspberry Pi nhận dữ liệu từ Arduino.
4.3. Lập trình giao tiếp Raspberry Pi với module NRF24L01 sử dụng ngôn ngữ nodejs
4.3.1. Cài nodejs trên Raspberry Pi
Xem kiến trúc Linux của board Raspberry Pi bạn đang sử dụng:
uname -m
check uname |
Tải file cài đặt nodejs:
wget https://nodejs.org/dist/v12.18.0/node-v12.18.0-linux-armv7l.tar.xz
Giải nén file vừa tải:
tar -xz node-v12.18.0-linux-armv7l.tar.xz
Copy nodejs vào thư mục /usr/local:
sudo cp -R * /usr/local/
Kiểm tra version nodejs vừa cài đặt:
node -v
npm -v
npm -v
4.3.2. Cài đặt thư viện nRF24L01 nodejs trên Raspberry Pi
Cài thư viện:
npm install nrf24 --save
Vào thư mục example:
cd node_modules/nrf24/examples
Khởi chạy file GettingStarted.js:
sudo node GettingStarted.js
Khởi chạy chương trình GettingStarted.js |
- Nhập s nếu bạn muốn Raspberry Pi truyền dữ liệu cho Arduino.
- Nhập R nếu bạn muốn Arduino truyền dữ liệu cho Raspberry Pi.
5. Source, cách sử dụng và fix lỗi
Arduino: Link Source code cho ArduinoRaspberry Pi: Link Source code cho Raspberry Pi
6. Tổng kết
Qua bài viết trên, mình đã hướng dẫn các bạn cách thiết lập và sử dụng Raspberry Pi và Arduino giao tiếp với module RF NRF24L01. Với module RF nhỏ gọn, chúng có thể truyền nhận dữ liệu khoảng cách xa 1.8km trong điều kiện lý tưởng. Trong thực tế - môi trường có nhiều vật cản, mình có thể truyền nhận ổn địng trong khoảng 150m.![]() |
Địa hình nơi test khoảng cách truyền nhận module NRF24L01 |
Với sự tài trợ về phần cứng lẫn kinh phí tìm hiểu, Xin chân thành gửi lời cảm ơn anh Phan Sơn đã tài trợ cho bài viết này. Hy vọng trong tương lai, sẽ có nhiều hơn những bạn hỗ trợ mình trong quá trình viết bài chia sẻ cho cộng đồng.
Một số tài liệu tham khảo sử dụng trong bài viết:
- https://pinout.xyz/pinout/spi
- https://tmrh20.github.io/RF24/Linux.html
- https://gist.github.com/natevw/5789019
- https://www.instructables.com/id/Install-Nodejs-and-Npm-on-Raspberry-Pi/
- https://medium.com/@bipul.k.kuri/upgrade-node-js-npm-in-raspbian-on-raspberry-pi-f1bcdaa23db5
- https://linuxize.com/post/how-to-install-node-js-on-raspberry-pi/
- https://github.com/ludiazv/node-nrf24
Leave a Comment