====== 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]]
----