Module không dây RF NRF24L01

0
902

NRF24L01 là một trong những thiết bị giao tiếp sóng RF cho các ứng dụng hiện đại. NRF24L01 là module rẻ và có những tính năng tuyệt vời. Module hoạt động ở tần số 2.4GHz, điều này làm cho nó phổ biến.

Có thể truyền và nhận dữ liệu bằng một module duy nhất. Thu phát sóng tín hiệu không phải là khả năng duy nhất, module có thể giao tiếp với tổng cộng 6 module NRF24L01 khác cùng một lúc.

Thiết bị giao tiếp với Arduino và tạo ra nhiều ứng dụng điều khiển từ xa. Module không dây này sử dụng giao thức truyền thông SPI với tốc độ truyền dữ liệu 10MBs với 125 dải địa chỉ, làm nó trở thành module RF đáng tin cậy nhất. Module RF sử dụng module GFSK để thu phát dữ liệu.

Module không dây RF NRF24L01

Cấu hình sơ đồ chân NRF24L01

Tất cả các chân của module để giao tiếp đều có trong các bộ vi điều khiển và bo mạch. Module có tổng cộng 8 chân:

Cấu hình sơ đồ chân NRF24L01

Chân cấp nguồn

VCC

Chân cấp nguồn dương cho module

GND

NRF24L01 giao tiếp với một vi điều khiển khác và sẽ cần một điểm mass chung để hoạt động. Và đó là chân nốt đất GND.

Chân giao tiếp

CE

CE là chân kích hoạt truyền / nhận dữ liệu. Chỉ kích hoạt module khi được cấp mức logic cao.

CSN

Chân này kích hoạt chờ và xử lý dữ liệu từ bộ vi điều khiển. Để giữ giao tiếp dữ liệu giữa bộ vi điều khiển và module, luôn cấp mức logic cao vào chân này.

SCK

Là chân xung clock giao tiếp SPI trong NRF24L01. Dữ liệu sẽ truyền giữa module và vi điều khiển theo xung clock trên chân SCK.

MOSI

Chân nhận dữ liệu SPI

MISO

Chân truyền dữ liệu SPI

Chân ngắt IRQ

IRQ là chân ngắt, tạo ra sự kiện xử lý khi có dữ liệu mới.

Đặc tính module RF NRF24L01

  • Hoạt động ở tần số 2.4GHz nên phổ biến ở hầu hết mọi quốc gia.
  • Một module có thể hoạt động như một bộ truyền hoặc thu tín hiệu.
  • Có ăng-ten tích hợp có thể gửi dữ liệu lên đến 100m.
  • Một module NRF24L01 có thể giao tiếp với tối đa 6 module khác cùng một lúc.
  • Yêu cầu điện áp 3.3V để hoạt động nhưng điện áp chỉ có thể mở rộng lên đến 3.6V.
  • Module được tích hợp sẵn bộ dao động tần số 16MHz.
  • Tốc độ truyền của NRF24L01 là từ 256kbps đến 2Mbps.
  • Thiết bị có dãy 125 kênh mang lại tính năng hoạt động 125 mạng tín hiệu khác nhau tại một nơi duy nhất.
  • Các tần số kênh thay đổi từ 2400MHz đến 2525MHz.

Ứng dụng NRF24L01

  • Tạo ra một mạng giao tiếp tín hiệu.
  • Các ứng dụng điều khiển từ xa.
  • Hầu hết các ứng dụng IoT trong nhà.

Cách sử dụng module giao tiếp NRF24L01

NRF24L01 có thể sử dụng được với tất cả các bộ vi điều khiển và bảng mạch điều khiển thông minh nhưng để sử dụng nó, cần hiểu rõ một số chân và thông tin tín hiệu.

Để sử dụng module, hãy kết nối module với một bộ vi điều khiển khác có giao thức SPI. Đầu tiên, cấp nguồn cho các thiết bị rồi mắc các chân SPI theo mạch dưới đây.

Cách sử dụng module giao tiếp NRF24L01

Sau khi kết nối, hãy nhớ rằng NRF24L01 có thể hoạt động ở hai chế độ. Đầu tiên là bộ phát tín hiệu và thứ hai là bộ thu tín hiệu. Để giao tiếp ở hai chế độ này, vi điều khiển phải được biết trước. Trong ứng dụng hiện tại, Arduino là thiết bị duy nhất hỗ trợ giao tiếp NRF24L01 hiệu quả nhất.

Giao tiếp với Arduino

Có rất nhiều nghiên cứu NRF24L01 trên internet có thể giúp sử dụng nó trong nhiều ứng dụng, hầu hết là giao tiếp với arduino. Với Arduino, cả hai chế độ của module đều có thể thực hiện được thông qua mạch sau:

Giao tiếp với Arduino

Ví dụ mạch phát tín hiệu NRF24L01

Khi NRF24L01 hoạt động như một bộ phát tín hiệu, thực hiện truyền dữ liệu một kênh đến một module khác. Để sử dụng module làm bộ truyền tín hiệu, tham khảo code dưới đây:

