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.
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:
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.
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.
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.
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:
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); }
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ụ 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.
Đâ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 );
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.
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
>>> 100+ Mã Sản Phẩm Dây Rút: https://mecsu.vn/san-pham/day-rut-nhua.5op
>>> 1000+ Mã Sản Phẩm Đầu Cosse: https://mecsu.vn/san-pham/dau-cosse.Q1j
>>> Mời anh em xem thêm: