Prvi primer predstavlja "Pozdravljen svet!" oz. "Hello World!" na področju interneta stvari (IoT) kakor tudi kiberfizičnih sistemov (CPS). Primer opredeli osnovno funkcionalnost kombinacije mini ARM računalnika Raspberry Pi in mikrokrmilnika Arduino UNO s pomočjo tehnologije nodejs. Pri tem primeru bomo uporabili mehanizem zahteva/odziv ("request/response") za vklop in izklop svetleče diode LED (Light-Emitting Diode). V tem primeru omogočimo, da strojni del, v našem primeru svetlečo diodo, krmilimo preko interneta. Povezava z internetom omogoča razvoj različnih, izjemno uporabnih funkcionalnosti, ki sicer ne bi bile enostavno izvedljivo. Razvito kodo bomo shranili na disk kot primer01.js Kodo bomo zapisali v jeziku JavaScript (ECMAScript), od tod tudi končnica datoteke .js
Najprej moramo pripraviti "strojno opremo" sistema oz. v našem primeru vezavo svetleče diode glede na shemo, ki je prikazana v nadaljevanju. Levi del predstavlja električno shemo, desni del pa izgled razvojne ploščice ("breadboard"). Na spodnjem delu slike je prikazana povezava z Raspberry Pi računalnikom, ki je povezan z internetom. 220Ω upornik omeji tok preko svetleče diode LED in je povezan na digitalni "pin" 13. Negativna nožica svetleče diode je povezana z zemljo (GND).
Koda, ki je potrebna za izvedbo primera je izpisana v nadaljevanju. Uporabili bomo http nodejs modul ter firmato. Firmata je generični protokol za komunikacijo z mikrokontrolerji, v našem primeru z Arduinom. V našem primeru je komunikacija izvedena programsko med ARM računalnikom in Arduinom.
Za zapis kode bomo uporabili Cloud9 integrirano razvojno okolje ("IDE"). Izvorno kodo orodja je moč dobiti na povezavi: https://github.com/c9/core
Cloud9 je nameščen na Raspberry Pi računalniku in se ob priklopu avtomatsko zažene. Do Cloud9 okolja pridemo tako, da v brskalniku, najbolje "Chrome", vpišemo v vrstico z naslovom: http://192.168.1.209:8181 Pri tem namesto številke 209 vpišete svojo število Raspberry Pi računalnika. Naslednja slika prikazuje vnos naslova v brskalnik in izgled Cloud9 IDE.
V nadaljevanju ustvarimo novo datoteko ("File/New File"). Postopek je prikazan na naslednji sliki.
Nato prazno datoteko shranimo kot, "primer01.js" ("Save As... "); najprej izberemo v meniju "Save As..." :
Nato podamo ime datoteke (primer01.js):
Datoteka je zapisana na disk, kar vidimo na levi strani vmesnika:
Po zapisu kode v datoteki primer01.js shranimo datoteko s pritiskom na kombinacijo gumbov Ctrl+s ali prek menija kot je prikazano na naslednji sliki.
Sledi zagon datoteke z zapisom ukaza:
nodejs primer01.js
Nato testiramo delovanje primera z vnosom ustreznega naslova v brskalnik, v našem primeru je to http://192.168.1.209:8080 Pri tem namesto številke 209 vpišete svojo število Raspberry Pi računalnika. Na koncu moramo za vklop svetleče diode zapisati /1, t.j. http://192.168.1.209:8080/1
Na koncu ustavimo primer s pritiskom na kombinacijo gumbov Ctrl+c
V primeru, da je koda pravilno napisana kakor tudi pravilno izvedena vezava se mora svetleča dioda prižgati pri vnosu /1 ter ugasniti pri /0.
require("http"); ~ z require() naložimo ustrezne knjižnice, uporabimo HTTP strežnik za procesiranje zahteve in odziva (request / response)
http.createServer ~ ustvarimo objekt spletnega strežnika:
function(req, res){} ~ Funkcija, ki kot argument sprejme zahtevo in odziv (request / response)
res.writeHead(200, {"Content-Type": "text/html; charset=utf-8"}); ~ pošljemo odgovor oz. odziv s statusno kodo
res.end("Vrednost operatorja: " + operator); ~ konec odgovora (response) strežnika, dodamo še vrednost operatorja
.listen(8080, "192.168.1.209"); ~ strežnik posluša ter sprejema povezave na vratih 8080 URL http://192.168.1.209
nodejs https://nodejs.org
Nodejs Dokumentacija https://nodejs.org/api/http.html
HTTP Transakcije | https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/
Firmata npm https://www.npmjs.com/package/firmata
Firmata na github https://github.com/firmata/firmata.js
Firmata.org http://firmata.org/
Firmata / Arduino: https://www.arduino.cc/en/Reference/Firmata
node-serialport: https://github.com/EmergingTechnologyAdvisors/node-serialport
serial-port npm package: https://www.npmjs.com/package/serialport