28
SVEU ˇ CILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RA ˇ CUNARSTVA ZAVRŠNI RAD br. 4423 Korištenjem EasyRadio modula povezati Arduino s ostalim raˇ cunalima Filip Žigun Zagreb, lipanj 2016.

Korištenjem EasyRadio modula povezati Arduino s ostalim … · 2017. 7. 17. · odredišta i polazišta one se koriste za prijenos podataka iskljuˇcivo kroz su celje togˇ sloja

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

  • SVEUČILIŠTE U ZAGREBUFAKULTET ELEKTROTEHNIKE I RAČUNARSTVA

    ZAVRŠNI RAD br. 4423

    Korištenjem EasyRadio modulapovezati Arduino s ostalim

    računalimaFilip Žigun

    Zagreb, lipanj 2016.

  • SADRŽAJ

    1. Uvod 1

    2. Internet stvari 2

    3. Simulator 33.1. Arhitektura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

    3.2. Formati poruka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    3.2.1. Vanjski omotač . . . . . . . . . . . . . . . . . . . . . . . . . 4

    3.2.2. Unutarnja poruka . . . . . . . . . . . . . . . . . . . . . . . . 5

    3.2.3. Okvir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    4. Arduino i EasyRadio 84.1. Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    4.2. EasyRadio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    5. Dodavanje Arduina u simulaciju Interneta stvari 105.1. Slanje i primanje podataka . . . . . . . . . . . . . . . . . . . . . . . 11

    5.2. Upravljanje okvirima . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    5.2.1. Strukture podataka . . . . . . . . . . . . . . . . . . . . . . . 12

    5.2.2. Funkcije za rad s okvirim . . . . . . . . . . . . . . . . . . . . 13

    5.3. Upravljanje paketima . . . . . . . . . . . . . . . . . . . . . . . . . . 14

    5.3.1. Strukture podataka . . . . . . . . . . . . . . . . . . . . . . . 14

    5.3.2. Funkcije za unutarnje poruke . . . . . . . . . . . . . . . . . . 15

    5.3.3. Funkcije za vanjski omotač . . . . . . . . . . . . . . . . . . . 17

    5.4. Program za Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    6. Primjeri rada 21

    7. Zaključak 23

    iv

  • Literatura 24

    v

  • 1. Uvod

    Internet stvari kao tehnologija koja se ubrzano razvija posljednjih godina razvija sus-

    tave koji se nalaze u vozilima, kućama, gradovima itd. Sustavi Interneta stvari nam

    omogućavaju da pratimo i prikupljamo informacije preko senzora ili pak da preko sus-

    tava upravljamo s nekim ured̄ajima. Za simuliranje sustava Interneta stvari korišten

    je simulator[1]. Cilj ovoga rada je bio povezati Arduino razvojnu pločicu sa simula-

    torom Interneta stvari. Za povezivanje Arduina sa simulatorom koristila se bežična

    komunikacija, a da bih Arduino mogao slati i primati okvire preko bežične veze s njim

    je korišten i EasyRadio modul. Arduino šalje podatke preko EasyRadio modula be-

    žičnom vezom ostalim čvorovima u sustavu koji takod̄er sadrže module za bežičnu

    komunikaciju. Da podatci koji dod̄u do odredišta ne bih bili krivo interpretirani po-

    datci se omataju u okvire, okviri imaju unaprijed definiranu strukturu koja omogućava

    ispravno otpakiravanje okvira. Za pakiranje podataka u okvire kasnije otpakiranje ok-

    vira korištene su funkcije koje su napisane za izvod̄enje na Arduino pločici. Kako se

    komunikacija u sustavi Interneta stvari odvija preko poruka koje se sastoje od vanj-

    skoga omotača i unutarnje poruke napisane su funkcije koje služe za postavljanje po-

    dataka u unutarnju poruku te kasnije omatanje poruka vanjskim omotačem. Takod̄er uz

    funkcije za omatanje poruka napisane su i analogne funkcije koje služe za odmatanje

    poruka i za parsiranje podataka.

    U sljedećim poglavljima nalaze se opisi arhitekture Interneta stvari i simulatora

    jedne takve arhitekture za koji su funkcije pisane. Opisana je i Arduino UNO razvojna

    pločica koja se koristi kao čvor u simulatoru arhitekture Interneta stvari, EasyRadio

    modul koji se postavlja na Arduino pločicu i koji služi za bežičnu komunikaciju. Opi-

    sano je i dodavanje Arduino pločice u simulaciju Interneta stvari, funkcije za ostvariva-

    nje bežične komunikaciju te funkcija za pakiranje i otpakiranje okvira odnosno paketa.

    I na kraju su pokazani primjer poruka i podatci koji se dobiju iz njih.

    1

  • 2. Internet stvari

    Internet stvari je mreža fizičkih objekata (ured̄aja, vozila, zgrada itd.) u koje su ugra-

    d̄eni elektronički sustavi, programi, senzori te ured̄aji koji ostvaruju mrežnu poveza-

    nost s ostalim čvorovima. Mrežna povezanost omogućuje da objekti prikupljaju i raz-

    mjenjuju med̄usobno podatke. Integracija sustava s internetom podrazumijeva da čvo-

    rovi koriste IP adrese kao jedinstveni identifikator i da koriste internet da bi ostvarili

    komunikaciju s drugim čvorovima u sustavu. U arhitekturi Interneta stvari se koriste

    tehnologija poput ugrad̄enih računala, bežične komunikacije i mikroelektromehanič-

    kih sustava. Takvi sustavi mogu imati zadatak da samo prikupljati podatke očitava-

    njem senzora u nekim okruženjima kao što su kuće, tvornice itd. ili mogu služiti za

    upravljanje ured̄ajima na daljinu. [2]

    2

  • 3. Simulator

    Simulator simulira razmjenu poruka izmed̄u čvorova u arhitekturi Interneta stvari. U

    simulatoru postoji više različitih simulacija koje se razlikuju po porukama koje se raz-

    mjenjuju izmed̄u čvorova. Arhitektura simulatora se sastoji od različitih čvorova. Čvo-

    rovi se dijele prema svojim ulogama u sustavu, različite uloge čvorova su detaljnije

    opisane u nastavku. U komunikaciji izmed̄u čvorova u sustavu izmjenjuju se poruke

    koji imaju definirani format. Formati poruka koje se razmjenjuju izmed̄u čvorova u

    ovome simulatoru opisani su takod̄er u ovome poglavlju.

    3.1. Arhitektura

    Arhitektura simulatora sastoji se od različitih čvorova. Pojedini čvor može imati razne

    uloge u sustavu. Čvorovi prema ulogama su:

    • stvar

    • posrednik

    • korisnik

    • servis

    Stvari imaju svoju zasebnu ulogu kojom nečim doprinose (npr. daju informacije,

    pokreću akcije i sl.). Posrednici prosljed̄uju poruke ostalim čvorovima, prema svojim

    protokolima koji ne ovise o protokolu Interneta stvari. Ipak, poneki takav ured̄aj može

    i obrad̄ivati takve poruke. U tom slučaju, takvi ured̄aji pripadaju skupini "čvorova"

    arhitekture Interneta stvari. Korisnik preko svog računala želi komunicirati sa stvarima.

    Problemi koje pritom susreće mogu biti razni: stvar mu nije izravno u dometu, ne

    pozna adresu stvari, stvar trenutno nije dostupna. Stoga u sustavu postoji servis. Servis

    odrad̄uje posredničku ulogu, ali i druge uloge. Podaci koje ima servis bi trebali biti

    najažurniji s obzirom na to da bi on trebao biti cijelo vrijeme dostupan. Naprave mogu

    3

  • svoje podatke upućivati prema servisu, a korisnik ih preko njega dohvaćati kada njemu

    to odgovara. Korisnik može svoje poruke za stvari usmjeriti na servis, a on ih dalje

    prosljed̄uje prema napravama. Servis se može "programirati" da sam poduzima neke

    akcije, periodički ili u odred̄enim situacijama. Servis je i točka proširenja nad kojom se

    mogu ostvarivati složenije operacije nad skupom stvari (nadzor, upravljanje, i slično).

    Svaki čvor ima lokalno pohranjene podatke koji mu omogućuju slanje poruka te prihvat

    i otvaranje pristiglih poruka te svoj jedinstveni identifikator. Pojedini čvor može imati

    više adresa za neki drugi čvor. Med̄utim ne smije se pretpostaviti da su te adrese

    valjane u svakom trenutku. Kod slanja poruka takvome čvoru treba isprobavati slanje

    poruka nekim redoslijedom. Prijenos poruka pretpostavlja da postoji neki prijenosni

    sloj. Prijenosni sloj ne mora biti pouzdan niti siguran. Komunikacija izmed̄u različitih

    čvorova može se odvijati preko više različitih čvorova. Ako prijenosni sloj ima adrese

    odredišta i polazišta one se koriste za prijenos podataka isključivo kroz sučelje tog

    sloja. citepdasiot

    3.2. Formati poruka

    U simulatoru poruke se sastoje od vanjskog omotača, unutarnje poruke i okvira. Vanj-

    ski omotač služi kako bi povećao sigurnost i privatnost kod prijenosa poruka u sustavu,

    dok unutarnja poruka sadrži podatke te identitet konačnog odredišta, unutarnja poruka

    može biti kriptiranja te vidljiva samo odred̄enom čvoru. Okvir služi kod prijenosa

    podataka serijskom vezom i u sebi sadrži unutarnju poruku s ili bez vanjskog omotača.

    3.2.1. Vanjski omotač

    Vanjski omotač se sastoji od vanjskih zastavica, duljine, unutarnje poruke i potpisa.

    Slika 3.1: Format vanjskog omotača

    Vanjske zastavice služe da bi se poruka mogla dobro "odmotati" na strani primate-

    4

  • lja, veličine su dva okteta i nalaze se na prvih dva okteta poruke. Duljina predstavlja

    veličinu unutarnje poruke i vanjskog omotača u oktetima. Duljina je veličine dva ok-

    teta i nalazi se poslije zastavica. Potpis je opcionalan, a koristi se za identifikaciju

    i autentifikaciju pošiljatelja, skrivanje identiteta pošiljatelja ili za posredno skrivanje

    unutarnje poruke od ostalih. Potpis se nalazi na kraju vanjskog omotača poslije unu-

    tarnje poruke. [1]

    3.2.2. Unutarnja poruka

    Unutarnja poruka se sastoji od unutarnjih zastavica, duljine, identifikatora poruke,

    identifikatora pošiljatelja, identifikatora odredišta, identifikatora prijašnje poruke, po-

    dataka i sigurnog sažetka.

    Slika 3.2: Format unutarnje poruke

    Veličina elemenata od kojih se sastoji unutarnja poruka ovisi o zastavici compact,

    kada je zastavica compact postavljana identifikatori poruka, odredišta i pošiljatelja te

    sigurni sažetak su veličine četiri okteta inače su veličine osam okteta. Zastavice služe

    da bi primatelj mogao dobro otpakirati unutarnju zastavicu, veličine su dva okteta i

    5

  • nalaze se na prva dva okteta u unutarnjoj poruci. Duljina predstavlja duljinu unutar-

    nje poruke u oktetima i nalazi se poslije zastavica. Identifikator poruke je jedinstven

    barem med̄u čvorovima u komunikaciji barem u nekom vremenskom intervalu. Iden-

    tifikator pošiljatelja je globalno jedinstveni identifikator čvora koji je poslao poruku.

    Identifikator odredišta poruke takod̄er mora biti globalno jedinstven i predstavlja iden-

    tifikator odredišnog čvora. Identifikator prijašnje poruke je postavljen ako je poruka

    odgovor na neku od prijašnjih poruka. Podaci sadrže podatke koji se šalju i mogu biti

    proizvoljne duljine. Sigurni sažetak je izračunat nad unutarnjom porukom, ali tako da

    se ona najprije dopuni tj. da se koriste pune duljine svih identifikatora bez obzira jesu

    li zaista prisutni u poruci. [1]

    3.2.3. Okvir

    U komunikaciji izmed̄u čvorova poruke se prenose nekim protokolom, u ovome radu

    je korišten prijenos podataka preko serijske veze te je zbog dodatnih mogućnosti ko-

    munikacije i sama serijska veza dodala svoj omotač. Omotač serijske veze (okvir) se

    dodaje na poruku koja se prenosi. Okviri se sastoje od okteta koji označava početak

    okvira, identifikatora pošiljatelja, identifikatora odredišta, podataka, ciklična kontrola

    pogrešaka i okteta koji označava kraj okvira. U okviru se nalaze specijali okteti:

    • STX - oktet koji označava početak okvira

    • ETX - oktet koji označava kraj okvira

    • DLE - escape znak

    Slika 3.3: Format okvira

    STX se nalazi uvijek na prvome oktetu u okviru, iza njega slijedi identifikator

    pošiljatelja koji je veličine je osam okteta. Nakon identifikatora pošiljatelja slijedi

    identifikator odredišta koji je takod̄er veličine osam okteta. Identifikatora pošiljatelja i

    odredišta predstavljaju jedinstvene identifikatore kod prijenosa podataka preko bežične

    veze. Podatci mogu biti različite duljine, a slijede nakon identifikatora odredišta. U

    6

  • okviru se još nalazi i ciklička kontrola pogreške koja se izračuna nad identifikatorima

    pošiljatelja i odredišta te podatcima, duljina cikličke kontrole pogreške je četiri okteta.

    Na kraju okvira se nalazi ETX. Takod̄er u okviru se još može nalaziti i DLE koji se

    ubacuje ispred znakova koji imaju istu vrijednost kao specijalni znakovi.

    7

  • 4. Arduino i EasyRadio

    4.1. Arduino

    Arduino UNO je pločica s mikrokontrolerom koja je korištena kao čvor u arhitekturi

    Interneta stvari. Pločica se sastoji od 8 bitnog mikrokontrolera ATmega328P koji radi

    na frekvenciji takta od 16 MHz. Na pločici se nalazi utor za napajanje i USB utor

    koji služi za programiranje Flash memorije. Memorija se programira preko razvojnog

    okruženja Arduino IDE koje služi i za razvijanje programa za Arduino.

    Mikrokontroler ATmega358P

    Radni Napon 5V

    Ulazni Napon (preporučen) 7-12V

    Ulazni Napon (granica) 6-20V

    Digitalni I/O Pinovi 14

    PWM Digitalni Pinovi 6

    Analogni Pinovi 6

    Flash Memorija 32 KB (0.5 KB bootloader)

    SRAM 2 KB

    EEPROM 1 KB

    Frekvencija takta 16 MHz

    Tablica 4.1: Arduino tehinčke specifikacije

    Programi za Arduino se pišu u sintaksi jezika C/C++ s tim da postoje dvije posebne

    funkcije loop i setup. Setup funkcija se zove kad program počinje izvod̄enje. Koristiti

    se inicijalizaciju varijabli, pinova itd. Funkcija setup će se pokrenuti samo jednom,

    nakon svakog uključivanja napajanja ili resetiranja Arduino pločice. Nakon što se

    izvrši setup funkcija i inicijalizira vrijednosti slijedi loop funkcija koja se izvršava

    beskonačno odnosno dok ima napajanja. [3]

    8

  • 4.2. EasyRadio

    EasyRadio modul se koristi za bežičnu komunikaciju s ostatkom sustava. Sastoji se od

    dva modula:

    • EasyRadio Arduino Shield

    • connect2Pi USB Dongle

    EasyRadio Arduino shield se postavlja na Arduino pločicu i komunicira preko pi-

    nova 2 i 3 s mikrokontrolerom, komunikacija se odvija serijskom vezom. Connect2Pi

    USB je dio koji se preko USB priključka spaja s računalom i omogućava računalu ko-

    munikaciju s EasyRadiom koji je na Arduinu. Dva EasyRadio modula komuniciraju

    na frekvencija od 19200 bitova po sekundi. Ovaj modul omogućuje Arduino pločici

    da komunicira bežično pomoću LPRS EasyRadio tehnologije koja djeluje na 868MHz

    u Europi i 915MHz u SAD-u u industrijskom znanstvenom i medicinskom rasponu

    frekvencija. Arduino pločica može slati i primati (half duplex) do 180 okteta podataka

    po paketu. Ured̄aj nudi raspon od obično oko 200 metara, a troši manje energije od

    sličnog WiFi-a ili Bluetooth-a. Frekvencija, širina pojasa, izlazna snaga i brzina prije-

    nosa podataka može se konfigurirati kako bi se omogućilo da više ured̄aja komunicira

    bez smetnji. [4]

    9

  • 5. Dodavanje Arduina u simulacijuInterneta stvari

    Da bi se Arduino dodao u simulator Interneta stvari potrebno je ostvariti komunikaciju

    izmed̄u njega i ostalih čvorova u sustavu. Komunikacija Arduina i ostatka sustava

    je ostvarena preko bežične veze, da bi Arduino mogao slati i primati podatke preko

    bežične veze povezan je s EasyRadio modulom za Arduino.

    Slika 5.1: Arduino s EasyRadio modulom

    Računalo je isto povezano sa sličnim EasyRadio modulom kao i Arduino. Raču-

    10

  • nalo se s EasyRadio modulom povezuje preko USB ulaza, preko USB ulaza modul

    prima podatke serijskom vezom i potom ih prosljed̄uje bežičnim putem ostalim čvoro-

    vima u sustavu odnosno podatke primljene preko bežične veze prosljed̄uje računalu.

    Slika 5.2: Računalo s EasyRadio modulom

    Nakon što je ostvarena razmjena podataka izmed̄u Arduina i računala uz pomoć

    funkcija za slanje i primanje podataka, implementirane su funkcije za rad s paketima i

    okvirima. Funkcije omogućavaju Arduinu da šalje podatke preko zadanih formata pa-

    keta i okvira odnosno da može pročitati primljene podatke od simulatora. Implemen-

    tacije funkcija uz pomoć kojih je Arduino dodan u simulaciju se nalaze u datotekama:

    • Communication.cpp/h - slanje i primanje podataka

    • Frame.cpp/h - upravljanje okvirima

    • Packet.cpp/h - upravljanje paketima (vanjski omotač, unutarnja poruka)

    • Arduino.ino - program za Arduino

    5.1. Slanje i primanje podataka

    Za ostvarivanje čitanja i slanja podataka preko serijske veze korištena je biblioteka

    SoftwareSerial. SoftwareSerial je biblioteka koja se dolazi s Arduino razvojnim alatom

    i služi za rad sa serijskom vezom. Korištene funkcije iz biblioteke SoftwareSerial su:

    • read - čitanje podataka

    • write - slanje podataka

    11

  • Funkcija SoftwareSerial.read vraća pročitanu vrijednost veličine jednoga okteta ili

    minus jedan ako čitanje nije bilo uspješno.

    Podatke koje preko bežične veze šalje drugi čvor primaju se preko funkcije read.

    Funkcija čita podatke sa serijske veze koju prima kao argument korištenjem funkcije

    SoftwareSerial.read. Prije čitanja funkcija najprije provjerava da li ima podataka za

    čitanje ako ima onda počinje s čitanjem, a ako nema onda se vraća u glavni program.

    Funkcija tijekom čitanja provjerava vrijednost pročitanog okteta sa specijalnim znako-

    vima (Vidjeti poglavlje 3.2.3). Kod čitanja podataka funkcija čeka da se pročita znak

    STX. Kada je znak STX pročitan počinje upis podataka u polje veličine dvjesto pede-

    set šest okteta što je veličina najvećeg paketa. Nakon što se upiše znak STX upisuju

    se i ostali znakovi. Ako se med̄u znakovima koji slijede pojavi znak DLE on se ne

    upisuje, nego samo postavi zastavicu. Kada je zastavica postavljena sljedeći znak se

    ne provjerava nego se samo upisuje u polje. Escape znak služi da se u okviru mogli

    slati specijalni znakovi tako da ne budu pogrešno protumačeni. Ako se tijekom čitanje

    ponovno pojavi znak STX, ali da ispred njega nije znak DLE onda upis u polje počinje

    od početka. Čitanje se odvija sve dok se ne pročita znak ETX ili dok ima podataka

    za čitanje. Kada se pročita znak ETX izlazi se iz funkcije i vraća se broj pročitanih

    znakova. Ako okvir nije uspješno pročitan vraća se vrijednost nula.

    Funkcija send služi za slanje podataka preko bežične veze. Kao argument funkcija

    prima serijsku vezu kojoj se šalju podatci te strukturu podataka okvira. Funkcija iterira

    po podatcima iz strukture te ih šalje preko serijske veze koristeći funkciju SoftwareSe-

    rial.write.

    5.2. Upravljanje okvirima

    Da bi slali podatke preko bežične veze potrebno ih je staviti u okvire. Okviri imaju

    unaprijed definirani oblik (vidjeti u poglavlje 3.2.3.). Postavljanje podataka u okviri

    služi da bi se smanjile pogreške koje su nastale tijekom prijenosa. Za rad s okvirima

    na Arduinu napisane su dvije funkcije. Funkcija koja stvara okvir od argumenta koje

    dobije i funkcija koja provjera je li okvir dobar i ako je onda ga otpakira i postavlja

    podatke u strukturu podataka.

    5.2.1. Strukture podataka

    Funkcije za rad s okvirima koriste dvije strukture podataka, strukturu podataka okvira

    i struktura podataka paketa.

    12

  • Struktura podataka okvira predstavlja cijeli okvir s cikličkom kontrolom pogreške

    i specijalnim znakovima. Sastoji se od polja veličine dvjesto pedest šest okteta i vari-

    jable koja predstavlja duljinu okvira.

    Struktura podataka paketa predstavlja podatke koji se nalaze u okviru, ali bez cik-

    ličke kontrole pogreške i specijalnih znakova, koristi se kod povratka vrijednosti iz

    uspješno pročitanog okvira. Sastoji se od:

    • Identifikatora pošiljatelja

    • Identifikatora odredišta

    • Podataka

    • Duljine podataka

    5.2.2. Funkcije za rad s okvirim

    Za rad s okvirima napisane su dvije funkcije makeFrame i unpackFrame. Funkcija

    makeFrame služi za stvaranje okvira, kao argumente prima:

    • Identifikator pošiljatelja

    • Identifikator odredišta

    • Podatke

    • Duljinu podataka

    • Pokazivač na strukturu podataka okvira - služi za povratak novog okvira

    Na početku u strukturu se upisuju identifikatori pošiljatelja, odredišta i podaci. Na-

    kon što se upišu podatci računa se ciklička kontrola pogreške[5]. Ciklička kontrola

    pogreške se računa nad identifikatorima i podatcima, veličine je četiri okteta i upisuje

    se u paket nakon podataka. Nakon što se upiše ciklička kontrola pogreške slijedi do-

    davanje escape znakova. Escape znak se dodaje ispred svakoga okteta koji ima istu

    vrijednosti kao i neki od specijalnih znakova. Za upis escape znakova služi funkcija

    koja iterira kroz polje i provjerava vrijednosti, kada pročita jedan od specijalnih zna-

    kova ispred njega upisuje escape znak. Nakon što se u strukture dodaju escape znakovi

    na početak okvira se postavi znak STX, a na kraj okvira se postavi znak ETX.

    Funkcija unpackFrame služi za otpakiranje primljenih paketa, kao argumente funk-

    cija prima:

    13

  • • Pokazivač na strukturu podataka okvira

    • Pokazivač na strukturu podataka paketa - struktura preko kojega vraća podatke.

    Funkcija prvo provjerava duljinu okvira, ako je manja od minimalne duljine ili veća

    od maksimalne, duljina paketa se postavlja na nulu i izlazi se i funkcije. Ako je duljina

    okvira zadovoljavajuća podatci se prepišu iz strukture okvira u pomoćno polje da se

    ne bi mijenjali podatci u strukturi. Nakon što prepiše podatke funkcija prvo uklanja

    escape znakove. Funkcija za uklanjanje escape znakova vraća ukupan broj uklonjenih

    escape znakova. Ako se dogodi greška tijekom uklanjanja escape znakova funkcija za

    uklanjanje znakova vraća vrijednost minus jedan te ispisuje pogrešku. Nakon uklanja-

    nja escape znakova provjerava se da li je uklanjanje bilo uspješno. Ako uklanjanje nije

    bilo uspješno izlazi se iz funkcije, a ako je uklanjanje bilo uspješno čita se ciklička

    kontrola pogreške koja se nalazi u okviru i uspored̄uje se s cikličkom kontrolom po-

    greške koja je izračunata nad primljenim podatcima. Ako su te dvije vrijednosti iste

    podatci se kopiraju iz pomoćnog polja u strukturu paketa. Ako vrijednosti nisu iste

    izlazi se iz programa.

    5.3. Upravljanje paketima

    Komunikaciju izmed̄u čvorova se odvija preko paketa, paketi se mogu sastojati od

    samo unutarnjih poruka ili unutarnjih poruka koje su omotane vanjskim omotačem.

    Formati unutarnjih poruka te vanjskog omotača su opisani u poglavljima 3.2.1 vanjski

    omotač i u 3.2.2 unutarnja poruka.

    5.3.1. Strukture podataka

    U radu s paketima koristile su se struktura podataka unutarnje poruke i struktura po-

    dataka vanjskog paketa. Struktura podataka unutarnje poruke predstavlja podatke koji

    se nalaze u unutarnjoj poruci. Ako unutarnja poruka ne sadrži neke od opcionalnih

    podataka onda su na tim mjestima upisane nule. Sastoji se od:

    • Zastavica

    • Duljine unutarnje poruke

    • Identifikatora prijašnje poruke

    • Identifikatora pošiljatelja

    14

  • • Identifikatora odredišta

    • Identifikatora prijašnje poruke

    • Pokazivača na podatke

    • HMAC

    Struktura podataka vanjskog paketa predstavlja podatke iz vanjskoga omotača i

    unutarnje poruke. Preko ove strukture vraćaju se podatci iz funkcija za otpakiranje

    vanjskog omotača. Ako vanjski omotač ne sadrži neke od opcionalnih podataka onda

    su na tim mjestima upisane nule. Sastoji se od:

    • Zastavica

    • Duljine vanjskog paketa - unutarnja poruka i vanjski omotač

    • Pokazivača na unutarnji paket

    • Identifikatora pošiljatelja

    • HMAC

    5.3.2. Funkcije za unutarnje poruke

    Za postavljanja podataka u unutarnje poruke i za čitanje podataka iz unutarnje poruke

    služe funkcije makeInnerPacket i unpackInnerPacket. Postavljanje podataka i kasnije

    čitanje podataka iz unutarnjih poruka obavlja se prema zastavicama. Postavljene zas-

    tavice označavaju da se podatci, koje zastavica predstavlja, nalaze u paketu. Podržane

    zastavice za unutarnju poruku su:

    • DATA_SET - označava da se u unutarnjoj poruci nalaze podatci

    • RESP_SET - označava da se u unutarnjoj poruci nalazi identifikator prijašnjeporuke

    • HMAC_SET - označava da se u unutarnjoj poruci nalazi HMAC1

    • REQ_ACK - zahtijeva se odgovor na primljeni paket1Hash-based message authentication code

    15

  • Funkcija makeInnerPacket postavlja podatke u pakete prema primljenim zastavi-

    cama, a kao argumente funkcija prima sljedeće podatke:

    • Zastavice

    • Pokazivač na podatke

    • Duljinu podataka

    • Identifikatore poruke

    • Identifikator pošiljatelja

    • Identifikator odredišta

    • Identifikator prijašnje poruke

    • Pokazivač na polje u koje se upisuje unutarnja poruka.

    Zastavice se prenose funkciji tako što odgovaraju postavljenim bitovima na odre-

    d̄enim mjestima u varijabli zastavice (npr. DATA_SET nalazi se na 5. bit). Najprije se

    u polje za unutarnju poruku upišu zastavice i identifikatori poruke, pošiljatelja i odre-

    dišta, jer se moraju nalaziti u svakoj poruci, onda slijedi upis identifikatora prijašnje

    poruke što ovisi o zastavici RESP_SET. Ako je zastavica postavljena odnosno ako je

    bit za mjestu za RESP_SET u zastavicama jednak jedan onda se identifikator prijašnje

    poruke dodaje u polje za unutarnju poruku. Upis podataka u unutarnju poruku ovisi

    je li postavljena zastavica DATA_SET ako jest onda se podatci dodaju u unutarnju po-

    ruku. Poslije upisa podataka provjerava se je li postavljena zastavica HMAC_SET ako

    je upisuju se HMAC. Na kraju se upisuje ukupna duljina unutarnje poruke u unutarnju

    poruku na mjesto trećeg i četvrtog okteta.

    Funkcija unpackInnerPacket služi za otpakiranje unutarnje poruke, kao argumente

    prima:

    • Pokazivač na unutarnju poruku

    • Pokazivač na strukturu unutarnje poruke

    Funkcija prvo inicijalizira strukturu tako da su svi okteti opcionalnih podataka jed-

    naki nula. Postavljanje svih okteta na nulu omogućuje da program prepozna koja su

    polja prazna. Nakon inicijalizacije čita zastavice s prva dva okteta preko pokazivača

    16

  • na unutarnju poruku i postavlja ih u strukturi podataka. Isto radi i s duljinom unutarnje

    poruke koja se nalazi na sljedeća dva okteta. Poslije čitanja zastavica i duljine u struk-

    turu se upisuju identifikatori poruke, primatelja i odredišta. Nakon što su se u strukturu

    upisali svi obavezni podatci slijedi upis opcionalnih podataka. Postojanje opcionalnih

    podataka se provjerava preko vrijednosti zastavica. Ako je zastavica RESP_SET pos-

    tavljena u strukturu se upisuje identifikator prijašnje poruke, isto vrijedi i za zastavicu

    HMAC_SET i HMAC. Na kraju ako je postavljena zastavica DATA_SET postavlja se

    pokazivač na podatke u unutarnjoj poruci. Ako primljena poruka zahtjeva odgovor to

    se može vidjeti iz vrijednosti zastavice REQ_ACK.

    5.3.3. Funkcije za vanjski omotač

    Zbog različitog formata vanjskog omotača i unutarnje poruke koriste se različite zas-

    tavice. Zastavice za vanjski omotač su:

    • FLAGS_OUTER - označava da se radi o vanjskom omotaču

    • SRC_SET - označava da se u vanjskom omotaču nalazi identifikator pošiljatelja

    • HMAC_SET - označava da se u vanjskom omotaču nalazi HMAC

    Funkcije se koriste za omatanje unutarnju poruke vanjskim omotačem odnosno kod

    čitanja podataka za otpakiranje vanjskog omotača. Funkcija makeOuterPacket služi za

    omatanje unutarnje poruke vanjskim omotačem, kao argumente funkcija prima:

    • Zastavice

    • Pokazivač na unutarnju poruku

    • Veličinu unutarnje poruke

    • Pokazivač na polje - u koje se upisuje vanjski paket (unutarnja poruka i vanjskiomotač)

    Na početku se provjerava je li zastavica FLAGS_OUTER postavljena, ako nije

    onda se unutarnja poruka samo prepiše u polje za vanjski paket i izlazi se iz funkcije.

    Ako je zastavica postavljena onda se upisuju zastavice na prva dva okteta u polju. Na-

    kon zastavica upisuje se unutarnja poruka tako da se preskoče dva okteta u koje će

    kasnije biti upisana ukupna duljina vanjskog paketa. U polje još može biti upisan i

    17

  • identifikator pošiljatelja, upis identifikatora pošiljatelja ovisi o tome je li postavljena

    zastavica SRC_SET ako jest onda se identifikator pošiljatelja upisuje na nakon unu-

    tarnje poruke. Na kraju se upisuje duljina vanjskog paketa na treći i četvrti oktet u

    polju.

    Funkcija unpackOuterPacket se koristi za otpakiranje primljenog paketa koji sadrži

    vanjski omotač i unutarnju poruku. Kao argumente funkcija prima:

    • Pokazivač na polje - u kojem se nalazi vanjski omotač s unutarnjom porukom

    • Pokazivač na strukturu podataka vanjskog paketa

    Kod otpakiranja vanjskog paketa prvo se podatci koji su opcionalni u strukturi vanj-

    skog paketa inicijaliziraju tako da su im svi okteti jednaki nula. Nakon što se struk-

    tura inicijalizirala prepisuju se zastavice i duljina vanjskog paketa iz polja u struk-

    turu podataka. Kada se prepišu zastavice provjerava se je li postavljena zastavica

    FLAGS_OUTER, ako nije postavljena u strukturi se postavlja pokazivač na unutarnju

    poruku tako da pokazuje na početak polja za vanjski paket jer se vanjski paket sastoji

    samo od unutarnje poruke. Ako je zastavica FLAGS_OUTER postavljena pokazivače

    se postavlja na početak unutarnje poruke u vanjskom paketu. Početak unutarnje po-

    ruke se nalazi nakon zastavica i duljine vanjskog paketa koji zajedno zauzimaju četiri

    okteta. Nakon što se postavi pokazivač provjerava se je su li postavljene zastavice

    SRC_SET i HMAC_SET. Ako je postavljena zastavica SRC_SET u strukturu se upi-

    suje identifikator pošiljatelja koji se nalazi u vanjskom paketu nakon unutarnja poruke.

    Na kraju se provjerava je upisuje HMAC ako je postavljena zastavica HMAC_SET.

    5.4. Program za Arduino

    Program za Arduino pisan je u razvojnom alatu Arduino IDE-u. U program su uklju-

    čene biblioteke u kojima se nalaze funkcije za komunikaciju, upravljanje okvirima te

    funkcije za upravljanje paketima. U programu za Arduino u funkciji setup se uspostav-

    lja serijska veza sa serijskim monitorom, koji se nalazi u Arduino IDE-u, i uspostavlja

    se serijska veza sa EasyRadio modulom. Serijski monitor služi da bi se mogli pratiti

    podatci koje Arduino prima od EasyRadio modula. Za rad sa serijskim monitorom

    postoje već gotove funkcije koje se nalaze u biblioteci SoftwareSerial.

    Nakon što su se uspostavile serijske veze program ulazi u funkciju loop. U funk-

    cija loop program provjerava postoje li podatci spremni za čitanje iz serijske veze s

    18

  • EasyRadio modulom. Ako podatci postoje poziva se funkcija read kojoj se kao argu-

    menti šalju serijska veza s EasyRadio modulom. Funkcija zapisuje pročitane podatke

    u polje i vraća broj upisanih okteta. Nakon što je funkcija pročitala podatke podatci

    se kopiraju u strukturu podataka za okvir i postavlja se duljina okvira na broj okteta

    koje je funkcija pročitala. Struktura podataka okvira se šalje u funkciju unpackFrame

    koja otpakira okvir i upisuje podatke u strukturu podataka za pakete. Podatci u struk-

    turi podataka za pakete predstavljaju vanjski paket. Da bi se vanjski paket otpakirao

    podatci se šalju u funkciju unpackOuterPacket. Funkcija unpackOuterPacket otpakira

    vanjski paket i upisuje podatke u strukturu podataka za vanjski paket. I na kraju da

    bih pročitali podatke iz unutarnje poruke pokazivač na unutarnju poruku iz strukture

    podataka za vanjski paket šaljemo funkciji unpackInnerPacket. Kada funkcija unpac-

    kInnerPacket upiše podatke u strukturu podataka za unutarnji paket podatci se ispisuju

    u heksadekadskom zapisu na serijski monitor preko funkcije Serial.print.

    Kada su ispisani primljeni podatci Arduino šalje svoje podatke ostalim čvorovima.

    Podatci se prvo preko funkcije makeInnerPacket upisuju u unutarnju poruku, stvaranje

    vanjskog paketa oko unutarnje poruke se preskače. Unutarnja poruka se postavlja u

    okvir preko funkcije makeFrame koja upisuje podatke u struktura podataka za okvir.

    Nakon što je unutarnja poruka postavljena u okvir poziva se funkcija send koja šalje

    okvir preko serijske veze EasyRadio modulu koji onda podatke iz okvira bežičnim pu-

    tem prosljed̄uje čvorovima kojima je poruka namijenjena. Primanje podataka njihovo

    otpakiranje i kasnije slanje se ponavlja u beskonačnoj petlji.

    Isječak koda 5.1: Program za Arduino

    void l oop ( ) {

    i f ( ea syRad io . a v a i l a b l e ( ) > 0 ) {

    / / c i t a n j e poda taka

    r e a d ( easyRad io ) ;

    / / o v i r j e u s p j e s n o p r o c i t a n

    i f ( i n > frame_min ) {

    / / k o p i r a n j e p r o c i t a n i h poda taka u s t r u k t u r u o k v i r a

    memcpy ( f . frame , inc , i n ) ;

    f . l e n g t h = i n ;

    / / o t p a k i r a n j e o k v i r a

    19

  • unpackFrame (&f , &p a c k e t ) ;

    / / o t p a k i r a n j e v a n j s k o g omotaca

    u n p a c k O u t e r P a c k e t ( p a c k e t . packe t , &o u t e r P a c k e t ) ;

    / / o t p a k i r a n j e u n u t a r n j e poruke

    u n p a c k I n n e r P a c k e t ( o u t e r P a c k e t . i p a c k e t , &i n n e r P a c k e t ) ;

    / / i s p i s poda taka

    .

    .

    .

    / / p o s t a v l j a n j e poda taka u u n u t a n j u poruku

    i n n e r S i z e = m a k e I n n e r P a c k e t ( 3 2 , mid , s r c , d e s t , r_mid ,

    da t a , d a t a _ s i z e , poruka ) ;

    / / s t v a r a n j e o k v i r a

    s t r u c t Frame∗ f p t r = ( s t r u c t Frame ∗ ) ma l l oc ( s i z e o f ( s t r u c tFrame ) ) ;

    makeFrame ( s _ s r c , s _ d e s t , poruka , i n n e r S i z e , f p t r ) ;

    d e l a y ( 1 0 0 0 ) ;

    / / s l a n j e o k v i r a

    send ( easyRadio , f p t r ) ;

    f r e e ( f p t r ) ;

    }

    }

    }

    20

  • 6. Primjeri rada

    Provjera valjanosti funkcija za okvire, unutarnje poruke i vanjski omotač se obavljala

    uspored̄ujući primjer poruka koje se u simulatoru šalju izmed̄u čvorova s ispisom pro-

    grama za testiranje funkcija. U programu se primjer neke poruke iz simulatora predaje

    funkcijama koje onda tu poruku otpakiraju i kasnije se ti parsirani podatci ispišu. Ta-

    kod̄er testiranje funkcija koje stvaraju poruke se odvijalo na sličan način. U programu

    su se funkcijama predali podatci koji predstavljaju elemente poruka i onda su se us-

    pored̄ivali ispis cijele poruke s primjerom te iste poruke iz simulatora. Ovakav način

    ispitivanja se odvijao s primjerima poruka koje se sastoje samo od unutarnje poruke te

    s porukama s vanjskim omotačem i unutarnjom porukom zajedno. Programi za ispiti-

    vanje su pisani u programskom jeziku C, a primjeri poruka su preuzeti iz simulatora.

    Radi lakšega uspored̄ivanja podataka podatci su se ispisivali u heksadekadskom obliku.

    21

  • Slika 6.1: Primjer ispis kod ispitivanja funkcija

    Nakon što su ispitane funkcije trebalo je provjeriti program za Arduino i je li

    moguće uspostaviti komunikaciju izmed̄u Arduina i simulatora. Simulacija Interneta

    stvari se pokreće preko komandne linije odabirom željenog testa iz simulatora. U

    simulatoru postoji više testova, test koji je korišten u ovom radu simulira slanje i pri-

    manje okvira preko serijske veze. Nakon što se na Arduino pohranio program pokreće

    se simulator s testom koji simulira slanje podataka bežičnim putem. Simulator šalje

    podatke svakih 5 sekundi. Podatci koje simulator šalje preko serijske veze dolaze na

    EasyRadio modul, koji je spojen na računalo. EasyRadio modul prosljed̄uje primljene

    podatke bežičnom vezom. Arduino nakon što uspješno primi okvir ispisuje ga na se-

    rijski monitor u heksadekadskom zapisu. Nakon otpakiranja okvira i paket ispisuju se

    podatci s imenima elemenata koje predstavljaju. Nakon ispisa Arduino odgovara na

    primljeni paket slanjem okvira u kojem se nalazi unutarnja poruka sa podatcima.

    22

  • 7. Zaključak

    U okviru rada napisane su funkcije za ostvarivanje komunikacije, funkcije za upravlja-

    nje paketima i program za Arduino. Opisana je arhitektura simulatora Interneta stvari,

    formati poruka koje simulator koristi, Arduino razvojna pločica i EasyRadio modul

    za bežičnu komunikaciju. Detaljno je opisana implementacija funkcija s kojima je

    ostvarena komunikacija izmed̄u Arduina i simulatora. Prikazani su isječci izvornoga

    koda koji je pisan u programskom jeziku C, te je prikazan ispis koji je nastao tijekom

    komunikacije izmed̄u Arduina i simulatora.

    Napisane funkcije omogućavaju da se Arduino poveže sa simulatorom i da raz-

    mjenjuju podatke, ali funkcije za upravljanje paketima podržavaju samo dio zastavica

    koje koristi simulator, da bi se Arduino u potpunosti mogao povezati sa simulatorom

    potrebno je nadograditi te funkcije tako da podržavaju rad sa svim zastavicama koje

    simulator koristi.

    23

  • LITERATURA

    [1] Simulator. https://github.com/l30nard0/dasiot, Lipanj 2016.

    [2] Internet stvari. https://en.wikipedia.org/wiki/Internet_of_

    things, Lipanj 2016.

    [3] Arduino. https://www.arduino.cc/, Lipanj 2016.

    [4] Easyradio za arduino. http://www.lprs.co.uk/assets/media/

    ERA-ARDUINO-S900%201.1.pdf, Lipanj 2016.

    [5] Računanje cikličke kontrole pogreške. http://www.hackersdelight.

    org/hdcodetxt/crc.c.txt, Lipanj 2016.

    24

    https://github.com/l30nard0/dasiothttps://en.wikipedia.org/wiki/Internet_of_thingshttps://en.wikipedia.org/wiki/Internet_of_thingshttps://www.arduino.cc/http://www.lprs.co.uk/assets/media/ERA-ARDUINO-S900%201.1.pdfhttp://www.lprs.co.uk/assets/media/ERA-ARDUINO-S900%201.1.pdfhttp://www.hackersdelight.org/hdcodetxt/crc.c.txthttp://www.hackersdelight.org/hdcodetxt/crc.c.txt

  • Korištenjem EasyRadio modula povezati Arduino s ostalim računalima

    Sažetak

    Ovaj rad opisuje povezivanje Arduino razvojne pločice i simulatora arhitekture

    Interneta stvari bežičnom vezom. Arduino i simulator su povezani sa EasyRadio mo-

    dulom koji se koristi za slanje i primanje podataka bežičnom vezom.

    Ključne riječi: Arduino, EasyRadio, Internet stvari.

    Connect Arduino to the Internet of things using EasyRadio module

    Abstract

    The subject of this paper is establishment of connection between Arduino bo-

    ard and the Internet of things simulator. Simulator and Arduino are connected with

    EasyRadio which is used for sending and receiving data wirelessly.

    Keywords: Arduino, EasyRadio, Internet of Things

    UvodInternet stvariSimulatorArhitekturaFormati porukaVanjski omotacUnutarnja porukaOkvir

    Arduino i EasyRadioArduinoEasyRadio

    Dodavanje Arduina u simulaciju Interneta stvariSlanje i primanje podatakaUpravljanje okvirimaStrukture podatakaFunkcije za rad s okvirim

    Upravljanje paketimaStrukture podatakaFunkcije za unutarnje porukeFunkcije za vanjski omotac

    Program za Arduino

    Primjeri radaZakljucakLiteratura