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