Git Product home page Git Product logo

ssy's Introduction

SSY

Bezdrátová LWM sieť

Popis projektu

Cieľom projektu bolo vytvroriť bezdrôtovo senzorovú sieť s protokolom LWM. Sieť má jedného koordinátora, ktorý je pripojený k PC pomocou UART a jeho úlohou je prideľovať adresy ostatným zariadeniam, ktoré sa budú chcieť do siete pripojiť, ďalej je jeho úlohou vyčítať dáta zo senzorov, ktoré sú umiestnené na jednotlivých kitoch.

Popis kódu a popis riešenia

TYPES

Na začiatku kódu v main.c, v časti DEFINES sú uvedené parametre, ktoré definujú typ jednotlivých zariadení, definujú endpointy pre (network, RSSI), taktiež sú v tejto časti definované typy správ, ktoré v komunikácii môžu nastať - žiadosť o pridelenie adresy, odpoveď od koordinátora, potvrdzovacia správa a chybná správa. Ďalej sa v tejto časti definovali vzdialenosti dvoch Routerov od koordinátora, ktoré sa natvrdo zadali do programu ako #DEFINE DISTANCE 1 a #DEFINE DISTANCE 2.

DEFINES

V tejto časti sú definované jednotlivé štruktúry správ a stavov.

PROTOTYPES

V tejto časti sú zadané hlavičky jednotlivých funkcií, ktoré sa používajú. Taktiež sa tu nachádzajú aj metódy, ktoré sú určené len (pomocou if defined) pre koordinátora alebo pre Router alebo pre koncové zariadenie. V tejto časti boli pridané funkcie appSendRSSI(odosielanie RSSI) a appRSSIConfirmation (potvrdenie o prijatí RSSI). appSendRSSI Funkcia sa stará a odoslanie RSSI. Je v nej uvedený RSSI ENDPOINT (4), adresa, na ktorú sa RSSI posiela (posiela sa broadcastovo na adresu 0xFFFF). Správy sú označované ID (sec_ID), ktoré sa zvyšuje po každom odoslaní.

Proces fungovania programu

Správy, ktoré odosielajú koncové zariadenia a routere, sú smerované na koordinátora, ktorý tieto správy spracováva. V tomto programe bol hlavný zámer o pracovanie s údajom RSSI.
Práca s RSSI
Informáciu o prijatom RSSI od zariadenia vypíše kooridnátor hláškou do konzole. O tento výpis sa stará metóda appRSSIConfirmation.
Útlmový člen
Následne pomocou #if define koordinátor najskor kontroluje pomocou funkcie existujuca_adresa či údaje od zariadenia s danou adresou nemá uloženú v poli, pokial nemá, tak adresu uloží. Následne príjma 5 ďalších hodnôt RSSI od zariadenia. Tieto hodnoty sa zapisujú do poľa pole_prijatych_RSSI[4], následne sa tieto hodnoty zoradia pomocou qsort a pokial ich má týchto hodnot aspon 5, tak z nich vypocita medián, respektíve zoberie hodnotu na indexe [2], keďže sa jedná a nepárny počet prvkov. Následne sa pomocou funkcie zoslabovaci_clen (éta) spočíta útlmový člen. Funkcia zoslabovaci_clen pracuje s dvomi hodnotami RSSI, ktoré sa získajú od uzlov, ktoré sú umiestnené v známych vzdialenostiach (DISTANCE_1 a DISTANCE_2). Zo vzorca sa vyjadrí výpočet éty ako rozdiel daných hodnot RSSI podelený desatnásobkom logaritmu, pričom v argumente logaritmu bude podiel vzdialeností (DISTANCE_1 a DISTANCE_2) dvoch známych zariadení, od ktorých prijímame RSSI. V mojom konkrétnom prípade vyšla éta približne 4,65. Výpočet je ukázaný na priloženej fotografii. Pri volaní tejto funkcie v kóde sa ako paramtere predávajú údaje z poľa, ktoré drží informácie o prijatých RSSI.
Prepočet z RSSI na vzdialenosť
Následne sa pomocou známej hodnoty zoslabovacieho člena može spočítat vzdialenost medzi koordinátorom a daným zariadením. Toto rieši funkcia calculateDistanceFromRSSI . Funkcia pracuje so známymi hodnotami rssi (RSSIx) a vzdialenostou DISTANCE1 (dx), to znamená, že sa jedná o parametre pre zariadenie, ktorého vzdialenosť od koordinátora poznáme. Následne parameter rssi_2 (RSSId) predstavuje prijatú hodnotu RSSI od zariadenia, ktorého vzdialenosť počítame. Po dosadení do vzorca (obrázok 2) vyšlo, že zariadenie sa nachádza približne 1,82m od koordinátora, čo odpovedalo realite. Pri volaní tejto funkcie v kóde, sa používa definovaná vzdialenosť DISTANCE_1, ktorá predstavuje známu vzdialenosť, následne sa z poľa pole_ulozenych_adres vyberie RSSI pre známe zariadenia označené ako PRIMAR. Potom sa vyberie ďalší prijatý údaj a použje už známa vypočítaná hodnota zoslabovacieho člena.

Príjimaný formát dát

Pomocou funkcie appUartSendMessageHR je zabezpečený čitatelný formát príjmaných dát.

Ukážky z Putty

Ukážka pridelenia adresy 8002 zariadeniu, ktoré si o ňu zažiadalo. Taktiež formát prijatých správ:

Pridelenie adresy dalsiemu pripojenemu zariadeniu

Ukážka toho, že koncovému zariadeniu bola adresa pridelená:

Pridelenie adresy dalsiemu zariadeniu 8002

Schéma znázorňujúca vzdialenosti d1 a d2, tzn. známe vzdialenosti zariadení vzhľadom na koordinátora:

Schéma zapojenia

Ručné výpočty vzdialenosti d a zoslabovacieho člena (éta):

Výpočty

ssy's People

Contributors

xbolfm01 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.