nRF24L01 dengan Arduino: Kod Transmitter, Receiver dan Fix Kapasitor

Cartoon of two black nRF24L01 radio modules with gold zig-zag antenna traces facing each other across teal and orange radio waves, a fingertip pressing a black button on a white breadboard beside the left module and a black electrolytic capacitor with a grey stripe standing beside the right one

Dua Arduino boleh bercakap melalui sepasang modul nRF24L01 dalam masa lebih kurang sejam: dawai kedua-dua modul dengan cara yang sama, beri kedua-dua hujung address lima bait yang serupa, dan jalankan satu sketch yang menulis dan satu lagi yang mendengar. Langkah yang paling kerap dilangkau ialah kapasitor 10–100 µF merentasi pin VCC dan GND modul itu sendiri — tanpanya radio menjawab pada SPI tetapi tetap tidak menghantar apa-apa.

Apa yang anda perlukan untuk menghubungkan dua Arduino tanpa wayar?

Modul nRF24L01 ialah transceiver, bukan transmitter — board yang sama menghantar dan menerima, jadi satu link perlukan dua modul dan dua board untuk memacunya. Butang duduk pada node penghantar sahaja, dan node penerima melapor melalui Serial sehingga anda beri ia sesuatu untuk disuis. Kedua-dua node tetap dapat breadboard, kerana di situlah kapasitor setiap modul merentasi VCC ke GND.

Pilihan — naik taraf jarak, beban sebenar untuk disuis, dan kapasitornya

ItemPriceQty
High Performance NRF24L01 RF Wireless Transceiver Module Antenna 2.4Ghz 1100m - NRF24L01 + ANTENNAHigh Performance NRF24L01 RF Wireless Transceiver Module Antenna 2.4Ghz 1100m - NRF24L01 + ANTENNANRF24ANRM14.25
Relay Module 3.3V 5V 12V 1/2/4/8 Ways Optocoupler Trigger Relay Module 1 2 4 8 Channel Relay Module - 5V RELAY MODULE(1WAY)Relay Module 3.3V 5V 12V 1/2/4/8 Ways Optocoupler Trigger Relay Module 1 2 4 8 Channel Relay Module - 5V RELAY MODULE(1WAY)1WRELAYRM3.15
Electronic Component Set Beginner Electrical Learning Kit For Arduino Beginner Learning - ELECTRICAL STARTER KITElectronic Component Set Beginner Electrical Learning Kit For Arduino Beginner Learning - ELECTRICAL STARTER KITELECTRKRM39.95

Versi antena ialah naik taraf jarak untuk KEDUA-DUA hujung, bukan satu: auto-acknowledgement bermakna node yang jauh turut menghantar, jadi satu hujung sahaja yang dinaik taraf masih terhad oleh hujung yang satu lagi. Modul relay memberi node penerima sesuatu untuk disuis. Kapasitor yang binaan ini perlukan ialah elektrolitik 10–100 µF — starter kit itulah tempat mencarinya, kerana ia membawa kapasitor seramik dan elektrolitik bersama perintang, LED dan breadboard.

Lapan pinnya berdiri dalam dua baris 2×4, jadi nRF24L01 tidak boleh duduk terus dalam breadboard — dua baris itu akan mendarat pada jalur sambungan yang sama lalu tersambung pintas sesama sendiri. Jumper male-to-female yang muat: hujung female mencengkam pin modul, hujung male masuk ke soket Uno. Jumper male-to-male pula mendawai butang pada breadboard, dan pin telanjangnya diapit dalam terminal skru relay. Uno FT232 sesuai untuk PC yang bergelut dengan driver CH340.

Bagaimana cara mendawai nRF24L01 ke Arduino Uno?

nRF24L01 bercakap SPI, jadi tiga daripada pinnya mendarat pada pin SPI tetap Uno dan tidak boleh dipindahkan; CE dan CSN pula output biasa, dipilih ikut kebiasaan. Pin 1 ialah pin yang ada pad pateri segi empat di bawahnya. Kedua-dua node didawai serupa — peranannya ditentukan dalam perisian.

