Tak nakoniec som to dal na 2 NodeMCU dosky a funguje to OK
Mal som obavy o tie moduly, či pôjdu, lebo podľa jedného profi "wiringu" som dal + a - naopak...
Ale fungujú, žiaden problém.
Rád by som sa pochválil s dosiahnutými výsledkami.
Včera som robil meranie pri vysielacom výkone HIGH na oboch doskách pri použití Base adaptéra, ktorý má regulátor na 3.3V a je ho možné napájať na 5-12V, čo umožňuje získať po prevedení celkom slušný prúd, ktorý utiahne aj HIGH výkon, MAX už nie

.

Použil som 5V z VUSB pinu a buzzer pre indikátor spojenia s periodickým bzučaním.
Wiring:

Nahral som do dosiek skoro pôvodné zdrojové kódy z Arduino návodov, pridal som riadok pre nastavenie prenosovej rýchlosti na 250kb/s.
Chcel som vyskúšať meranie, na akú vzdialenosť to bude fungovať, originálne by to malo byť 100 metrov. Umiestnil som teda jednu NodeMCU dosku s NRF modulom a s druhou som sa s powerbankou vzdiaľoval.
Správne periodické bzučanie vydržalo do vzdialenosti 72 metrov od vysielača, ďalej to už nebolo úplne periodické a s väčšou vzdialenosťou bolo potrebné mať správne natočený NRF modul, i keď niekedy pod uhlom fungoval lepšie ako priamo face-to-face oproti vysielaču. Maximálna vzdialenosť, ktorú som dosiahol bola 113 metrov.
Moduly neboli žiadnym spôsobom upravované a nenachádzal sa na nich ani kondenzátor, ktorý sa v mnohých prípadoch odporúča. Skúšal som aj napríklad umiestniť vysielač a prijímač naležalo oproti sebe, ale to fungovalo na 15 metrov max. Správne je to teda face-to-face. Nakoľko som si tieto moduly veľmi obľúbil, rozhodol som sa aj pre väčších "bratov" s anténami a mám otázku..
Funguje na ne rovnaký sketch? Čo som pozeral Pinout, tak by mal byť totožný. Zaujímavé by bolo sledovať i dosah, ak by sa moduly napájali na MAX výkon.
Kódy, ak by chcel niekto vyskúšať:
Vysielač:
Kód: Vybrat vše
// nRF24L01 vysílač
// připojení knihoven
#include <SPI.h>
#include "RF24.h"
// nastavení propojovacích pinů
#define CE 2
#define CS 15
// inicializace nRF s piny CE a CS
RF24 nRF(CE, CS);
// nastavení adres pro přijímač a vysílač,
// musí být nastaveny stejně v obou programech!
byte adresaPrijimac[]= "prijimac00";
byte adresaVysilac[]= "vysilac00";
void setup() {
// komunikace přes sériovou linku rychlostí 9600 baud
Serial.begin(9600);
// zapnutí komunikace nRF modulu
nRF.begin();
nRF.setDataRate( RF24_250KBPS );
// nastavení výkonu nRF modulu,
// možnosti jsou RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH and RF24_PA_MAX,
// pro HIGH a MAX je nutný externí 3,3V zdroj
nRF.setPALevel(RF24_PA_HIGH);
// nastavení zapisovacího a čtecího kanálu
nRF.openWritingPipe(adresaVysilac);
nRF.openReadingPipe(1,adresaPrijimac);
// začátek příjmu dat
nRF.startListening();
}
void loop() {
// for smyčka pro postupné odeslání
// hodnot 0 až 3 pro načtení všech dat
// z přijímače
for (int i=0; i < 4; i++ ) {
// ukončení příjmu dat
nRF.stopListening();
// vytisknutí aktuální volby po sériové lince
Serial.print("Posilam volbu ");
Serial.println(i);
// uložení startovního času komunikace
unsigned long casZacatek = micros();
// odeslání aktuální volby, v případě selhání
// vytištění chybové hlášky na sériovou linku
if (!nRF.write( &i, sizeof(i) )){
Serial.println("Chyba při odeslání!");
}
nRF.startListening();
unsigned long casCekaniOdezvy = micros();
boolean timeout = false;
while ( ! nRF.available() ){
if (micros() - casCekaniOdezvy > 200000 ){
timeout = true;
break;
}
}
if ( timeout ){
Serial.println("Chyba při prijmu, vyprseni casu na odezvu!");
}
else{
unsigned long prijataData;
nRF.read( &prijataData, sizeof(prijataData) );
unsigned long casKonec = micros();
Serial.print("Odeslana volba: ");
Serial.print(i);
Serial.print(", prijata data: ");
Serial.println(prijataData);
Serial.print("Delka spojeni: ");
Serial.print(casKonec - casZacatek);
Serial.println(" mikrosekund.");
}
delay(200);
}
}
Prijímač:
Kód: Vybrat vše
// nRF24L01 přijímač
#include <SPI.h>
#include "RF24.h"
int prijem;
const int buzzer = 5;
#define CE 2
#define CS 15
RF24 nRF(CE, CS);
byte adresaPrijimac[]= "prijimac00";
byte adresaVysilac[]= "vysilac00";
void setup() {
Serial.begin(9600);
pinMode(buzzer, OUTPUT);
nRF.begin();
nRF.setDataRate( RF24_250KBPS );
nRF.setPALevel(RF24_PA_HIGH);
nRF.openWritingPipe(adresaPrijimac);
nRF.openReadingPipe(1,adresaVysilac);
nRF.startListening();
}
void loop() {
unsigned long odezva;
if( nRF.available()){
// čekání na příjem dat
while (nRF.available()) {
nRF.read( &prijem, sizeof(prijem) );
}
Serial.print("Prijata volba: ");
Serial.print(prijem);
switch( prijem ) {
case 1:
odezva = millis();
tone(buzzer, 50, 500);
break;
case 2:
odezva = millis()/1000;
break;
case 3:
odezva = micros();
break;
default:
odezva = 0;
break;
}
nRF.stopListening();
nRF.write( &odezva, sizeof(odezva) );
nRF.startListening();
}
}