#include <nRF24L01.h>

#include <RF24.h>

#include <SPI.h>

RF24 radio(3, 2);

void setup()

{

radio.begin();

radio.openWritingPipe(10101);

radio.stopListening();

}

void loop()

{

const char data[] = "DATA";

radio.write(&data, sizeof(data));

delay(2000);

}

Giải thích chi tiết code

Dưới đây là code khai báo thư viện hỗ trợ:

#include <nRF24L01.h>

#include <RF24.h>

#include <SPI.h>

Thư viện SPI.h đã khai báo sẵn các chân SPI cụ thể là MISO, MOSI và SCK nhưng cần phải khởi tạo thêm chân CSN và CE. Thư viện nRF24L01.h có một lệnh để khai báo cả chân CSN và CE là:

RF24 radio(3, 2);

Số 3 là dùng cho chân CE và 2 là dùng chân CSN. Cả hai đều có thể thay đổi bằng các chân digital của arduino, trong code đã được thay đổi theo mạch đã cho ở trên.

Sau đó khởi tạo module bằng lệnh sau:

radio.begin ();

Địa chỉ có thể được xác định với 5 bit (địa chỉ giao tiếp với module), bất kỳ số 5 bit nào cũng có thể sử dụng được.

radio.openWritingPipe (10101);

Sau đó khai báo chế độ hoạt động cho module. Lệnh sau sẽ làm nRF24L01 thành bộ phát tín hiệu.

radio.stopListening ();

Sau đó khởi tạo gửi dữ liệu. Luôn nhớ rằng chỉ có 32 byte dữ liệu có thể gửi tại một thời điểm do giới hạn dữ liệu của module. Lệnh sau sẽ giúp xác định điều đó:

const char data[] = “DATA”;

radio.write(&data, sizeof(data));

Dữ liệu truyền có thể được xác định trong phần thiết lập (setup) hoặc vòng lặp (loop) của chương trình.

Ví dụ sử dụng module như bộ thu tín hiệu

Ví dụ trên hoạt động ở chế độ phát tín hiệu, với chế độ thu tín hiệu của module thì cách thực hiện cũng không khác. Chỉ cần thay đổi ba lệnh.

  • Kênh địa chỉ, không có thiết ở chế độ phát
  • Khởi tạo module hoạt động ở chế độ thu
  • Cách nhận và kiểm tra dữ liệu

Đây là code cho chế độ thu tín hiệu.

#include <nRF24L01.h>

#include <RF24.h>

#include <SPI.h>

RF24 radio (3, 2);

void setup ()

{

radio.begin ();

radio.openReadingPipe (0,00001);

radio.startListening ();

}

void loop ()

{

if (radio.available ()) {

char data [32] = {0};

radio.read (& data, sizeof (data));

} }

Chi tiết về code bộ thu tín hiệu

Đầu tiên định lại phần khai báo địa chỉ:

radio.openReadingPipe (0,10101);

Trong phần khái báo địa chỉ, bây giờ có hai giá trị. Giá trị thứ hai xác định địa chỉ của thiết bị truyền. Giá trị thứ nhất là “0” để xác định kênh. Lệnh  trên có thể thiết lập để thực hiện giao tiếp với 6 kênh cùng một lúc.

Để khởi tạo module chế độ nhận dữ liệu, hãy khởi tạo lệnh sau:

radio.startListening ();

Lệnh thứ ba là nhận và kiểm tra dữ liệu.

if (radio.available ())

Lệnh cuối để đọc dữ liệu

radio.read( data, size );

Ví dụ NRF24L01

Có rất nhiều ứng dụng với nRF24L01 để tạo mạng kết nối là đó một trong những khả năng tốt nhất của nRF24L01, điều này làm cho nó khác biệt so với các module khác. Để sử dụng được mạng kết nối này, yêu cầu có tổng module từ 3 đến 7 module. Làm theo hình dưới đây.

Ví dụ NRF24L01

Sau đó, sử dụng các lệnh dưới đây để khởi tạo các kênh:

radio.openReadingPipe(0, ADDRESS);

radio.openReadingPipe(1, ADDRESS);

radio.openReadingPipe(2, ADDRESS);

radio.openReadingPipe(3, ADDRESS);

radio.openReadingPipe(4, ADDRESS);

radio.openReadingPipe(5, ADDRESS);

Module thu tín hiệu không thể phân biệt với nhau nên luôn nhớ rằng tín hiệu truyền không được giống nhau giữa các bộ phát dữ liệu.

Sơ đồ 2D NRF24L01

Sơ đồ 2D NRF24L01

>>> Mời anh em xem thêm:

Tôi là một người làm việc trong lĩnh vực cơ khí, thiết bị công nghiệp....Blog là nơi tôi chia sẻ thông tin hữu ích đến các bạn đọc.
Subscribe
Notify of
0 Bình luận
Inline Feedbacks
View all comments