Pin modul Pin Uno Apa fungsinya
1 GND GND Ground, dikongsi dengan kaki negatif kapasitor
2 VCC 3V3 3.3 V sahaja. 5 V di sini memusnahkan cipnya
3 CE D9 Chip enable — menaikkan radio ke udara. Mana-mana pin kosong
4 CSN D10 Chip select SPI. Mana-mana pin kosong
5 SCK D13 Clock SPI. Tetap
6 MOSI D11 Uno ke modul. Tetap
7 MISO D12 Modul ke Uno. Tetap
8 IRQ biar terbuka Output interrupt. Sketch ini poll sebaliknya

Pin bekalan dan pin logik ikut peraturan yang berbeza, dan mencampur-adukkan keduanya itulah yang membunuh modul. Datasheet Nordic meletakkan VDD antara 1.9 V dan 3.6 V mutlak, jadi rel 5 V Uno lebih kurang 40% melebihi maksimum. Pin digitalnya pula dirating berasingan sehingga 5.25 V, dan itulah sebabnya Uno memacu CE, CSN, SCK dan MOSI terus masuk tanpa level shifter. Bekalan daripada 3V3, isyarat daripada pin logik 5 V: kedua-duanya betul serentak.

Butang tactile itu satu-satunya pendawaian lain, dan ia menyembunyikan satu perangkap: empat kakinya sebenarnya dua pasang yang bercantum, dua kaki di setiap sisi badannya bersambung kekal di dalam. Dudukkan ia merentasi alur tengah breadboard supaya satu pasang mendarat di setiap belah, kemudian bawa satu kaki ke D2 dan kaki yang bertentangan secara pepenjuru ke GND — pepenjuru sentiasa pasangan yang menyuis. Pusing suku pusingan sahaja, setiap pasangan yang bercantum akan merentasi alur itu dengan sendirinya, dan itu terbaca sebagai butang yang ditekan selama-lamanya. INPUT_PULLUP menahan D2 pada HIGH melalui perintang di dalam ATmega, jadi tiada perintang luaran diperlukan.

Melihat dua board benar-benar menghantar mesej memang membantu sebelum anda melabur masa:

Kenapa nRF24L01 tidak berfungsi, dan bagaimana kapasitor membetulkannya?

Kegagalan klasik nRF24L01 ada tanda tangannya sendiri: radio.begin() berjaya, modul memulangkan registernya dengan betul, dan radio.write() tetap memulangkan false setiap kali. SPI gembira, radio tidak — dan itu memberitahu pendawaian sudah betul dan bekalan yang gagal hanya sepanjang mikrosaat radio itu berada di udara.

Ketika berehat dalam standby cip itu menarik 22 µA, atau 26 µA pada nRF24L01+; semasa menghantar pada 0 dBm ia menarik 11.3 mA. Lonjakan 500 kali ganda itu tiba dalam masa 130 µs yang diambil PLL dalamannya untuk mantap — satu tepi yang hampir menegak, bukan landaian. Sketch di bawah berjalan pada RF24_PA_LOW dan menarik kurang daripada itu, yang merendahkan lonjakan tanpa melembutkannya: regulator dikalahkan oleh betapa cepat arus itu tiba, bukan oleh berapa banyak arusnya.

Letakkan nombor pada cas yang diperlukannya. Satu paket membawa preamble 8-bit, address 40-bit, medan kawalan 9-bit, payload 8-bit anda dan CRC 16-bit: 81 bit, iaitu 81 µs pada 1 Mbps. Tambah 130 µs untuk masuk ke mod transmit serta masa pusing balik untuk mendengar acknowledgement, dan burst itu lebih kurang 0.4 ms pada sekitar 10 mA. Cas ialah arus didarab masa, jadi modul itu mahukan kira-kira 4 µC dalam masa setengah milisaat.

Voltan kapasitor jatuh mengikut cas dibahagi kapasitans, jadi 4 µC itulah yang memilih nilainya. Seramik yang sedia ada pada modul jauh terlalu kecil untuk kerja itu: reka bentuk rujukan Nordic sendiri bagi cip ini menetapkan 33 nF, 10 nF dan 1 nF di sebelah pin bekalan, dan 33 nF yang disuruh memikul burst itu seorang diri akan jatuh lebih 100 V. Ia ada di situ untuk tepi nanosaat, bukan untuk ini — dan itulah sebabnya dokumen yang sama menyuruh anda memasang satu kapasitor besar selari dengannya. Elektrolitik 10 µF jatuh 0.4 V; 100 µF jatuh 0.04 V. Pembahagian itulah sebab sebenar julat 10–100 µF yang dipetik di merata tempat, dan sebab hujung bawahnya ialah minimum dan bukan jawapan.

