{"id":1122,"date":"2017-11-17T14:17:47","date_gmt":"2017-11-17T14:17:47","guid":{"rendered":"https:\/\/diysmarthome.hu\/?p=1122"},"modified":"2019-09-27T14:30:52","modified_gmt":"2019-09-27T14:30:52","slug":"javascript-hardverprogramozas","status":"publish","type":"post","link":"https:\/\/diysmarthome.hu\/leirasok\/javascript-hardverprogramozas\/","title":{"rendered":"JavaScript hardverprogramoz\u00e1s [Novucode]"},"content":{"rendered":"

Az ut\u00f3bbi id\u0151kben a JavaScript hihetetlen n\u00e9pszer\u0171s\u00e9gnek \u00f6rvend. Szinte a legn\u00e9pszer\u0171bb programoz\u00e1si nyelvnek tekinthet\u0151. Ezt j\u00f3l mutatja az is, hogy mennyire sokat fejl\u0151d\u00f6tt, milyen rengeteg dologgal eg\u00e9sz\u00edtett\u00e9k ki, \u00e9s itt nem csak a NodeJS-re gondolok: m\u00e1r mobil aplik\u00e1ci\u00f3kat \u00edrhatunk vele. S\u0151t a FirefoxOS pr\u00f3b\u00e1lta app r\u00e9tegk\u00e9nt haszn\u00e1lni mobilon majd pedig TV platformon.<\/strong><\/p>\n

Ebb\u0151l a trendb\u0151l a harverfejleszt\u0151k sem maradhattak ki, \u00edgy sz\u00fclettek meg az olyan projektek, mint a Tessel, az Espruino vagy a JonnyFive (illetve a t\u00f6bbi). R\u00e1ad\u00e1sul az olyan gy\u00e1rt\u00f3 \u2013 mint a Tessel \u2013 m\u00e9g k\u00e9sz modulokat is \u00e1rul a k\u00f6zponti vez\u00e9rl\u0151h\u00f6z, \u00edgy macer\u00e1s forraszt\u00e1sok n\u00e9lk\u00fcl (plug and play), szinte egyb\u0151l haszn\u00e1lhat\u00f3 egy-egy szenzor vagy vez\u00e9rl\u0151.<\/p>\n

De mir\u0151l is sz\u00f3l ez az eg\u00e9sz javascript a hardveren \u0151r\u00fclet? Mi\u00e9rt\u00a0j\u00f3?<\/h4>\n

M\u0171k\u00f6d\u00e9s\u00e9t tekintve a l\u00e9nyeg az, hogy implement\u00e1lt\u00e1k az alap JavaScript utas\u00edt\u00e1sk\u00e9szletet, kieg\u00e9sz\u00edtett\u00e9k p\u00e1r hardver specifikus utas\u00edt\u00e1ssal \u00e9s \u00edrtak hozz\u00e1 egy egyedi firmware-t, amivel a v\u00e9geredm\u00e9ny egy a t\u00e1mogatott mikrovez\u00e9rl\u0151k \u00e1ltal \u00e9rtelmezhet\u0151 k\u00f3dot gener\u00e1l, majd ezt futtatja\u00a0is a kiv\u00e1lasztott eszk\u00f6z\u00f6n. Ebben az a j\u00f3, hogy egy sokak \u00e1ltal ismert nyelven lehet programozni, \u00edgy haszn\u00e1lhat\u00f3ak a kedvenc fejleszt\u0151i eszk\u00f6zeink, illetve nem kell egy teljesen \u00faj dolgot\u00a0megtanulni, ahhoz alkalmazkodni.\u00a0Persze \u00edgy kev\u00e9sb\u00e9 optim\u00e1lis k\u00f3dot tudunk csak \u00edrni, illetve kevesebb funkci\u00f3t \u00e9r\u00fcnk el \u2013 nem \u00fagy\u00a0mint a gy\u00e1rt\u00f3k \u00e1ltal adott SDK-ban meg\u00edrt alkalmaz\u00e1sban. Azonban m\u00e9g \u00edgy is rengeteg lehet\u0151s\u00e9g\u00fcnk van.<\/p>\n

Az ARM alap\u00fa eszk\u00f6z\u00f6kn\u00e9l (RaspberryPi, Tessel, egyebek) ez v\u00e9gtelen\u00fcl egyszer\u0171; csak bedugjuk \u00e9s szinte egyb\u0151l \u00edrhatjuk a programunkat. Kicsit bonyolultabb a helyzet ha mikrovez\u00e9rl\u0151t (Arduino, ESP8266, egyebek) szeretn\u00e9nk haszn\u00e1lni, hiszen ekkor t\u00f6bb plusz be\u00e1ll\u00edt\u00e1st is el kell v\u00e9gezni egy sima Arduino IDE telep\u00edt\u00e9shez k\u00e9pest, sz\u00f3val lehet, hogy nem a kezd\u0151k kedvence lesz. Persze a kett\u0151 architekt\u00fara k\u00f6z\u00f6tt fontos k\u00fcl\u00f6nbs\u00e9gek vannak: m\u00edg az ARM alap\u00fa vez\u00e9rl\u0151k egy apr\u00f3 Linuxot futtat\u00f3 sz\u00e1m\u00edt\u00f3g\u00e9pnek tekinthet\u0151ek, ahol a sz\u00e1m\u00edt\u00e1si kapacit\u00e1s magasabb; addig a mikrovez\u00e9rl\u0151 alap\u00fa megold\u00e1sok sokkal kissebb er\u0151forr\u00e1ssal rendelkez\u0151 c\u00e9leszk\u00f6z\u00f6k korl\u00e1tozott funkcionalit\u00e1ssal, cser\u00e9be viszont stabilabb m\u0171k\u00f6d\u00e9ssel, alacsonyabb fogyaszt\u00e1ssal \u00e9s gyorsabb boot id\u0151vel.<\/p>\n

Pr\u00f3b\u00e1ljuk ki!<\/h4>\n

\u00c9n az\u00a0Espruino<\/a>-t v\u00e1lasztottam, mivel a c\u00e9leszk\u00f6z egy ESP8266 alap\u00fa\u00a0Sonoff Basic<\/a>\u00a0\u00e9s ez alapb\u00f3l t\u00e1mogatja. Az Espruino futtatja\u00a0az ES5 JavaScript utas\u00edt\u00e1sok\u00a0nagy r\u00e9sz\u00e9t (kb 95%), s\u0151t t\u00f6bb ES6-os \u00fajdons\u00e1g is el\u00e9rhet\u0151: arrow functions, template strings, binary literals, forEach\/etc on ArrayBuffers. Ezen fel\u00fcl egy k\u00e9sz IDE-t is ad a kez\u00fcnkbe, melyben ak\u00e1r vizu\u00e1lisan is szerkeszthetj\u00fck, majd fel\u00edrhatjuk a vez\u00e9rl\u0151re a k\u00f3dunkat. Ide\u00e1lis eszk\u00f6z azoknak akik most ismerkednek a hardver programoz\u00e1ssal.<\/p>\n

\"\"<\/a><\/p>\n

\"\"<\/a><\/p>\n

Ahhoz hogy elkezdj\u00fcnk egy ilyen projektet, a k\u00f6vetkez\u0151kre lesz sz\u00fcks\u00e9g\u00fcnk:<\/p>\n

    \n
  • kompatibilis mikrovez\u00e9rl\u0151<\/li>\n
  • egy editor<\/li>\n
  • programoz\u00f3 (USB soros \u00e1talak\u00edt\u00f3, ha nincs r\u00e1forrasztva)<\/li>\n
  • feltelep\u00edtett driver (Windows, Linux, OSX)<\/li>\n
  • a k\u00e9sz firmware<\/li>\n
  • fontos, hogy a WebIDE be\u00e1ll\u00edt\u00e1sok, kommunik\u00e1ci\u00f3n\u00e1l j\u00f3 „Baud rate” legyen megadva (esetemben\u00a0115200)<\/li>\n<\/ul>\n

    Ha programoz\u00f3t haszn\u00e1lunk, a k\u00f6vetkez\u0151k\u00e9pp csatlakoztassuk:<\/p>\n

    \"\"<\/a><\/p>\n

      \n
    • T\u00e1p – T\u00e1p<\/li>\n
    • RX – TX<\/li>\n
    • TX – RX<\/li>\n
    • GND – GND<\/li>\n<\/ul>\n

      A driver telep\u00edt\u00e9se (esetemben\u00a0CH340<\/a>) ut\u00e1n\u00a0a mikrovez\u00e9rl\u0151 be\u00e1ll\u00edt\u00e1sa a k\u00f6vetkez\u0151k\u00e9ppen n\u00e9z ki:<\/p>\n