Blog převážně jednočipový

Arduino a bezdrátový přenos s niceRF

Po problémech které jsem měl s CC1101 (nově zakoupené moduly nekomunikují se starými moduly viz. konec článku Arduino a bezdrátový přenos s CC1101), jsem vyzkoušel moduly niceRF.

NiceRF je vlastně set dvou modulů, vysílací STX882 a přijímací modul SRX887 které komunikují přes frekvenci 433MHz.

Zkoušel jsem měřit dosah a naměřil jsem minimálně 350m, píšu minimálně jelikož už jsem neměl kam jít a už takhle jsem byl 100m v lese a na vysílač jsem přes stromy a listí ani neviděl. Přesto mi vysílač pravidelně každých 10sekund zasílal zprávu.

Ten menší modul je vysílač a ten větší je přijímač. Moduly lze napájet jak 3.3V tak 5V.

U vysílacího modulu zapojíme:

VCC+3.3V nebo +5V
GND-3.3V nebo -5V
DATAv našem případě na pin 11

U přijímacího modulu zapojíme:

VCC+3.3V nebo +5V
GND-3.3V nebo -5V
DATAv našem případě na pin 2
CSnic, pomocí tohoto pinu lze i modul uspat

Knihovna přes kterou budeme moduly ovládat se jmenuje RadioHead. Knihovna je ke stažení i zde.

Program - vysílač

#include <RH_ASK.h>

RH_ASK radio(2000, 2, 10, 0); // vysilac na pinu 10
void setup()
{
  Serial.begin(9600);
  Serial.println("setup");
  if (!radio.init())
    Serial.println("init failed");
}

unsigned int pocet=0;

void loop()
{
  char str[20];
  sprintf(str,"z:%d",pocet++);
  digitalWrite(13, true);
  radio.send((uint8_t *)str, strlen(str));
  radio.waitPacketSent();
  digitalWrite(13, false);
  Serial.println(str);
  delay(10000);
}

Program - přijímač

// NiceRF 433MHz  SRX887
#include <RH_ASK.h>

RH_ASK radio(2000, 2, 10, 0); // prijimac na pinu 2

void setup()
{
  Serial.begin(9600);
  Serial.println("Start");
  if (!radio.init())
    Serial.println("Init err!");
}

void loop()
{
  uint8_t buf[RH_ASK_MAX_MESSAGE_LEN];
  uint8_t buflen = sizeof(buf);

  if (radio.recv(buf, &buflen)) // Non-blocking
  {
    buf[buflen]=0;
    Serial.print("delka:");
    Serial.print(buflen);
    Serial.print("  zprava:");
    Serial.println((char*)buf);
  }
}

Program je tak jednoduchý, že ani nepotřebuje vysvětlovat.

Vytvořeno: 2019-05-14 22:05:30
Změněno: 2019-07-07 21:12:29
Vláďa
2021-04-28 21:43:55
S těmito moduly jsem dělal ovládání zap/vyp k čerpadlu na vodu. Vysílací anténa je smyčka průměr cca 4 cm, v přijímači je 1/4 vlnný dipól stočený do spirály, výška 4 cm (bojuju s místem). Protože přenáším jen dva stavy a chtěl jsem max. dosah/spolehlivost, místo sériového přenosu dat jsem použil jeden modulační kmitočet pro zapnutí a druhý pro vypnutí. V přijímači je digitální filtrace (oba procesory časované krystalem), činitel jakosti rezonátoru jsem nakonec nastavil na 1000. Takže stačí malý náznak modulačního kmitočtu v šumu a už to spolehlivě reaguje. Je pravda - nedělal jsem to s arduinem :-( ale s procesory Silabs C8051F302 (ano, stará dobrá 5051) a chodilo mi to na 250 m. Zajímalo by mě, s jakýma anténama udělal autor těch 350 m. Kdyby měl někdo zájem, program mohu poskytnout. www.vaelektronik.cz, stačí napsat.
Autor
2020-09-18 09:39:27
Dobry Den
Vysilani probiha na stejnem kmitoctu, takze kdyz se trefite na stejny cas tak se asi vzajemne zarusi. Ale odesilani je docela rychle, takze trefit se na stejny cas bude spise vyjimka (zalezi jak casto budete chtit posilat data). Jinak pi vysilani jako prvni byte si davam identifikaci site a cidla a prijimac (arduino) potom data ktera nejsou pro nej urcena ignoruje.
Honza
2020-09-18 09:15:52
Ahoj, zeptám se, umí spolupracovat dvě sady na stejném prostoru, aby se nehádaly mezi sebou, případně jak je naladit? Díky
Autor
2020-01-17 23:34:58
Tohle jsem zatim nezkousel, vsechny zarizeni co mi funguji jako prijimac jsou napajene ze site takze je neusinam. Ale mozna by slo uspat arduinno a nechat ho vzbudit kdyz se na pinu s prijimacem objevi vzestupna nebo sestupna hrana (to by se muselo vyzkouset), pak se zeptat knihovny RadioHead jestli to nahodou neni signal a pak ho zase nechat usnout. Je ale mozne ze je ve vzduchu tolik sumu ze by se vzbuzoval stale a moc by to nepomohlo.
Pavel
2020-01-12 22:33:24
Dobrý večer,
podařilo se zjistit něco více ohledně probouzení uspaného příjímače? Pátrám už nějakou dobu a zatím se mi nepodařilo najít, jak tuto věc vyřešit..

Děkuji za každou radu.
Autor
2019-09-12 08:20:29
Dobry den,
Jeste jsem to nezjistoval ale je mozna mozne ho probouzet na preruseni na danem vodici. Jen eter je plny vysilani na 433MHz (sum) az software se snazi z toho najit nejaka smysluplna data.
Budu brzy stavet neco kde bych take potreboval uspavat prijimac na nice RF, tak jestli to rozchodim, tak to sem napisi.
Marek
2019-09-09 11:19:33
Zdravím, jak by šlo vyřešit probouzení přes přerušení uspaného arduina (přijímač ) pomocí zmiňovaných bezdrátových modulů ?
jacu
2019-07-18 11:12:11
blog je dobry ale malo znamy asi by to chtelo prejmenovat aby tam nekde bylo arduino

Napsat komentář