Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2017:lora-sniffer

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.

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.

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.

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.

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

2017/lora-sniffer.txt · Poslední úprava: 2018/01/14 20:46 autor: Ľubomír Švehla