Regulator Uno tidak menutup jurang itu, dan ratingnya itulah yang mengelirukan orang. Arduino merating pin 3V3 pada 50 mA, jadi 11.3 mA nampak selesa — tetapi 50 mA ialah angka keadaan mantap. Gelung maklum balas regulator linear perlukan puluhan mikrosaat untuk perasan satu lonjakan, dan 20 cm wayar jumper menambah rintangan serta induktans di tengah jalan. Regulator tiba lewat; kapasitor pada pin modul itu sendiri sudah pun ada di sana.

Aritmetik yang sama memberitahu sedalam mana lendutan itu. Dengan hanya puluhan nanofarad berdekatan, rel tempatan modul bukan sekadar turun beberapa ratus milivolt semasa burst — ia jatuh menuju paras lantai 1.9 V cip itu. nRF24L01 menjalankan power amplifier dan teras digitalnya daripada regulator di dalam cip, dan tiada regulator dapat mengekalkan outputnya sebaik sahaja inputnya sendiri hilang, jadi paket keluar dalam keadaan cacat, acknowledgement tidak pernah pulang, dan write() melaporkan kegagalan sementara register SPI — yang dibaca antara burst, pada mikroamp — menjawab dengan sempurna. Itulah sebabnya kapasitor dipasang merentasi pin modul itu sendiri dan bukan pada header Uno — wayar antara keduanya itulah masalahnya.

Perbandingan kartun dua surih voltan bekalan: garisan navy yang runtuh ke dalam lendutan yang dalam dengan anak panah oren dan modul nRF24L01 hitam bertanda simbol dilarang masuk di atasnya, dan di bawahnya garisan teal yang hanya turun sedikit di sebelah kapasitor elektrolitik hitam berjalur kelabu, dengan modul yang sama ditunjukkan menghantar gelombang teal
Burst transmit yang sama, dilukis dua kali. Tanpa takungan setempat, bekalan modul itu sendiri runtuh selama satu paket; dengan takungan itu, burst yang sama hanya berharga beberapa puluh milivolt.

Elektrolitik itu berkutub: jalur pada tinnya menandakan kaki negatif, dan kaki itu pergi ke GND. Dipasang terbalik ia panas lalu rosak. Mana-mana komponen 10–100 µF yang dirating 6.3 V ke atas boleh pakai; starter kit membawa elektrolitik bersama seramiknya.

Memasangnya ialah langkah yang paling kerap dilangkau panduan lain, kerana pin modul sudah pun memakai soket jumper. Terbaik: pateri kaki kapasitor terus pada pin VCC dan GND — panduan memateri header pin kami menerangkan tekniknya. Tanpa pateri: bawa lead VCC dan GND modul masuk ke breadboard dan rentaskan kapasitor merentasi dua baris itu, beberapa sentimeter dari cip dan bukan sepanjang jumper campur trek Uno sendiri. Paling teruk: lubang 3V3 dan GND pada Uno, yang meninggalkan seluruh jumper di dalam laluan yang anda cuba pintas tadi. Kedua-dua node dapat satu, dan itulah sebabnya senarai komponen membawa dua breadboard.

Apa sebenarnya yang address dan pipe lakukan?

Fungsi openWritingPipe() dan openReadingPipe() dalam library RF24 bukan socket rangkaian. Satu address pipe ialah lima bait yang menumpang dalam setiap paket, dan cip penerima membandingkannya dalam perkakasan sebelum ia mengejutkan Arduino langsung. Kedua-dua hujung berkongsi satu address, dan dua link dalam bilik yang sama kekal berasingan dengan menggunakan address yang berlainan. Ia penapis, bukan kata laluan: sesiapa yang ada address sepadan boleh mendengar anda.

Peranan datang daripada dua panggilan, bukan daripada pendawaian. stopListening() menjadikan satu node transmitter, startListening() menjadikannya receiver, dan menukar dua baris itu antara sketch tidak mengubah apa-apa perkakasan.

