Ứng dụng: Truyền dữ liệu không dây, điều khiển từ xa, Mạng nội bộ đơn giản.
#nRF24L01 #rf #khongday #dieukhientuxa #cachcaithuvienarduino
Các môđun RF này rất phổ biến trong các ứng dụng Arduino. NRF24L01 là được sử dụng nhiều trên ứng dụng yêu cầu điều khiển không dây. Đây là các bộ thu phát có nghĩa là mỗi mô-đun có thể truyền và nhận dữ liệu. Các mô-đun này rất rẻ và bạn có thể sử dụng chúng với bất kỳ vi điều khiển (MCU) nào.
Thông số kỹ thuật nRF24L01 - Bộ thu phát RF 2.4GHz
IC thu phát đơn tần 2,4 GHz GFSK RF đơn chip (GFSK: Gaussian frequency-shift keying truyền đi bằng hình thức biến đổi tần số Gaussian ).
Phạm vi với Anten: Tốc độ 250Kb (không vật cản)> 1000 mét
Công suất: Tiêu thụ điện năng cực thấp
Điện áp đầu vào: 3,3V
Chân: dung sai 5V
Lập trình NRF24L01 với Arduino
Thư viện được sử dụng trong chương trình này là: http://www.airspayce.com/mikem/arduino/RadioHead/RadioHead-1.46.zip
Bạn cần cài đặt chương trình này trước.
Các chân của nRF24L01
CHÚ Ý ĐIỆN ÁP CẤP CHO MODULE LÀ 3.3V NẾU KHÔNG nRF24L01 SẼ BỊ CHÁY
Sau khi cài thư viện xong, Bạn vào Arduino IDE
File -> Examples -> RadioHead -> nrf24 -> nrf24_client
Ở đây là có 1 bộ phát nrf24_client, và 1 bộ chủ nrf24_server
Cách đấu nối với Arduino dành cho nrf24_client
Chương trình ở nrf24_client.
// nrf24_client
#include <SPI.h>
#include <RH_NRF24.h>
RH_NRF24 nrf24;
void setup()
{
Serial.begin(9600);
if (!nrf24.init())
Serial.println("Khoi dong nrf24 bi loi");
// Mặc định đặt ở tần số 2.402 GHz (Kênh 2), 2Mbps, 0dBm
if (!nrf24.setChannel(1))
Serial.println("setChannel bi loi");
if (!nrf24.setRF(RH_NRF24::DataRate2Mbps, RH_NRF24::TransmitPower0dBm))
Serial.println("setRF loi");
}
void loop()
{
Serial.println("Gui du lieu sang nrf24_server");
// Gửi dữ liệu -Hello World!- sang server
uint8_t data[] = "Hello World!";
nrf24.send(data, sizeof(data));
nrf24.waitPacketSent();
// Chờ nrf24_server trả lời
uint8_t buf[RH_NRF24_MAX_MESSAGE_LEN];
uint8_t len = sizeof(buf);
if (nrf24.waitAvailableTimeout(500))
{
// Chờ trả lời
if (nrf24.recv(buf, &len))
{
Serial.print("Nhan duoc tra loi: ");
Serial.println((char*)buf);
}
else
{
Serial.println("recv loi");
}
}
else
{
Serial.println("Khong nhan duoc tra loi, Ban can phai bat nrf24_server de nhan du lieu");
}
delay(400);
}
Sơ đồ nối dây cho nrf24_server
Chương trình mẫu nrf24_server
File -> Examples -> RadioHead -> nrf24 -> nrf24_server
// nrf24_server
#include <SPI.h>
#include <RH_NRF24.h>
// Singleton instance of the radio driver
RH_NRF24 nrf24;
// RH_NRF24 nrf24(8, 7); // use this to be electrically compatible with Mirf
// RH_NRF24 nrf24(8, 10);// For Leonardo, need explicit SS pin
// RH_NRF24 nrf24(8, 7); // For RFM73 on Anarduino Mini
void setup()
{
Serial.begin(9600);
while (!Serial)
; // wait for serial port to connect. Needed for Leonardo only
if (!nrf24.init())
Serial.println("init failed");
// Defaults after init are 2.402 GHz (channel 2), 2Mbps, 0dBm
if (!nrf24.setChannel(1))
Serial.println("setChannel failed");
if (!nrf24.setRF(RH_NRF24::DataRate2Mbps, RH_NRF24::TransmitPower0dBm))
Serial.println("setRF failed");
}
void loop()
{
if (nrf24.available())
{
// Should be a message for us now
uint8_t buf[RH_NRF24_MAX_MESSAGE_LEN];
uint8_t len = sizeof(buf);
if (nrf24.recv(buf, &len))
{
// NRF24::printBuffer("request: ", buf, len);
Serial.print("Nhan duoc yeu cau: ");
Serial.println((char*)buf);
// Send a reply
uint8_t data[] = "Va tra loi: hi you!";
nrf24.send(data, sizeof(data));
nrf24.waitPacketSent();
Serial.println("Sent a reply");
}
else
{
Serial.println("recv failed");
}
}
}
Mạch kết nối rất tốt khi máy thu và máy phát khá gần nhau. nếu bạn tách chúng ra quá xa, bạn sẽ mất liên lạc.
Phạm vi giao tiếp sẽ thay đổi. Nó phụ thuộc vào mức độ nhiễu của môi trường, bạn cần dùng Anten đặt ngoài trời để kết nối được tốt hơn !.