Linh Kiện 69_Module NRF24L01 2.4Ghz – Cách Giao Tiếp Với VĐK ...
Có thể bạn quan tâm
Chào các bạn! Hôm nay Linh kiện 69 xin chia sẻ với các bạn cách thức sử dụng module nRF24L01 2.4Ghz
Ảnh mặt trước của Module nRF24L01 2.4Ghz
Ảnh chụp nghiêng Module nRF24L01 2.4Ghz
Sơ đồ phần cứng của Module nRF24L01 2.4Ghz:
Thông số kĩ thuật của Module nRF24L01 2.4Ghz:
– Radio:
+ Hoạt động ở giải tần 2.4G.
+ Có 126 kênh.
+ Truyền và nhận dữ liệu.
+ Truyền tốc độ cao 1Mbps hoặc 2Mbps.
– Công suất phát:
+ Có thể cài đặt được 4 công suất nguồn phát: 0, – 6, – 12, – 18dBm.
– Thu:
+ Có bộ lọc nhiễu tại đầu thu.
+ Khuếch đại bị ảnh hưởng bởi nhiễu thấp (LNA).
– Nguồn cấp:
+ Hoạt động từ 1.9-3.6V.
+ Các chân IO chạy được cả 3.3 lẫn 5V.
– Giao tiếp:
+ 4 pin SPI.
+ Tốc độ tối đa 8Mbps.
+ 3-32 bytes trên 1 khung truyền nhận. Chú ý: Tốc độ truyền càng nhanh khoảng cách truyền càng gần, ngược lại tốc độ truyền càng chậm thì khoảng cách thu được tín hiệu càng xa. Tùy theo mục đích sử dụng các bạn cấu hình cho phù hợp
Module thu phát không dây nRF24L01 hoạt động theo giao thức SPI, SPI là chuẩn truyền thông nối tiếp tốc độ cao. Đây là kiểu truyền thông Master-Slave, trong đó có 1 chip Master điều phối quá trình tuyền thông và các chip Slaves được điều khiển bởi Master vì thế truyền thông chỉ xảy ra giữa Master và Slave. SPI là một cách truyền song công (full duplex) nghĩa là tại cùng một thời điểm quá trình truyền và nhận có thể xảy ra đồng thời. SPI đôi khi được gọi là chuẩn truyền thông “4 dây” vì có 4 đường giao tiếp trong chuẩn này đó là SCK (Serial Clock), MISO (Master Input Slave Output), MOSI (Master Ouput Slave Input) và SS (Slave Select). Sơ đồ kết nối vi điều khiển:
Nguyên lí hoạt động:
1. Cấu hình địa chỉ truyền nhận
Đầu tiên ta cấu hình địa chỉ truyền nhận dữ liệu, từ 3 – 5 bytes tùy ý, nhưng địa chỉ truyền như thế nào thì địa chỉ nhận của chip tương ứng phải giống như thế để có thể thu được tín hiệu. Trong chương trình mình dùng 5 byte cho địa chỉ truyền nhận.
#define TX_ADR_WIDTH 5 // 5 uints TX address width #define RX_ADR_WIDTH 5 // 5 uints RX address width unsigned char TX_ADDRESS[TX_ADR_WIDTH]={0x68,0x31,0x08,0x10,0x01}; unsigned char RX_ADDRESS[RX_ADR_WIDTH]={0x68,0x31,0x08,0x10,0x01}; Hàm cấu hình địa chỉ truyền nhận SPI_Write_Buf(WRITE_RE + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); SPI_Write_Buf(WRITE_RE+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH); 2. Khung truyền dữ liệuKhung dữ liệu từ 0-32 byte, hiện tại mình dùng 32 byte. Nếu bạn dùng số lượng byte khác thì có thể cấu hình trong biến ở đây mình truyền 32 bytes.
#define TX_PLOAD_WIDTH 32 // 32 uints TX payload #define RX_PLOAD_WIDTH 32 // 32 uints TX payload Hàm nRF24L01_TxPacket(unsigned char * tx_buf) gửi dữ liệu trong mảng tx_buf SPI_Write_Buf(WR_TX_PLOAD, tx_buf,TX_PLOAD_WIDTH);//gửi dữ liệu 1 bytesHàm cấu hình số bytes nhận trong void init_NRF24L01(void)
SPI_Write_Buf(WRITE_RE+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH); Độ rộng bytes nhận 32 bytes (Nhận tối đa 32bytes).3. Kênh truyền và địa chỉ nhận
– nRF24L01 có 126 kênh truyền. Ban có thể lựa chọn kênh truyền nào bạn muốn bằng hàm.
SPI_RW_Reg(WRITE_RE + RF_CH, 0);– Trong 1 kênh truyền, nRF24L01 có thể nhận được 6 luồng dữ liệu. Do đó bạn phải lựa chọn 1 trong 6 luồng đó.
SPI_RW_Reg(WRITE_RE + EN_AA, 0x01); // 0x01 Luồng P0 // 0x02 Luồng P1 // 0x03 Luồng P2 // 0x04 Luồng P3 // 0x05 Luồng P4 // 0x06 Luồng P54. Cấu hình tốc độ truyền công suất phát
– Hàm cấu hình công suất phát.
SPI_RW_Reg(WRITE_RE + RF_SETUP, 0x07);Cấu hình tốc độ truyền 1Mpbs, công suất phát 0dmb
Để cấu hình tốc độ truyền theo công suất phát theo riêng mình các bạn chỉ cần sửa giá trị 0x07 thành giá trị khác dựa theo bảng sau
5. Mã CRC, truyền nhận
– Truyền:
SPI_RW_Reg(WRITE_REG + CONFIG, 0x0E); // Enable CRC, 2 byte CRC– Nhận:
SPI_RW_Reg(WRITE_REG + CONFIG, 0x0F); // Enable CRC, 2 byte CRCCác bạn nhìn theo bảng CONFIG Bit thứ 0 để cấu hình mode truyền hoặc nhận. Bằng “1” ứng với PRX cấu hình nhận, bằng “0” ứng với PTX cấu hình truyền. Bit thứ 1: “0” chế độ tiết kiệm năng lượng hay trạng thái nghỉ, bằng “1” cho phép NRF24L01 hoạt động. 6. Cách gửi dữ liệu:
Sau khi cấu hình các trạng thái hoạt động của nRF24L01 thông qua hàm:
void init_NRF24L01(void)
Để gửi dữ liệu đi bạn làm theo các bước sau.
– Cho dữ liệu vào buffer, biến TxBuf[32]
– Chọn nRF24L01 ở chế độ phát, gọi hàm void SetTX_Mode(void);
– Gọi hàm void nRF24L01_TxPacket(unsigned char * tx_buf) để truyền dữ liệu trong TxBuf[32] đi
7. Cách nhận dữ liệu của Module nRF24L01 2.4Ghz:
– Chọn nRF24L01 ở chế độ thu, gọi hàm void SetRX_Mode(void);
– Độ dữ liệu trong bộ đệm sau khi gọi hàm
unsigned char nRF24L01_RxPacket(unsigned char* rx_buf);
* Kết luận:
Mình sẽ nói một cách đơn giản để bạn có định hướng:
Khi giao tiếp với nRF, các bước bạn phải làm như sau:
+ Chân CSN phải đang ở trạng thái cao, sau đó kéo về 0 để nRF đang hiểu là ta đang giao tiếp với nó.
+ Gửi byte cho nRF, byte đầu tiên bạn gửi phải là 1 byte lệnh (command byte) (các loại byte lệnh bạn đọc trong datasheet nhé), cùng lúc đó, nRL sẽ gửi về cho bạn giá trị của thanh ghi status (luôn luôn là như vậy), các byte sau đó thì tùy loại cmd thì nRF sẽ phản hồi lại tùy vào cmd bạn sử dụng.
+ Kéo chân CSN lên mức cao để kết thúc việc giao tiếp.
Xem thêm tại: http://linhkien69.vn/module-nrf24l01-24ghz-cach-giao-tiep-voi-vdk-arm-cortexm3_n57981_g723.aspx#sthash.Ib7zZkdI.dpuf
Linh Kiện 69 chúc các bạn học tập và làm việc thành công!
21.007216 105.844667 25 Trần Đại Nghĩa, Bách Khoa, Hai Bà Trưng, Hà Nội, Việt NamChia sẻ:
Từ khóa » Nguyên Lý Nrf24l01
-
Module Không Dây RF NRF24L01 - Blog Mecsu
-
Module NRF24L01 2.4G - Cách Thức Sử Dụng Với Tất Cả Các ...
-
[ Lập Trình Pic ] Bài 14: Giao Tiếp Với NRF24L01 - TuHu
-
NRF24L01: Mô-đun Giao Tiếp Không Dây Cho Arduino
-
E) Hoạt động Của NRF24L01. - Tài Liệu Text - 123doc
-
Sử Dụng Module NRF24L01 - Thu Phát Sóng Vô Tuyến 2.4GHz Với ...
-
Sử Dụng Module NRF24L01 - Linhkienchatluong
-
NRF24L01 Truyền Tín Hiệu Không Dây RF - Vidieukhien.Xyz
-
BAI 2 - NRF24L01 - V1 | PDF - Scribd
-
Mạch Thu Phát RF 100m NRF24L01 - ĐIỆN TỬ TƯƠNG LAI
-
NRF24L01 Giao Tiếp STM32, Thu Phát RF NRF24L01 2.4GHz + ...
-
DIY Joystick điều Khiển Xe 4 Bánh Với NRF24L01 - Điện Tử Hello
-
Arduino Giao Tiếp DHT11 Gửi đến điện Thoại Dùng NRF24L01