Acknowledgement ialah tempat model mental biasanya pecah. Bila satu paket tiba dan lulus CRC-nya, penerima menghidupkan transmitternya sendiri lalu menjawab secara automatik. Jadi kedua-dua hujung menghantar, kedua-dua hujung perlukan kapasitor, dan write() yang memulangkan true ialah laporan penghantaran dan bukan bendera “sudah dihantar”. Ia juga menjelaskan penomboran pipe: pipe 0 dikhaskan untuk acknowledgement itu, jadi satu hub menggunakan pipe 1 hingga 5. Empat pipe itu berkongsi empat bait teratas address pipe 1 dan berbeza hanya pada bait terakhir, kerana cip itu menyimpan satu address lima bait penuh untuk kumpulan tersebut dan satu bait sahaja bagi setiap pipe selepasnya.

Kartun menunjukkan dua modul nRF24L01 hitam yang masing-masing ditandakan satu baris lima petak berwarna yang serupa, satu anak panah teal membawa mesej antara keduanya dan satu anak panah oren memulangkan acknowledgement, sementara modul ketiga yang pudar bertanda urutan warna yang berbeza disekat oleh simbol dilarang masuk oren
Satu address ialah lima bait yang dibawa dalam setiap paket. Dua node yang memegang lima bait yang sama akan sepadan lalu saling menjawab; node ketiga yang memegang bait berbeza ditapis dalam perkakasan, sebelum Arduinonya sempat terjaga.

Butiran terakhir itulah yang menukar link dua node ini menjadi rangkaian sensor yang melapor kepada satu board:

Macam mana rupa kod transmitter dan receiver nRF24L01?

Kedua-dua sketch menggunakan RF24 oleh TMRh20 — buka Library Manager, cari RF24, install. Muat naik transmitter ke node yang ada butang dan receiver ke node satu lagi, kemudian buka kedua-dua Serial Monitor pada 115200 — dua tetingkap IDE, kerana satu tetingkap hanya memerhati satu port. Setiap node perlukan kuasanya sendiri sebaik sahaja keduanya berpisah: satu kabel USB, satu charger atau satu power bank bagi setiap satu. Tiada apa lagi yang dikongsi antara dua node itu, ground pun tidak.

/*
  nRF24L01 butang jauh - node TRANSMITTER (Arduino Uno + RF24 oleh TMRh20).

  nRF24L01 VCC -> Uno 3V3  (JANGAN SEKALI-KALI 5V)      GND -> Uno GND
  CE  -> D9      CSN -> D10
  SCK -> D13     MOSI -> D11      MISO -> D12      IRQ -> tidak digunakan
  Elektrolitik 10-100uF merentasi pin VCC dan GND modul itu sendiri, jalur ke GND.

  Butang antara D2 dan GND. INPUT_PULLUP bermakna tiada perintang luaran.
  Node ini menghantar satu bait pada setiap perubahan dan sekali lagi setiap
  200 ms, supaya receiver dapat membezakan "masih ditekan" daripada "link mati".
*/

#include <SPI.h>
#include <RF24.h>

RF24 radio(9, 10);                 // CE, CSN

const byte address[6] = "MHUB1";   // 5 bait; mesti serupa pada kedua-dua node

const uint8_t  PIN_BUTTON   = 2;
const uint16_t DEBOUNCE_MS  = 25;  // kontak mantap dalam beberapa ms; 25 selamat
const uint16_t HEARTBEAT_MS = 200; // ulang keadaan semasa sekerap ini

uint8_t  stableState = 0;          // 1 = ditekan
uint8_t  lastRaw     = 0;
uint32_t lastEdgeAt  = 0;
uint32_t lastSendAt  = 0;

void setup() {
  Serial.begin(115200);
  pinMode(PIN_BUTTON, INPUT_PULLUP);

  if (!radio.begin()) {
    // begin() membaca satu register balik. Gagal di sini bermakna pendawaian
    // atau bekalan, bukan jarak radio - node satu lagi belum terlibat lagi.
    Serial.println(F("radio not responding: check 3.3V, CE/CSN, capacitor"));
    while (1) {}
  }

  // RF24_PA_LOW ialah -12 dBm - lebih lembut pada rel 3.3V yang lemah berbanding
  // RF24_PA_MAX 0 dBm, iaitu yang patut dipakai sebaik bekalan sudah kukuh.
  radio.setPALevel(RF24_PA_LOW);
  // RF24_250KBPS menukar throughput dengan kepekaan receiver, tetapi kadar itu
  // hanya wujud pada silikon nRF24L01+; setDataRate() pulangkan false jika ditolak.
  radio.setDataRate(RF24_1MBPS);
  radio.setChannel(76);             // 2476 MHz - atas Wi-Fi 1/6/11, dalam band
  radio.setPayloadSize(sizeof(stableState));
  radio.openWritingPipe(address);
  radio.stopListening();            // node ini bercakap

  Serial.println(F("transmitter ready"));
}

