WiFi scanner nRF24L01+ modullal

A Nordic nFR24L01+ chip köré épült áramkörök a könnyű kezelhetőségükkel, egyszerű használatukkal vívtak ki elismerést Arduno környezetben. Azonban alkalmazási lehetőségének egyik speciális módja, amikor a kiválasztott kommunkációs csatornán a jelerősséget figyeli. A modul a 2.400...2.525 Mhz sávban működik: azaz egyszerű WIFI-Scanner készíthető segítségével, mely a zajszennyezést méri a különböző WIFI csatornákon. A modul a 2.4GHz sávon működik, így az 5GHz sáv vizsgálatára nem alkalmas! Az nRF24L01 eljáráskönyvtár a frekvenciapásztázó a funkciót nem tartalmazza, így közvetlen SPI buszon át történő regisztermanipulálással lehet adatot kinyerni belőle. A megjelenítés egyszerűen soros vonalon kiküldött adatokból a terminálképernyőn lehetséges. Az SPI busz kellően gyors a méréshez, a megjelenítésre szolgáló soros adatfolyam nem korlátozza a mérést.

 

 

As common FR24L01 libraries do not interface well with SPI-lib of the current Arduino IDE (22), The necessary interface was written from scratch. Some timing is pushing the limit of the device(s), as we wanted to scan as fast as possible, but they are working reliably with my setup. Basically, the setup is very simple. The nRF24L01p is a SPI-device, and you have to run cables from the Arduino-specific pins to the nRF24L01p-breakout board. Specifically, the connections are:

 

A modul bekötése:

  • SS : Arduino Pin 10 -> Breakout Board CSN
  • MOSI : Arduino Pin 11 -> Breakout Board MOSI
  • MISO : Arduino Pin 12 -> Breakout Board MISO
  • SCK : Arduino Pin 13 -> Breakout Board SCK

A programkód és kapcsolás A vázolt működés miatt a program a lehető legegyszerűbb. A setup() részen az SPI busz kijelölésre kerül, valamint a működéshez szükséges ChipEnable kivezetés. A bekötést egyszerűsíti, hogy bár a modul 3.3V tápfeszültségről jár, a ki/bemenetei 5V toleránsak. Azonban ha nem akarunk a forrasztásokal bajlódni, akkor illesztőpanelt is használhatunk: kapcs. rajz A wifiscanner program ide kattintva letölthető. megvalósulási foto A kapott eredmény az Arduino terminal képernyőn - a wifi csatornák ábrázolásával: eredmény Tapasztalatok, trükkök Ha nem akarunk bajlódni kiegészítő áramkörrel, akkor például a Nano IO board is bevethető. Ez többféle feladatra is alkalmas, így nem csak egy nagyranőtt wifi scannerünk lesz. És az illesztést már tartalmazza is az alappanel! Az nrf24l01/nrf24l01+ chippel szerelt lapkából többféle kialakítású is létezik: - nrf24l01 modul, nyák antennával (nrf24l01), - nrf24l01 nagynyereségű antennával, (nrf24l01 pa) - nrf24l01 erősítővel és nagynyereségű antennával (nrf24l01 pa la) A teszthez érdemes a botantennás kivitelt választani. A vétel során az adóerősítőt nem használjuk, de később ha szükség lesz 1 km átlövésére, jó szolgálatot tehet (a végfok nélküli, botantennás nrf24l01 gyártása megszűnt). A nyákantennás kivitel érzéketlenebb a kialakítása miatt, így kevesebb zajt lehet vele mérni. összehasonlítási ábra A WifiScanner nem csak a wifi jelre érzékeny. Bármely más, ezen a frekvencián működó eszköz zavaró hatását vizsgálhatjuk. a legegyszerűbb a bluetooth kapcsolat.l Ezt bekapcsolva jól látható a 2.4 GHz rádiós jelek megjelenése: bt ésbt nélkül. Ugyanilyen frekvencián működő eszköz a mikrohullámú sütó. Bekapcsolva kijut ebből is zaj a környezretbe: ábra mikro, wifionly A soros kommunikáció helyett látványos görbesor lehet az LCD-re való kiírás. Az egyszerűbb kábelezés miatt IIC bővítőmodulal lett a kijelző használva.

kép, eredmlny, progrmkód.

 

 

Furthermore, do not forget to connect the CE line which is required to drive the nRF24L01 to RX and also triggers the RF power reading. It is defined in the program as Arduino Pin 9: CE : Arduino Pin 9 -> Breakout Board CE A WiFi scanner CODE:

