Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2017:lora-sniffer

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
2017:lora-sniffer [2018/01/12 16:53]
Ľubomír Švehla
2017:lora-sniffer [2018/01/14 20:46] (aktuální)
Ľubomír Švehla
Řádek 17: Řádek 17:
 ====== Hardware ====== ====== Hardware ======
  
-===== FRDM KL25Z =====+==== FRDM KL25Z ====
 Jedná sa o vývojový kit od Freescale, ktorý obsahuje MCU KL25 s jadrom Arm Cortex-M0+. Spracúva dáta získané z LoRa modulu a odosiela získané údaje do PC. Jedná sa o vývojový kit od Freescale, ktorý obsahuje MCU KL25 s jadrom Arm Cortex-M0+. Spracúva dáta získané z LoRa modulu a odosiela získané údaje do PC.
  
Řádek 23: Řádek 23:
  
  
-===== RFM95W ​=====+==== RFM95W ====
 LoRa modul pracujúci s frekvenciou 868 MHz. Je umiestnený na shielde s možnosťou pripojenia antény a s možnosťou jednoduchého pripojenia k vývojovému kitu. Modul je napájaný napätím 3.3V. LoRa modul pracujúci s frekvenciou 868 MHz. Je umiestnený na shielde s možnosťou pripojenia antény a s možnosťou jednoduchého pripojenia k vývojovému kitu. Modul je napájaný napätím 3.3V.
  
Řádek 34: Řádek 34:
 Vývojový kit je prepojený s RFM95W pomocou SPI rozhrania a s PC pomocou virtuálneho sériového portu cez USB. Vývojový kit je prepojený s RFM95W pomocou SPI rozhrania a s PC pomocou virtuálneho sériového portu cez USB.
  
-{{: 2017:​lora-sniffer:​zapojenie.png?​400 |Zapojenie}}+{{ :​2017:​lora-sniffer:​zapojenie.png?​400 |Zapojenie}}
  
 +----
 +
 +====== Software ======
 +Systém je vyvýjaný v online vývojovom prostredí mbed. 
 +
 +Využité knižnice:​\\
 +**RadioHead** : Pre riadenie komunikácie medzi vývojovým kitom a modulom RFM95W \\
 +**USBSerial** : Pre vytvorenie virtuálneho sériového portu a komunikáciu kitu s PC 
 +
 +Inicializácia komunikácie sériového portu a SPI:
 +<code cpp>
 +//Virtual serial port over USB
 +USBSerial serial;
 +Serial pc(USBTX, USBRX); ​
 +     
 +// Singleton instance of the radio driver
 +RH_RF95 rf95(RFM95_CS,​ RFM95_INT);
 +     
 +SPI spi(PTD2, PTD3, PTD1); ​ // mosi, miso, sclk
 +DigitalOut cs(PTD0); ​       // NSS
 +spi.format(8,​0);​
 +spi.frequency(1000000);​
 +       
 +DigitalOut ResetPin(RFM95_RST,​ 1);
 +</​code>​
 +
 +Inicializáica LoRa modulu:
 +<code cpp>
 +while (!serial);
 +wait(0.1); ​       ​
 +serial.printf("​LoRa RX Test!\r\n"​);​
 +    ​
 +// manual reset
 +ResetPin=0;
 +wait(0.1);
 +ResetPin=1;
 +wait(0.1);
 +   
 +while (!rf95.init()) {
 +    serial.printf("​LoRa radio init failed\r\n"​);​
 +    while(1);
 +}
 +serial.printf("​LoRa radio init OK!\r\n"​);​
 +    ​
 +// Defaults after init are 434.0MHz, modulation GFSK_Rb250Fd250,​ +13dbM
 +if (!rf95.setFrequency(RF95_FREQ)) {
 +    serial.printf("​setFrequency failed\r\n"​);​
 +    while (1);
 +}
 +serial.printf("​Set Freq to: %f\r\n",​ RF95_FREQ);
 +  ​
 +rf95.setPromiscuous(true);​
 +bool recvFlag=0;
 +</​code>​
 +
 +Príjem a spracovanie dát:
 +<code cpp>
 +while(1)
 +    {
 +    // wait for a lora packet
 +    rxRecvLen = sizeof(rxBuffer); ​              // RadioHead expects max buffer, will update to received bytes
 +    serial.printf("​Searching for LoRa packets\r\n"​);​
 +    DigitalOut bled(LED_BLUE,​ 0);
 +
 +    while (recvFlag==0)
 +    {
 +        rf95.waitAvailableTimeout(1000);​
 +        bled=!bled;
 +        if (rf95.recv(rxBuffer,​ &​rxRecvLen))
 +        {
 +            recvFlag=1;
 +            char isAck[4] = {""​};​
 +            if (rf95.headerFlags() & RH_FLAGS_ACK)
 +                memcpy(isAck,​ "​Ack\0",​ 3);
 +            rxBuffer[rxRecvLen] = '​\0';​
 +                  ​
 +            snprintf(printBuffer,​ sizeof(printBuffer),​ "​Recv#:​%d @ %d,   ​Signal(RSSI)= %d", rxCount++, millis(), rf95.lastRssi());​
 +            serial.printf("​%s\r\n",​ printBuffer);​
 +            snprintf(printBuffer,​ sizeof(printBuffer),​ " From: %d >> To: %d     ​MsgId:​ %d  Flags: %2x    %s", rf95.headerFrom(),​ rf95.headerTo(),​ rf95.headerId(),​ rf95.headerFlags(),​ isAck);
 +            serial.printf("​%s\r\n",​ printBuffer);​
 +            snprintf(printBuffer,​ sizeof(printBuffer),​ "​Bytes:​ %d => %s \r\n", rxRecvLen, rxBuffer);
 +            serial.printf("​%s\r\n",​ printBuffer);​
 +        }
 +    }
 +    recvFlag=0;
 +}
 +</​code>​
 +----
 +
 +====== Záver ======
 +
 +Tento projekt bol realizovaný na vývojovom kite FRDM KL25Z vo vývojovom prostredí mbed. Komunikácia medzi kitom a LoRa modulom bola úspešne zrealizovaná pomocou SPI. Takisto aj komunikácia medzi kitom a počítačom bola úspešne zrealizovaná pomocou virtuálneho sériového portu. Odovzdávanie inštrukcí pre LoRa modul bolo zabezpečené pomocou príkazov z importovanej knižnice RadioHead. Inicializácia LoRa modulu pre príjem dát prebehla v poriadku. Vzhľadom na to, že zariadnie bolo testované iba vo vidieckom prostredí, nepodarilo sa overiť funkčnosť samotného hľadania a vypisovania zachytených správ.
 +
 +Odkaz na ukážku:\\
 +[[https://​photos.app.goo.gl/​1FGIWTzVIhBbRXQ13]]
 +
 +----
 +
 +====== Zdroje ======
 +
 +[[http://​www.hoperf.com/​upload/​rf/​RFM95_96_97_98W.pdf]]\\
 +[[https://​docs.google.com/​viewer?​url=http%3A%2F%2Fwww.seeedstudio.com%2Fdocument%2Fpdf%2FFRMD-KL25Z.pdf]]\\
 +[[http://​www.airspayce.com/​mikem/​arduino/​RadioHead/​]]\\
 +[[https://​os.mbed.com/​handbook/​USBDevice]]
 +
 +----
2017/lora-sniffer.1515772415.txt.gz · Poslední úprava: 2018/01/12 16:53 autor: Ľubomír Švehla