void loop() {
  uint8_t  raw = (digitalRead(PIN_BUTTON) == LOW);  // pull-up: LOW = ditekan
  uint32_t now = millis();

  if (raw != lastRaw) {             // sebarang bounce mengulang jam pemantapan
    lastRaw    = raw;
    lastEdgeAt = now;
  }

  bool changed = false;
  if (raw != stableState && (now - lastEdgeAt) >= DEBOUNCE_MS) {
    stableState = raw;
    changed     = true;
  }

  if (changed || (now - lastSendAt) >= HEARTBEAT_MS) {
    lastSendAt = now;

    // write() pulangkan true hanya bila auto-ACK receiver sampai balik,
    // jadi ia laporan penghantaran, bukan bendera "sudah dihantar".
    bool acked = radio.write(&stableState, sizeof(stableState));

    if (changed) {
      Serial.print(stableState ? F("pressed  ") : F("released "));
      Serial.println(acked ? F("- ack received") : F("- NO ack"));
    }
  }
}
/*
  nRF24L01 butang jauh - node RECEIVER (Arduino Uno + RF24 oleh TMRh20).

  Pendawaiannya serupa dengan transmitter:
  VCC -> 3V3, GND -> GND, CE -> D9, CSN -> D10, SCK -> D13, MOSI -> D11,
  MISO -> D12, campur kapasitor 10-100uF merentasi VCC dan GND modul.

  D3 ialah pin output. Ia memacu terminal IN modul relay, atau satu LED
  dengan perintang bersiri. D13 TIDAK boleh dijadikan penunjuk di sini: pada
  Uno pin itu ialah SPI SCK dan radio yang memilikinya.
*/

#include <SPI.h>
#include <RF24.h>

RF24 radio(9, 10);                 // CE, CSN

const byte address[6] = "MHUB1";   // lima bait yang sama dengan transmitter

const uint8_t  PIN_OUT     = 3;
const uint16_t FAILSAFE_MS = 1000; // 5 heartbeat tercicir = link hilang

uint8_t  lastState = 0;
uint32_t lastHeard = 0;

void setup() {
  Serial.begin(115200);
  pinMode(PIN_OUT, OUTPUT);
  digitalWrite(PIN_OUT, LOW);      // matikan output sebelum apa-apa yang lain

  if (!radio.begin()) {
    Serial.println(F("radio not responding: check 3.3V, CE/CSN, capacitor"));
    while (1) {}
  }

  radio.setPALevel(RF24_PA_LOW);    // setiap tetapan di bawah mesti sepadan dengan TX
  radio.setDataRate(RF24_1MBPS);
  radio.setChannel(76);
  radio.setPayloadSize(sizeof(lastState));
  radio.openReadingPipe(1, address);  // pipe 1 mendengar pada address yang dikongsi
  radio.startListening();             // node ini mendengar

  Serial.println(F("receiver listening"));
}

void loop() {
  if (radio.available()) {
    uint8_t state = 0;
    radio.read(&state, sizeof(state));
    lastHeard = millis();

    if (state != lastState) {
      lastState = state;
      digitalWrite(PIN_OUT, state ? HIGH : LOW);
      Serial.println(state ? F("output ON") : F("output OFF"));
    }
  }

  // Tiada apa didengar selama sesaat: transmitter mati, luar jangkauan atau
  // rosak. Lepaskan output dan jangan biarkan ia terkunci hidup.
  if (lastState && (millis() - lastHeard) > FAILSAFE_MS) {
    lastState = 0;
    digitalWrite(PIN_OUT, LOW);
    Serial.println(F("link lost - output released"));
  }
}