#include <spi.h>
// Poor Man's Wireless 2.4GHz Scanner
//
// uses an nRF24L01p connected to an Arduino
//
// Cables are:
//     SS       -> 10
//     MOSI     -> 11
//     MISO     -> 12
//     SCK      -> 13
//
// and CE       ->  9
//
// created March 2011 by Rolf Henkel
//
#define CE  9
// Array to hold Channel data
#define CHANNELS  64
int channel[CHANNELS];
// greyscale mapping
int  line;
char grey[] = " .:-=+*aRW";
nRF24L01P registers we need
#define _NRF24_CONFIG      0x00
#define _NRF24_EN_AA       0x01
#define _NRF24_RF_CH       0x05
#define _NRF24_RF_SETUP    0x06
#define _NRF24_RPD         0x09
// get the value of a nRF24L01p register
byte getRegister(byte r)
{
  byte c;
  PORTB &=~_BV(2);
  c = SPI.transfer(r&0x1F);
  c = SPI.transfer(0); 
  PORTB |= _BV(2);
  return(c);
}
// set the value of a nRF24L01p register
void setRegister(byte r, byte v)
{
  PORTB &=~_BV(2);
  SPI.transfer((r&0x1F)|0x20);
  SPI.transfer(v);
  PORTB |= _BV(2);
}
// power up the nRF24L01p chip
void powerUp(void)
{
  setRegister(_NRF24_CONFIG,getRegister(_NRF24_CONFIG)|0x02);
  delayMicroseconds(130);
}
// switch nRF24L01p off
void powerDown(void)
{
  setRegister(_NRF24_CONFIG,getRegister(_NRF24_CONFIG)&~0x02);
}
// enable RX
void enable(void)
{
    PORTB |= _BV(1);
}
// disable RX
void disable(void)
{
    PORTB &=~_BV(1);
}
// setup RX-Mode of nRF24L01p
void setRX(void)
{
  setRegister(_NRF24_CONFIG,getRegister(_NRF24_CONFIG)|0x01);
  enable();
  // this is slightly shorter than
  // the recommended delay of 130 usec
  // - but it works for me and speeds things up a little...
  delayMicroseconds(100);
}
// scanning all channels in the 2.4GHz band
void scanChannels(void)
{
  disable();
  for( int j=0 ; j<200  ; j++)
  {
    for( int i=0 ; i <CHANNELS ; i++)
    {
      // select a new channel
      setRegister(_NRF24_RF_CH,(128*i)/CHANNELS);
      
      // switch on RX
      setRX();
      
      // wait enough for RX-things to settle
      delayMicroseconds(40);
      
      // this is actually the point where the RPD-flag
      // is set, when CE goes low
      disable();
      
      // read out RPD flag; set to 1 if
      // received power > -64dBm
      if( getRegister(_NRF24_RPD)>0 )   channel[i]++;
    }
  }
}
// outputs channel data as a simple grey map
void outputChannels(void)
{
  int norm = 0;
  // find the maximal count in channel array
  for( int i=0 ; inorm ) norm = channel[i];
  // now output the data
  Serial.print('|');
  for( int i=0 ; i0 ) pos++;
    // clamp large values
    if( pos>9 ) pos = 9;
    // print it out
    Serial.print(grey[pos]);
    channel[i] = 0;
  }
  // indicate overall power
  Serial.print("| ");
  Serial.println(norm);
}
// give a visual reference between WLAN-channels and displayed data
void printChannels(void)
{
  // output approximate positions of WLAN-channels
  Serial.println(">      1 2  3 4  5  6 7 8  9 10 11 12 13  14                     <");
}
void setup()
{
  Serial.begin(57600);
  Serial.println("Starting Poor Man's Wireless 2.4GHz Scanner ...");
  Serial.println();
  // Channel Layout
  // 0         1         2         3         4         5         6
  // 0123456789012345678901234567890123456789012345678901234567890123
  //       1 2  3 4  5  6 7 8  9 10 11 12 13  14                     |
  //
  Serial.println("Channel Layout");
  printChannels();
  // Setup SPI
  SPI.begin();
  SPI.setDataMode(SPI_MODE0);
  SPI.setClockDivider(SPI_CLOCK_DIV2);
  SPI.setBitOrder(MSBFIRST);
  // Activate Chip Enable
  pinMode(CE,OUTPUT);
  disable();
  // now start receiver
  powerUp();
  // switch off Shockburst
  setRegister(_NRF24_EN_AA,0x0);
  // make sure RF-section is set properly
  // - just write default value...
  setRegister(_NRF24_RF_SETUP,0x0F);
  // reset line counter
  line = 0;
}
void loop()
{
  // do the scan
  scanChannels();
  // output the result
  outputChannels();
  // output WLAN-channel reference every 12th line
  if( line++>12 )
  {
    printChannels();
    line = 0;
  }
}
Fájlmelléklet: 

TavIR-Facebook