0947.165.304

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

  • Đoạn code của tôi như sau:

    Dành cho transmitter:

    1. #include<SPI.h>
    2. #include”RF24.h”
    3. constuint64_tpipe=0xE8E8F0F0E1LL;// địa chỉ để phát
    4. RF24 radio(9,10);//thay 10 thành 53 với mega
    5. bytemsg[3];
    6. constintsensor=A0;
    7. intvalue=0;
    8. voidsetup(){
    9. //============================================================Module NRF24
    10. radio.begin();
    11. radio.setAutoAck(1);
    12. radio.setRetries(1,1);
    13. radio.setDataRate(RF24_1MBPS);// Tốc độ truyền
    14. radio.setPALevel(RF24_PA_MAX);// Dung lượng tối đa
    15. radio.setChannel(10);// Đặt kênh
    16. radio.openWritingPipe(pipe);// mở kênh
    17. pinMode(sensor,INPUT);
    18. }
    19. voidloop(){
    20. value=analogRead(sensor);
    21. msg[0]=value/4;
    22. radio.write(&msg,sizeof(msg));
    23. delay(50);
    24. }

    Dành cho receiver

    1. #include<SPI.h>
    2. #include”RF24.h”
    3. constuint64_tpipe=0xE8E8F0F0E1LL;// địa chỉ phát
    4. RF24 radio(9,10);//thay 10 thành 53 với mega
    5. bytemsg[3];
    6. constintled=3;
    7. intled_st=0;
    8. voidsetup(){
    9. Serial.begin(9600);
    10. radio.begin();
    11. radio.setAutoAck(1);
    12. radio.setDataRate(RF24_1MBPS);// Tốc độ dữ liệu
    13. radio.setChannel(10);// Đặt kênh
    14. radio.openReadingPipe(1,pipe);
    15. radio.startListening();
    16. pinMode(led,OUTPUT);
    17. }
    18. voidloop(){
    19. if(radio.available()){
    20. while(radio.available()){
    21. radio.read(&msg,sizeof(msg));
    22. Serial.println(msg[0]);
    23. analogWrite(led,msg[0]);
    24. }
    25. }
    26. }

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Gọi ngay