Pada Uno, transmitter dikompil menjadi 3,802 bait flash dan 244 bait RAM; receiver pula 3,424 dan 239. Outputnya ialah D3 dan sengaja bukan D13: pada Uno pin itu ialah clock SPI dan radio yang memilikinya, jadi LED atas board berkelip mengikut trafik dan langsung tidak berguna sebagai penunjuk. Bawa D3 ke terminal skru IN modul relay, dan berikan kuasa kepada modul itu sendiri: DC+ ke 5 V Uno, DC- ke GND. Isyarat pada IN tanpa apa-apa yang menghidupkan board itu tidak menyuis apa-apa. Set jumper trigger H/L pada H, kerana keadaan “off” sketch ini ialah LOW pada D3 — dipacu semasa startup, dan dikembalikan setiap kali failsafe berbunyi — dan pada tetapan L setiap detik “off” itu akan menghidupkan relay sebaliknya, jadi link yang terputus akan menyuis beban ON dan bukan OFF. Kekalkan sisi yang disuis pada DC voltan rendah; sesalur mains membawa peraturannya sendiri tentang enclosure, jarak izin dan rating kabel, jadi baca dahulu panduan keselamatan modul relay kami.

Heartbeat dan failsafe itu sepasang: transmitter mengulang keadaan butang setiap 200 ms, dan receiver melepaskan outputnya selepas sesaat senyap, jadi bateri yang kong atau anda yang berjalan keluar dari jangkauan akan mematikan beban dan bukan meninggalkannya terkunci hidup. Tukar butang itu kepada joystick dan struktur yang sama membawa dua paksi.

Antena PCB atau versi antena — yang mana patut anda beli?

NRF24RF (antena PCB) NRF24AN (versi antena)
Antena Trace emas yang diukir pada board Soket SMA, antena rod diskru masuk
Transmit Cip kosong, sehingga 0 dBm Power amplifier, sekitar +20 dBm
Receive Cip kosong Low-noise amplifier di hadapan cip
Arus transmit puncak 11.3 mA Lebih kurang 115 mA
Pin 3V3 Uno boleh membekalkannya Ya, dengan kapasitor Tidak — perlukan bekalan 3.3 V sendiri
Sesuai untuk Bilik sama, bilik sebelah, merentasi rumah yang kecil Merentasi padang, antara bangunan

Kelebihan NRF24AN ialah aritmetik, bukan pemasaran. Amplifier itu menambah lebih kurang 20 dB pada transmit dan low-noise amplifier kira-kira 10 dB pada receive, jadi link budget bertambah baik sekitar 30 dB. Kehilangan ruang bebas naik 6 dB setiap kali jarak digandakan, kerana kuasa yang sama merebak ke atas empat kali luas, jadi 30 dB bersamaan lima kali penggandaan — lebih kurang tiga puluh kali jarak, dan itulah sebabnya angka padang terbuka dalam ratusan meter duduk bersebelahan modul biasa yang hanya mampu berpuluh meter. Angka maksimum itu diukur dengan line of sight yang jelas, dan dinding serta tubuh manusia masing-masing memakan beberapa dB daripada budget tersebut.

Jarak ada harganya dari segi kuasa. Pada 115 mA, versi antena meminta lebih dua kali ganda daripada rating pin 3V3 Uno, jadi menggantungnya di situ menjadikan brownout lebih teruk dan bukan lebih baik: jalankannya pada RF24_PA_LOW, pasang sekurang-kurangnya 100 µF, dan beri ia bekalan 3.3 V khusus dengan groundnya diikat pada ground Uno. Naik taraf kedua-dua hujung, kerana acknowledgement bermakna node yang jauh turut menghantar — kemudian jarakkan keduanya sebelum menilai hasilnya, sebab low-noise amplifier dibina untuk isyarat yang lemah dan dua modul beramplifier yang hanya sejengkal terpisah akan menenggelamkan front end masing-masing. Beri keduanya beberapa meter untuk ujian pertama. Satu butiran menentukan sama ada antena itu berfungsi langsung — jack pada modul ialah SMA piawai, sedangkan kebanyakan antena Wi-Fi terpakai ialah RP-SMA. Polariti terbalik menukar kontaknya dan bukan bebenangnya: kedua-dua belah akhirnya ada soket, jadi ia berskru rapat dengan tiada apa-apa selain udara di tempat pin sepatutnya berada.

