Sử dụng Module NRF24L01 - Thu phát sóng vô tuyến 2.4GHz với Arduino
Nếu như đã làm việc với các module này thì không ít trong các bạn có thể đã gặp nhiều vấn đề khó giải quyết liên quan tới xung đột thư viện (như tôi sad). Ngoài ra các module này có khoảng cách thu phát sóng khá ngắn (khoảng 30m nếu đã hàn thêm anten), lại không thể thu phát hai chiều. Vì những lý do trên, tôi đã tìm kiếm một loại module không dây khác để thay thế cho các module 433Mhz nhằm khắc phục các điểm yếu trên. Tìm kiếm trên mạng tôi đã tìm được loại module NRF24L01 sử dụng sóng 2.4Ghz tạm thời giải quyết được khá ổn những điểm yếu của module 433Mhz.
Module NRF24L01
Các bạn có thể dễ dàng tìm kiếm thông số của module này trên internet. Tôi xin giới thiệu sơ qua một số đặc điểm mà tôi quan tâm như sau:
- Khoảng cách thu phát khoảng 100m (với điều kiện trống trải), khoảng 30-50m (trong nhà). Với một số phiên bản đặc biệt ví dụ như loại NRF24L01+ thì khoảng cách có thể lên tới 1km. Khá thích hợp cho các bộ điều khiển cầm tay.
- Có anten sẵn trên bảng mạch rất tiện và đẹp.
- Có khả năng truyền tín hiệu 2 chiều. Tức là một module vừa có thể là transmitter vừa có thể là receiver. Khác biệt so với loại 433Mhz là phải có 2 module riêng biệt.
- Giá thành thấp khoảng 10k VNĐ/cái (tôi mua trên Aliexpress.com) tức rẻ hơn module 433Mhz một chút.
- Ít gặp sự cố (hiện tại tới lúc này ).
Phần cứng
- - 02 mạch arduino
- - 02 module RF24L01
- - 01 quang trở
- - 01 led và 1 điện trở 330ohm
- - Test board và dây nối.
Lắp mạch
cách nối module NRF24 với Arduino (Uno, Nano, Promini, Leonardo,...):
NRF24 | Arduino |
1 | GND |
2 | 3.3V |
3 | D9 |
4 | D10 |
5 | D13 |
6 | D11 |
7 | D12 |
Cách nối mạch với các dòng Mega
Lưu ý
Phần code các bạn nhớ đổi RF24 radio(9, 10) thành RF24 radio(9, 53) nhé.
Lập trình
tải thư viện RF24 Đoạn code của tôi như sau:
Dành cho transmitter:
- #include<SPI.h>
- #include"RF24.h"
-
- constuint64_tpipe=0xE8E8F0F0E1LL;// địa chỉ để phát
- RF24 radio(9,10);//thay 10 thành 53 với mega
- bytemsg[3];
- constintsensor=A0;
- intvalue=0;
-
- voidsetup(){
- //============================================================Module NRF24
- radio.begin();
- radio.setAutoAck(1);
- radio.setRetries(1,1);
- radio.setDataRate(RF24_1MBPS);// Tốc độ truyền
- radio.setPALevel(RF24_PA_MAX);// Dung lượng tối đa
- radio.setChannel(10);// Đặt kênh
- radio.openWritingPipe(pipe);// mở kênh
- pinMode(sensor,INPUT);
- }
-
- voidloop(){
- value=analogRead(sensor);
- msg[0]=value/4;
- radio.write(&msg,sizeof(msg));
- delay(50);
- }
Dành cho receiver
- #include<SPI.h>
- #include"RF24.h"
-
- constuint64_tpipe=0xE8E8F0F0E1LL;// địa chỉ phát
- RF24 radio(9,10);//thay 10 thành 53 với mega
- bytemsg[3];
- constintled=3;
- intled_st=0;
-
- voidsetup(){
- Serial.begin(9600);
- radio.begin();
- radio.setAutoAck(1);
- radio.setDataRate(RF24_1MBPS);// Tốc độ dữ liệu
- radio.setChannel(10);// Đặt kênh
- radio.openReadingPipe(1,pipe);
- radio.startListening();
- pinMode(led,OUTPUT);
- }
-
- voidloop(){
- if(radio.available()){
- while(radio.available()){
- radio.read(&msg,sizeof(msg));
- Serial.println(msg[0]);
- analogWrite(led,msg[0]);
- }
- }
- }