====== Zadanie ====== Ke vhodné vývojové desce připojte modul RFM95W a realizujte sniffer rádiového provozu standardu LoRa v pásmu 868MHz. Dekódujte nezašifrované části zprávy a vypisujte je spolu s RSSI a dalšími dostupnými údaji. ---- ====== Úvod ====== LoRa (Long Range) je forma bezdrôtovej komunikácie využívaná v IoT. Jej hlavnou výhodou pri IoT oproti iným technológiám ako je napr. Bluetooth je veľkýdosah (až 50 km). Zároveň majú zariadenia LoRa nízku cenu a spotrebu. Odosielané dáta sú šifrované pomocou AES128, čo z nej činí taktiež veľmi bezpečnú technolǵiu. {{ :2017:lora-sniffer:lora.png|Obr 1.1: Architektúra LoRa siete }} Úlohou tohoto projektu je navrhnúť jednoduchý hardvér a softvér, ktorý je schopný zachytávať LoRa pakety a získať z nich nezašifrované časti správ. Tie sú potom spolu s ďalšími zaznamenanými informáciami o prijatom pakete vypísané. ---- ====== Hardware ====== ==== 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. {{ :2017:lora-sniffer:frdm-kl25z_headers2.png|Vývojový kit FRDM KL25Z }} ==== 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. {{ :2017:lora-sniffer:img_20180112_161410.jpg?400 |LoRa modul RFM95W}} ---- ====== Zapojenie ====== 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}} ---- ====== 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: //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); Inicializáica LoRa modulu: 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; Príjem a spracovanie dát: 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; } ---- ====== 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]] ----