- Mô-đun RF nRF24L01
- Sơ đồ mạch
- Lập trình Raspberry Pi để gửi tin nhắn bằng nRF24l01
- Lập trình Arduino UNO để nhận tin nhắn bằng nRF24l01
Các nhà thiết kế sử dụng nhiều hệ thống giao tiếp không dây như Bluetooth Low Energy (BLE 4.0), Mô-đun Wi-Fi Zigbee, ESP8266, Mô-đun RF 433MHz, Lora, nRF, v.v. Và việc lựa chọn phương tiện phụ thuộc vào loại ứng dụng mà nó đang được sử dụng. tất cả, một phương tiện không dây phổ biến cho giao tiếp mạng cục bộ là nRF24L01. Các mô-đun này hoạt động trên băng tần 2.4GHz (ISM band) với tốc độ truyền từ 250Kbps đến 2Mbps, hợp pháp ở nhiều quốc gia và có thể được sử dụng trong các ứng dụng công nghiệp và y tế. Người ta cũng tuyên bố rằng với các ăng-ten thích hợp, các mô-đun này có thể truyền và nhận tín hiệu trong khoảng cách tối đa 100 mét giữa chúng. Trước đây chúng tôi đã sử dụng nRF24L01 với Arduino để điều khiển động cơ servo và tạo Phòng trò chuyện.
Ở đây chúng tôi sẽ sử dụng mô-đun thu phát RF nRF24L01 - 2.4GHz với Arduino UNO và Raspberry Pi để thiết lập giao tiếp không dây giữa chúng. Raspberry pi sẽ hoạt động như một bộ phát và Arduino Uno sẽ lắng nghe Raspberry Pi và in thông báo được gửi bởi Raspberry Pi bằng cách sử dụng nRF24L01 trên màn hình LCD 16x2. nRF24L01 cũng có khả năng BLE sẵn có và nó cũng có thể giao tiếp không dây bằng BLE.
Hướng dẫn được chia thành hai phần. Phần đầu tiên sẽ bao gồm giao diện của nRF24L01 với Arduino để hoạt động như Bộ thu và phần thứ hai sẽ bao gồm giao diện của nRF24L01 với Raspberry Pi để hoạt động như Bộ phát. Mã hoàn chỉnh cho cả hai phần có video hoạt động sẽ được đính kèm ở cuối hướng dẫn này.
Mô-đun RF nRF24L01
Các mô-đun nRF24L01 là các mô-đun thu phát, có nghĩa là mỗi mô-đun đều có thể gửi và nhận dữ liệu nhưng vì chúng là bán song công nên chúng có thể gửi hoặc nhận dữ liệu cùng một lúc. Mô-đun có vi mạch nRF24L01 chung từ các chất bán dẫn Bắc Âu chịu trách nhiệm truyền và nhận dữ liệu. IC giao tiếp bằng giao thức SPI và do đó có thể dễ dàng giao tiếp với bất kỳ bộ vi điều khiển nào. Nó trở nên dễ dàng hơn nhiều với Arduino vì các thư viện luôn có sẵn. Các sơ đồ chân của một module nRF24L01 tiêu chuẩn được hiển thị dưới đây
Mô-đun có điện áp hoạt động từ 1,9V đến 3,6V (thường là 3,3V) và tiêu thụ rất ít dòng điện chỉ 12mA trong quá trình hoạt động bình thường, làm cho nó hoạt động hiệu quả về pin và do đó thậm chí có thể chạy trên các ô đồng xu. Mặc dù điện áp hoạt động là 3,3V nhưng hầu hết các chân đều có khả năng chịu được 5V và do đó có thể được giao tiếp trực tiếp với các bộ vi điều khiển 5V như Arduino. Một ưu điểm khác của việc sử dụng các mô-đun này là mỗi mô-đun có 6 đường ống. Có nghĩa, mỗi mô-đun có thể giao tiếp với 6 mô-đun khác để truyền hoặc nhận dữ liệu. Điều này làm cho mô-đun phù hợp để tạo mạng hình sao hoặc lưới trong các ứng dụng IoT. Ngoài ra, chúng có phạm vi địa chỉ rộng gồm 125 ID duy nhất, do đó, trong một khu vực khép kín, chúng ta có thể sử dụng 125 trong số các mô-đun này mà không can thiệp vào nhau.
Sơ đồ mạch
nRF24L01 với Arduino:
Sơ đồ mạch để kết nối nRF24L01 với Arduino rất dễ dàng và không có nhiều linh kiện. Các nRF24L01 sẽ được nối với nhau bằng giao diện SPI và màn hình LCD 16x2 được giao tiếp với giao thức I2C mà chỉ sử dụng hai dây.
nRF24L01 với Raspberry Pi:
Sơ đồ mạch kết nối nRF24L01 với Raspberry Pi cũng rất đơn giản và chỉ sử dụng giao tiếp SPI để kết nối Raspberry Pi và nRF24l01.
Lập trình Raspberry Pi để gửi tin nhắn bằng nRF24l01
Việc lập trình Raspberry Pi sẽ được thực hiện bằng Python3. Bạn cũng có thể sử dụng C / C ++ làm Arduino. Nhưng đã có sẵn một thư viện cho nRF24l01 trong python, bạn có thể tải xuống từ trang github. Lưu ý rằng chương trình python và thư viện phải nằm trên cùng một thư mục, nếu không chương trình python sẽ không thể tìm thấy thư viện. Sau khi tải xuống thư viện, chỉ cần giải nén và tạo một thư mục nơi lưu trữ tất cả các chương trình và tệp thư viện. Khi cài đặt thư viện xong, chỉ cần bắt đầu viết chương trình. Chương trình bắt đầu với việc bao gồm các thư viện sẽ được sử dụng trong mã như thư viện GPIO nhập để truy cập GPIO Raspberry Pi và thời gian nhập để truy cập các chức năng liên quan đến thời gian. Nếu bạn chưa quen với Raspberry Pi thì hãy quay lại bắt đầu với Raspberry pi.
nhập RPi.GPIO dưới dạng thời gian nhập GPIO nhập spidev từ lib_nrf24 nhập NRF24
Đặt chế độ GPIO trong " Kênh Broadcom SOC". Điều này có nghĩa là bạn đang tham chiếu đến các chân bằng số "kênh Broadcom SOC", đây là các số sau "GPIO" (ví dụ: GPIO01, GPIO02…). Đây không phải là số bảng.
GPIO.setmode (GPIO.BCM)
Tiếp theo, chúng tôi sẽ thiết lập địa chỉ ống dẫn. Địa chỉ này rất quan trọng để giao tiếp với bộ thu Arduino. Địa chỉ sẽ nằm trong mã hex.
ống =,]
Bắt đầu radio bằng cách sử dụng GPIO08 làm CE và GPIO25 làm chân CSN.
radio.begin (0, 25)
Đặt kích thước tải trọng là 32 bit, địa chỉ kênh là 76, tốc độ dữ liệu 1 mbps và mức năng lượng là tối thiểu.
radio.setPayloadSize (32) radio.setChannel (0x76) radio.setDataRate (NRF24.BR_1MBPS) radio.setPALevel (NRF24.PA_MIN)
Mở các đường ống để bắt đầu ghi dữ liệu và in các chi tiết cơ bản của nRF24l01.
radio.openWritingPipe (pipe) radio.printDetails ()
Soạn một tin nhắn ở dạng chuỗi. Thông báo này sẽ được gửi đến Arduino UNO.
sendMessage = list ("Hi..Arduino UNO") trong khi len (sendMessage) <32: sendMessage.append (0)
Bắt đầu ghi vào radio và tiếp tục viết chuỗi hoàn chỉnh cho đến khi radio khả dụng. Cùng với nó, ghi lại thời gian và in một tuyên bố gỡ lỗi về việc gửi tin nhắn.
trong khi True: start = time.time () radio.write (sendMessage) print ("Đã gửi tin nhắn: {}". format (sendMessage)) send radio.startListening ()
Nếu chuỗi được hoàn thành và đường ống bị đóng thì hãy in thông báo gỡ lỗi đã hết thời gian.
trong khi không radio.available (0): time.sleep (1/100) nếu time.time () - Bắt đầu> 2: print ("Đã hết giờ.") thông báo lỗi # in nếu đài phát thanh bị ngắt kết nối hoặc không hoạt động nữa phá vỡ
Ngừng nghe radio và đóng liên lạc và khởi động lại liên lạc sau 3 giây để gửi tin nhắn khác.
radio.stopListening () # đóng thời gian radio.sleep (3) # cho độ trễ 3 giây
Chương trình Raspberry rất đơn giản để hiểu nếu bạn biết những điều cơ bản về python. Chương trình Python hoàn chỉnh được đưa ra ở cuối hướng dẫn.
Thực thi Chương trình Python trong Raspberry Pi:
Việc thực thi chương trình rất dễ dàng sau khi làm theo các bước sau:
- Lưu các tệp Chương trình Python và Thư viện trong cùng một thư mục.
- Tên tệp chương trình của tôi cho Người gửi là nrfsend.py và mọi tệp đều nằm trong cùng một thư mục
- Đi tới Command Terminal của Raspberry Pi. Và định vị tệp chương trình python bằng cách sử dụng lệnh “cd”.
- Sau đó, mở thư mục và viết lệnh “ sudo python3 your_program.py ” và nhấn enter. Bạn sẽ có thể xem các chi tiết cơ bản của nRf24 và radio sẽ bắt đầu gửi tin nhắn sau mỗi 3 giây. Gỡ lỗi tin nhắn sẽ hiển thị sau khi gửi xong với tất cả các ký tự được gửi.
Bây giờ chúng ta sẽ thấy chương trình tương tự như bộ thu trong Arduino UNO.
Lập trình Arduino UNO để nhận tin nhắn bằng nRF24l01
Lập trình Arduino UNO tương tự như lập trình Raspberry Pi. Chúng tôi sẽ làm theo các phương pháp tương tự nhưng với ngôn ngữ lập trình và các bước khác nhau. Các bước sẽ bao gồm phần đọc của nRF24l01. Bạn có thể tải xuống thư viện nRF24l01 cho Arduino từ trang github. Bắt đầu với việc bao gồm các thư viện cần thiết. Chúng tôi đang sử dụng LCD 16x2 sử dụng I2C Shield, vì vậy hãy bao gồm thư viện Wire.h và nRF24l01 cũng được giao tiếp với SPI vì vậy hãy bao gồm thư viện SPI.
#include
Bao gồm thư viện RF24 và LCD để truy cập các chức năng RF24 và LCD.
#include
Địa chỉ LCD cho I2C là 27 và nó là LCD 16x2, vì vậy hãy viết điều này vào hàm.
Màn hình LCD LiquidCrystal_I2C (0x27, 16, 2);
RF24 được kết nối với các chân SPI tiêu chuẩn cùng với CE ở chân 9 và CSN ở chân 10.
Đài RF24 (9, 10);
Khởi động radio, đặt mức công suất và đặt kênh thành 76. Đồng thời đặt địa chỉ đường ống giống như Raspberry Pi và mở đường dẫn để đọc.
radio.begin (); radio.setPALevel (RF24_PA_MAX); radio.setChannel (0x76); const uint64_t pipe = 0xE0E0F1F1E0LL; radio.openReadingPipe (1, ống dẫn);
Bắt đầu giao tiếp I2C và khởi động màn hình LCD.
Wire.begin (); lcd.begin (); lcd.home (); lcd.print ("Sẵn sàng nhận");
Bắt đầu nghe radio để biết tin nhắn đến và đặt độ dài tin nhắn là 32 byte.
radio.startListening (); char ReceivedMessage = {0}
Nếu radio được đính kèm thì hãy bắt đầu đọc tin nhắn và lưu nó. In tin nhắn ra màn hình nối tiếp và cũng in ra màn hình cho đến khi có tin nhắn tiếp theo. Dừng đài để nghe và thử lại sau một khoảng thời gian. Đây là 10 micro giây.
if (radio.available ()) { radio.read (Đã nhận được tin nhắn, sizeof (Tin nhắn nhận được)); Serial.println (Nhận được tin nhắn); Serial.println ("Đang tắt đài."); radio.stopListening (); Chuỗi stringMessage (Đã nhận); lcd.clear (); chậm trễ (1000); lcd.print (stringMessage); }
Tải mã hoàn chỉnh được cung cấp ở cuối lên Arduino UNO và đợi nhận được thông báo.
Phần này kết thúc hướng dẫn đầy đủ về cách gửi tin nhắn bằng Raspberry Pi & nRf24l01 và nhận nó bằng Arduino UNO & nRF24l01. Tin nhắn sẽ được in ra màn hình LCD 16x2. Địa chỉ đường ống rất quan trọng trong cả Arduino UNO và Raspberry Pi. Nếu bạn gặp bất kỳ khó khăn nào trong khi thực hiện dự án này, vui lòng bình luận bên dưới hoặc truy cập diễn đàn để thảo luận chi tiết hơn.
Cũng kiểm tra video trình diễn bên dưới.