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:

  • 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

1.1. Arduino


Board Arduino Uno
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

1.2. Raspberry Pi

Board Raspberry Pi 3 model B
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

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
Kết nối module NRF24L01 với Raspberry Pi:
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=sharing

Cà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
Bật tính năng SPI trên Raspberry Pi

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
GettingStarted Example

  • 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

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 Arduino
Raspberry 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:

Nhận xét

Bài đăng phổ biến từ blog này

Dòng điện, điện áp 1 chiều và các định luật cơ bản

Dòng điện 1 chiều (DC) là gì ?

Các cách mắc điện trở

Dòng điện xoay chiều

Biến áp, Triết áp, Phân loại điện trở