Pandangan atas kartun membandingkan dua modul nRF24L01 hitam — satu yang pendek dengan trace antena PCB zig-zag emas dan gelombang teal yang pendek, dan satu yang lebih panjang dengan soket SMA emas, antena rod hitam berskru, dua cip dan gelombang teal yang jauh lebih panjang
Dua varian nRF24L01 dilihat dari atas: antena emas yang diukir pada board di sebelah kiri, soket SMA emas dan antena hitam berskru di sebelah kanan. Board yang lebih panjang membawa dua cip kerana amplifier itu ialah cip kedua.

Bila nRF24L01 bukan radio yang sesuai?

nRF24L01 ialah link jarak dekat berkadar tinggi, dan ada tiga jenis kerja yang lebih sesuai dengan sesuatu yang lain. Berkilometer untuk segelintir bait seminit — tangki air merentasi ladang, sensor pagar di hujung laluan masuk yang panjang — itu kawasan LoRa: radio spektrum tersebar sub-GHz yang menukar kadar data dengan jangkauan, satu reka bentuk yang berlainan dan bukan nRF24 yang lebih besar, dan bukan sesuatu yang kami bawa.

Kalau satu hujungnya telefon, anda mahukan Bluetooth dan bukan radio yang telefon itu tidak ada — panduan HC-05 kami menerangkan pasangan itu dan kereta RC Bluetooth ialah idea yang sama tetapi memacu motor. Kalau kedua-dua hujung memang ESP32, ESP-NOW menggunakan silikon Wi-Fi yang anda sudah pun bayar dan tidak perlukan modul tambahan. nRF24L01 menang tepat di sini: dua mikropengawal, sebilik atau serumah jaraknya, cukup murah untuk dipasang pada kedua-dua hujung.

Kesilapan biasa yang kami lihat daripada pelanggan sebenar

5 V pada pin VCC. Pin logiknya memang toleran 5 V; pin bekalan pula maksimum 3.6 V. Satu lubang header yang tersalah dan modul itu tidak akan menjawab begin() lagi.

Melangkau kapasitor sebab “boleh jalan atas meja”. Paket yang pendek pada jarak dekat mampu bertahan dengan rel yang jatuh; link yang sama tiga bilik jauhnya tidak.

Sketch yang tidak sepadan. Channel, kadar data, address dan saiz payload mesti sama, dan startListening() pada kedua-dua hujung meninggalkan dua receiver dan tiada transmitter. Kedua-dua kegagalan ini senyap — tiada mesej ralat, cuma receiver yang tidak pernah melaporkan apa-apa.

FAQ

Kenapa radio.write() sentiasa pulangkan false?

Tiada acknowledgement yang pulang: sama ada tetapan receiver berbeza, atau bekalan transmitter jatuh semasa burst. Pasang kapasitor dahulu, kemudian banding kedua-dua sketch.

Boleh tak saya bekalkan kuasa nRF24L01 daripada pin 5 V Arduino?

Tidak boleh. 3.6 V ialah maksimum mutlak pada VCC. Guna 3V3 — pin isyaratnya toleran 5 V, pin bekalannya tidak.

Kapasitor nilai berapa yang patut saya guna?

Elektrolitik 10–100 µF, 6.3 V ke atas, merentasi pin VCC dan GND modul itu sendiri dengan kaki berjalur ke GND. Guna 100 µF untuk versi antena.

Perlukah kedua-dua modul jenis yang sama?

Tidak perlu, ia berpasangan dengan baik. Tetapi jarak ditentukan oleh hujung yang lebih lemah, jadi menaik taraf satu hujung sahaja memberi jauh kurang daripada yang dijangka.

Sejauh mana dua modul ini boleh sampai di dalam rumah?

Sepasang modul antena PCB meliputi satu bilik dengan selesa dan biasanya sedinding dua lagi selepas itu. Rumah di sini diperbuat daripada batu bata dan konkrit bertetulang, bukan kayu dan plasterboard, jadi satu dinding memakan lebih banyak isyarat berbanding dinding yang sama dalam video yang dirakam di tempat lain. Kalau ia putus lebih awal daripada itu, periksa bekalan sebelum menyalahkan jarak.

Kemas kini terakhir Ogos 2026. Tersangkut? Chat dengan kami di WhatsApp.

Leave a Reply

Your email address will not be published. Required fields are marked *