NRF24L01
-
- Příspěvky: 579
- Registrován: 01 srp 2017, 19:29
- Reputation: 0
- Bydliště: Poprad
- Kontaktovat uživatele:
NRF24L01
Ahoj, skúšal moduly NRF24l01 a nemôžem ich rozchodiť, žiadna komunikácia medzi nimi. Mal by niekto typ na knižnicu, ktorá je overená? Skúšal som RF24, RadioHead a ani pri jednej žiaden úspech.
Wiring používam taký, aký je písaný pri knižnici podľa každej. Mávajú len iné piny pre CE a CSN. Vďaka!
Wiring používam taký, aký je písaný pri knižnici podľa každej. Mávajú len iné piny pre CE a CSN. Vďaka!
Re: NRF24L01
V době, kdy jsem s těmito moduly blbnul mi šlapalo na první dobrou. Tady je návod a v textu link na knihovnu, zkus. http://navody.arduino-shop.cz/navody-k- ... 24l01.html
-
- Příspěvky: 579
- Registrován: 01 srp 2017, 19:29
- Reputation: 0
- Bydliště: Poprad
- Kontaktovat uživatele:
-
- Příspěvky: 579
- Registrován: 01 srp 2017, 19:29
- Reputation: 0
- Bydliště: Poprad
- Kontaktovat uživatele:
Re: NRF24L01
Pokročil som trochu ďalej.. Chcel by som si z toho tutoriálu upraviť ten sketch pre obojsmernú komunikáciu ale mám taký problém..
Jedno Arduino mi na serial monitor nevypíše nič a druhé toto, nechápem prečo sú tam výpisy aj z tých sketchov z tutoriálu, keď tam taký sketch nahratý nemám...:
Rýchlosť bola nastavená dobre, skúšal som prepínať medzi 9600 a 1115200.
Používam vlastne obrátene kódy pre obe Arduina...
Druhé Arduino:
Napadá vás, kde by mohol byť problém? Ide mi vlastne o ovládanie systému oboma modulmi. (Oba moduly si budú vymieňať informácie ohľadom stlačení tlačidiel pri jednom i druhom Arduine a ak budú stlačené obe, tak chcem rozozvučiť buzzer...
Ďakujem za pomoc
Jedno Arduino mi na serial monitor nevypíše nič a druhé toto, nechápem prečo sú tam výpisy aj z tých sketchov z tutoriálu, keď tam taký sketch nahratý nemám...:
Rýchlosť bola nastavená dobre, skúšal som prepínať medzi 9600 a 1115200.
Používam vlastne obrátene kódy pre obe Arduina...
Kód: Vybrat vše
//uno old
#include <SPI.h>
#include "RF24.h"
#define CE 7
#define CS 8
RF24 nRF(CE, CS);
byte adresaunor3[]= "unor3";
byte adresaunoold[]= "unoold";
void setup() {
Serial.begin(115200);
nRF.begin();
nRF.setPALevel(RF24_PA_LOW);
nRF.openWritingPipe(adresaunoold);
nRF.openReadingPipe(1,adresaunor3);
}
void loop() {
delay(100);
nRF.startListening();
if ( nRF.available()) {
String slovo;
String prijem = "Bratislava";
while (nRF.available()) {
nRF.read(&slovo, sizeof(slovo));
Serial.println("Prijal som: ");
Serial.println(slovo);
}
delay(100);
nRF.stopListening();
nRF.write(&prijem, sizeof(prijem));
Serial.println("Odoslal som: ");
Serial.println(prijem);
delay(100);
}
}
Kód: Vybrat vše
//uno old
#include <SPI.h>
#include "RF24.h"
#define CE 7
#define CS 8
RF24 nRF(CE, CS);
byte adresaunor3[]= "unor3";
byte adresaunoold[]= "unoold";
void setup() {
Serial.begin(115200);
nRF.begin();
nRF.setPALevel(RF24_PA_LOW);
nRF.openWritingPipe(adresaunor3);
nRF.openReadingPipe(1,adresaunoold);
}
void loop() {
delay(100);
nRF.startListening();
if ( nRF.available()) {
String slovo = "Praha";
String prijem;
while (nRF.available()) {
nRF.read(&prijem, sizeof(prijem));
Serial.println("Prijal som: ");
Serial.println(prijem);
}
delay(100);
nRF.stopListening();
nRF.write(&slovo, sizeof(slovo));
Serial.println("Odoslal som: ");
Serial.println(slovo);
delay(100);
}
}
Ďakujem za pomoc
Re: NRF24L01
Pokud mas rychlos Serialu spravne, tak to vypada, ze to vypisuje pamet jen tak. Vis, ze kazdy retezec musi byt zakonceny znakem \0, aby se vedelo, ze konci? A ze kdyz ti u promennych adresaunor3 a adresaunoold ti ten znak chybi, takze pokus o jejich odeslani vede k poslani vseho od mista, kam kompilator ten retezec dal az po prvni nulovy byte (ktery muze byt kdekoliv)?
-
- Příspěvky: 579
- Registrován: 01 srp 2017, 19:29
- Reputation: 0
- Bydliště: Poprad
- Kontaktovat uživatele:
Re: NRF24L01
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č:
Prijímač:
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);
}
}
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();
}
}
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: NRF24L01
Koukal jsem že v jednom kodu se sanžíš odesílat "řetězec" v jiném jen číslo.
"Některé knihovny" umí jen čísla a ve starších verzích mi šla jen čísla celá.
Na internetu lze sehnat upravené knihovny na odesílání i řetězce, či jakéhokoliv textu, prostě to tam nasypeš, ono si to rozloží na znaky, ty převede na čísla a na druhé straně ti to opět složí řetězec.
Mám jen zdroják - knihovny nemám, provozoval jsem to na starém PC a odešel disk, teď knihovny zpětně dohledávám.
Pokud to už víš, tak nic
"Některé knihovny" umí jen čísla a ve starších verzích mi šla jen čísla celá.
Na internetu lze sehnat upravené knihovny na odesílání i řetězce, či jakéhokoliv textu, prostě to tam nasypeš, ono si to rozloží na znaky, ty převede na čísla a na druhé straně ti to opět složí řetězec.
Mám jen zdroják - knihovny nemám, provozoval jsem to na starém PC a odešel disk, teď knihovny zpětně dohledávám.
Pokud to už víš, tak nic
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
-
- Příspěvky: 579
- Registrován: 01 srp 2017, 19:29
- Reputation: 0
- Bydliště: Poprad
- Kontaktovat uživatele:
Re: NRF24L01
Nakoniec som asi prišiel nato, že tie čísla mi budú úplne postačovať.. Budem len odosielať 1, alebo 2 vzhľadom na situáciu, ktorý button bude stlačený. A to si už jednoducho porovnám. Ale ďakujem za ochotu
Re: NRF24L01
Zdravím, také s tím zápasím zatím bez úspěchu. Jak je to s řádkem #define CS 15 ? Pokud je to na Nano.
-
- Příspěvky: 579
- Registrován: 01 srp 2017, 19:29
- Reputation: 0
- Bydliště: Poprad
- Kontaktovat uživatele:
Re: NRF24L01
Ja som to dal na NodeMCU dosku.
CE a CSN pin sa definuje. Tieto piny si zvolíš sám.. Takže tam nahradíš iba čísla digitálneho pinu, kam to pripájaš.
Daj pozor, či nemáš naopak + a - ako som mal ja.. moduly vďaka bohu prežili.
CE a CSN pin sa definuje. Tieto piny si zvolíš sám.. Takže tam nahradíš iba čísla digitálneho pinu, kam to pripájaš.
Daj pozor, či nemáš naopak + a - ako som mal ja.. moduly vďaka bohu prežili.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 12 hostů