20.1 C
Hanoi
Thứ Hai, Tháng Mười 18, 2021
Home LẬP TRÌNH VI ĐIỀU KHIỂN ARDUINO Truyền nhận dữ liệu không dây Arduino với NRF24L01

Truyền nhận dữ liệu không dây Arduino với NRF24L01

Giới thiệu module NRF24L01

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).

NRF24L01 hoạt động ở giải tần số 2,4GHz và có khả năng truyền tín hiệu 2 chiều, tức là 1 module có thể là transmitter vừa có thể là receiver.

Lưu ý: Cấp nguồn cho module sử dụng điện áp từ 1.9 – 3.6V

Hình ảnh một số module NRF24L01 trên thị trường:

Module NRF24I01 loại thường, có khoảng cách thu phát khoảng 100m, khoảng 30-50m trong nhà.

Pin on Pin Diagrams

NRF24L01+PA+LNA được thiết kế với bộ khuyếch đại công suất và anten SMA giúp tăng khoảng cách liên lạc không dây lên đến 1Km trong điều kiện không có vật cản.

ACES: ICS3U

Mạch thu phát RF NRF24L01 mini được sử dụng để truyền nhận dữ liệu không dây qua sóng RF 2.4GHZ, mạch có thiết kế nhỏ gọn, độ bền cao, khoảng cách tối đa 100m.

NRF24L01 Mini Wireless Module - Micro Robotics

 

Sơ đồ nối dây Arduino và NRF24L01

Do module kết nối với Arduino theo chuẩn truyền SPI nên bắt buộc ta phải kết nối 3 chân của module vào đúng 3 chân: MOSI, MISO, SCK của Arduino như hình bên dưới. 2 chân CE và CSN có thể thay đổi sang chân bất kỳ của Arduino.

Kết nối NRF24L01 với Arduino

                                         Sơ đồ kết nối với Arduino

Ví dụ kết nối với các loại Arduino khác:

Basics: Project 083a NRF24L01 2.4GHZ RF transceiver module at Acoptex.com / ACOPTEX.COM

Arduino NRF24 example 2019 library range

Arduino 3.3V Pro Mini and NRF24L01 2.4GHz Wiring Diagram - bluetin.io

nRF24L01 and UNO R3 Tutorial - Project Guidance - Arduino Forum

Arduino Pro Micro connections pinouts with NRF24Ç01+ radio. | Download Scientific Diagram

 

Code mẫu truyền và nhận 1 chiều của NRF24L01

Trước khi bắt đầu, bạn cần download thư viện NRF24L01 tại đây.

Code bên phát để truyền dòng “Hello World”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
*
* Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 10); // Chọn chân kết nối CE, CSN
const byte address[6] = "00001"; // Địa chỉ cần truyền
void setup() {
  radio.begin();
  radio.openWritingPipe(address); // Set địa chỉ truyền
  radio.setPALevel(RF24_PA_MIN); // Set chế độ hoạt động
  radio.stopListening(); // Đặt module NRF24L01 ở chế độ phát
}
void loop() {
  const char text[] = "Hello World";
  radio.write(&amp;text, sizeof(text)); //Gửi dữ liệu có trong mảng text
  delay(1000);
}

Code bên nhận thông tin và gửi thông tin đó lên Serial

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
* Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 10); // Chọn chân kết nối CE, CSN
const byte address[6] = "00001"; // Địa chỉ nhận
void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0, address); // Set địa chỉ nhận
  radio.setPALevel(RF24_PA_MIN); // Set chế độ hoạt động
  radio.startListening(); // Set module NRF24L01 ở chế độ thu
}
void loop() {
  if (radio.available()) { // Kiểm tra có dữ liệu thu được hay không?
    char text[32] = "";
    radio.read(&amp;text, sizeof(text)); // Đọc dữ liệu thu được
    Serial.println(text); // Chuyển dữ liệu lên cổng Serial
  }
}

Truyền nhận 2 chiều sử dụng NRF24L01

Lúc này ta đặt 1 module phát ở địa chỉ 00001 và thu ở địa chỉ 00002. Module thứ 2 đặt ngược lại là phát ở địa chỉ 00002 và thu ở địa chỉ 00001. Sau khi phát sẽ đặt ngay về chế độ thu.

Sơ đồ kết nối của 2 module:

Kết nối NRF24L01 Arduino truyền nhận song song

Code module 1: Kết nối với biến trở

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
*
* Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define led 12
RF24 radio(9, 10); // CE, CSN
const byte addresses[][6] = {"00001", "00002"};
boolean buttonState = 0;
void setup() {
  pinMode(12, OUTPUT);
  radio.begin();
  radio.openWritingPipe(addresses[1]); // 00002
  radio.openReadingPipe(1, addresses[0]); // 00001
  radio.setPALevel(RF24_PA_MIN);
}
void loop() {
  delay(5);
  radio.stopListening();
  int potValue = analogRead(A0);
  int angleValue = map(potValue, 0, 1023, 0, 180);
  radio.write(&amp;angleValue, sizeof(angleValue));
  delay(5);
  radio.startListening();
  while (!radio.available());
  radio.read(&amp;buttonState, sizeof(buttonState));
  if (buttonState == HIGH) {
    digitalWrite(led, HIGH);
  }
  else {
    digitalWrite(led, LOW);
  }
}

Code module 2: Kết nối với servo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
*
* Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
#define button 4
RF24 radio(7, 8); // CE, CSN
const byte addresses[][6] = {"00001", "00002"};
Servo myServo;
boolean buttonState = 0;
void setup() {
  pinMode(button, INPUT);
  myServo.attach(5);
  radio.begin();
  radio.openWritingPipe(addresses[0]); // 00001
  radio.openReadingPipe(1, addresses[1]); // 00002
  radio.setPALevel(RF24_PA_MIN);
}
void loop() {
  delay(5);
  radio.startListening();
  if ( radio.available()) {
    while (radio.available()) {
      int angleV = 0;
      radio.read(&amp;angleV, sizeof(angleV));
      myServo.write(angleV);
    }
    delay(5);
    radio.stopListening();
    buttonState = digitalRead(button);
    radio.write(&amp;buttonState, sizeof(buttonState));
  }
}

LEAVE A REPLY

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Tổng hợp trang web liên quan thiết kế phần cứng điện tử

4 trang web tải thư viện SCH/PCB và 3D https://www.ultralibrarian.com/ https://componentsearchengine.com/ https://octopart.com/ https://www.snapeda.com/ https://componentsearchengine.com/ 2 trang tìm 3D cho thư viện của các bạn bao gồm: https://www.3dcontentcentral.com/ https://grabcad.com/library 4 trang cung cấp các...

Mạch đóng ngắt Relay sử dụng Transistor

Giới thiệu về Relay Rơ le (Relay) là một công tắc chuyển đổi hoạt động bằng điện. Dòng điện chạy qua cuộn dây của rơ...

Nạp Bootloader cho Arduino Pro Micro

Bootloader là một chương trình nhỏ được nạp sẵn vào chip vi điều khiển trên Arduino, nhờ đó bạn lập trình cho Arduino một...

Một vài lưu ý khi thiết kế sản phẩm đáp ứng EMC

Mỗi bảng mạch in (PCB) phải có thể hoạt động mà không bị gián đoạn do nhiễu từ các thiết bị khác và không...

Recent Comments