a BoneScript egy csomópont.js könyvtár fizikai számítástechnikai beágyazott Linux, kezdve támogatja a BeagleBone.
a nyelvre vonatkozó információk ahttps://nodejs.org címen érhetők el.
a verzió ellenőrzéséhez és annak ellenőrzéséhez, hogy a BoneScript az elérési útjában van-e, próbálja meg futtatni:
node -pe "require('bonescript').getPlatform().bonescript"
további dokumentáció érhető el a https://beagleboard.org/bonescript címen.
a koncepció az, hogy használja Arduino-szerű funkciók írt JavaScript tosimplify tanulás, hogyan kell csinálni a fizikai számítási feladatok alatt beágyazott Linuxés további támogatást nyújt a gyors létrehozása GUI a embeddedapplications használatával HTML5/JavaScript weboldalakat.
globális telepítés
a BoneScript telepítve van a BeagleBone-ra. A legújabb verzióra való frissítéshez használja az ‘ npm ‘- t egy nemrégiben BeagleBoard.org Debian kép innen: https://beagleboard.org/latest-imagesand végezze el:
TERM=none sudo npm cache clearTERM=none sudo npm install -g --prefix /usr/local --unsafe-perm bonescriptsudo shutdown -r now
más disztribúciók tesztelése korlátozott.
vannak további telepítési lépések, amelyek végrehajthatók, de jellemzően más mechanizmusok telepítik a BeagleBoard.org Debian képek. Ezek setupbackground szolgáltatások (bone101 webszerver bonescript RPC és bonescript autorunservice), valamint konfigurálja a környezeti változók ezeket a szolgáltatásokat és másglobálisan fut szkriptek.
sudo cp bonescript/etc/default/node /etc/default/nodesudo cp bonescript/etc/profile.d/node.sh /etc/profile.d/node.shsudo cp bonescript/systemd/\* /lib/systemd/systemsudo systemctl enable bonescript.socketsudo systemctl enable bonescript-autorun.service
alkalmazások folyamatos indítása
ahhoz, hogy az alkalmazások indításkor elinduljanak, egyszerűen dobja őket a/var/lib/cloud9/autorun mappába. A mappából való eltávolításuk megöli a folyamatokat. Várhatóan csak a már hibamentes alkalmazásokat dobja be ebbe a mappába, mivel nincs jó módszer a hibakeresés végrehajtására.
megjegyzés a kódállapotról
még mindig sok fejlesztés folyik, ezért feltétlenül nézzen vissza a gyakori alapon. Sok a szakértő perifériák még nem támogatottkivéve teljesítő fájl I / O.
Könyvtár elrendezés
- index.js: fő BoneScript forráskód
- autorun.js: csomópont.JS app alkalmazások futtatásához esett az autorun mappa
- csomagot.JSON: NPM.JS csomag leíró
- szerver.js: DTS: Devicetree sablonok
- etc: konfigurációs fájlok a cél disztróban
- src: könyvtár forráskód
- systemd: konfigurációs fájlok a systemd számára a szolgáltatások elindításához
- test: to-be-automated teszt kód
sablon
egy BoneScript alkalmazáshoz manuálisan kell ‘require’ thebonescript könyvtár. A függvényekre ezután az objectprovided-en keresztül hivatkozunk vissza a require-től.
elkezdtem Arduino-szerű beállítási/hurok funkciókat biztosítani, de a Theidea valóban nem felel meg a JavaScript-nek. A JavaScript nativeflow használata a legjobban működik, de az ismerős funkciók elegendőek ahhoz, hogy fellendítsék a fizikai számítási termelékenységet.
íme egy példa:
var b = require('bonescript');b.pinMode('P8_12', b.INPUT);b.pinMode('P8_13', b.OUTPUT);setInterval(copyInputToOutput, 100);function copyInputToOutput() { b.digitalRead('P8_12', writeToOutput); function writeToOutput(x) { b.digitalWrite('P8_13', x.value); }}
a ‘P8_12’ és a ‘P8_13’ pin-nevek a táblán, és a fenti példa átmásolja a p8_12 bemeneti értéket a p8_13 kimenetre minden 100 ms-ban.
API
amikor visszahívás történik, a függvények úgy fognak viselkedni, hogy a aszinkron módon.Visszahívás nélkül a funkciók szinkronizálódnak és befejeződnekvisszatérés előtt.
System
- getPlatform() -> platform
- getEeproms() -> eeproms
- echo(data, ) -> data
- readTextFile(filename, ) -> data
- writeTextFile(filename, data, )
- setDate(date, )
Digital and Analog I/O
- analogRead(pin, ) -> value
- analogWrite(pin, value, , )
- attachInterrupt(pin, handler, mode, )
- detachInterrupt(pin, )
- digitalRead(pin, ) -> value
- digitalWrite(pin, value, )
- pinMode(pin, direction, , , , )
- getPinMode(pin, ) -> pinMode
- shiftOut(dataPin, clockPin, bitOrder, val, )
Serial
Uses https://github.com/voodootikigod/node-serialport
- serialOpen(port, options, )
- serialWrite(port, data, )
- serialParsers is serialport.parsers
I2C
Uses https://github.com/korevec/node-i2c
- i2cOpen(port, address, options, )
- i2cScan(port, )
- i2cWriteByte(port, byte, )
- i2cWriteBytes(port, command, bytes, )
- i2cReadByte(port, )
- i2cReadBytes(port, command, length, )
- i2cStream(port, command, length, )
Robot Control
new in 0.7.0 Runs on BeagleBone Blue; or BeagleBone Black or BeagleBone Black Wireless with BeagleBoard.org Robotics Cape
- rcInitialize()
- rcState(, ) -> állapot
- rcLED(led, , ) -> érték
- RCON(esemény, )
- rcMotor(motor, érték, )
- rcservo(opció, érték)
- rcbmp(, ) -> érték
- rcimu(, ) -> érték
- rcencoder(encoder, , ) -> érték
/li>
bitek/bájtok, matematika, trigonometria és véletlen számok
- lowbyte(érték)
- highbyte(érték)
- bitread(érték, bitnum)
- bitWrite(érték, bitnum, bitdata)
- bitSet(érték, bitnum)
- bittiszta(érték, bitnum)
- bit(bitnum)
- min(x, y)
- max(x, y)
- abs(x)
- constrain(x, a, b)
- map(érték, fromLow, fromhigh, tolow, tohigh)
- pow(x, y)
- sqrt(x)
- sin(radians)
- cos(radians)
- tan(radians)
- randomseed(x)
- random(, max)
megjegyzés a teljesítményről
Ez a kód teljesen nem optimalizált. A lehetséges optimalizálások listájaa fejemben megdöbbentő. A jó hír az, hogy azt hiszem, ez lehet minden bedone anélkül, hogy befolyásolná az API, elsősorban köszönhetően a introspectioncapabilities JavaScript.
végül, ez a tervek szerint lehetővé teszi a valós idejű használat, közvetlenül fromJavaScript. A terv az, hogy csatolja a képességét, hogy használja ezt a programozási környezet valós időben több fronton:
- lehetővé teszi a több hurok és elemzi őket, hogy meghatározzák, ha lehet off-loaded egy PRU. Ez lesz az elsődleges mechanizmus a valós idejű szolgáltatáshozaz IOs szolgáltatása.
- magasabb rendű szolgáltatások nyújtása, amelyek a szokásos perifériákat használják rendeltetésszerű használatukhoz:
- Soros illesztőprogramok I2C, SPI, UARTs stb.
- analogWrite a PWM-ekhez hardveres PWM-ek, időzítők, kernel GPIO illesztőprogramok stb.
- valós idejű javítások hozzáadása a kernelhez
a JavaScript nyelv olyan funkciókat kínál, amelyek szerintem nagyon jók a beágyazott programozás és a node elvégzéséhez.js csinál néhány dolgot, hogy segítsen enablable, hogy. Az elsődleges az, hogy az I/O funkciók mind aszinkron. Forembedded rendszerek, ez különösen hasznos az alacsony késleltetésű feladatok végrehajtásáhozamelyek reagálnak a rendszer eseményeire. Ami a Javascriptet sokkal könnyebbé teszi, mint más nyelveket, az az, hogy a teljes kontextust a kezelő körül tartja, így nem kell aggódnia miatta.
0.7.4 kulcsfrissítések
- engedélyezett BEAGLEBONE AI GPIO funkciók (digitalRead/digitalWrite/getPinMode)
0.7.3 kulcsfrissítések
nagy gyorsítás a betöltéskor lazy-loading ritkán használt modulok
0.7.2 kulcsfrissítések
- https://github.com/beagleboard/bonescript/issues/52
- https://github.com/beagleboard/bonescript/issues/53
0.7.1 kulcsfrissítések
nagyon kis frissítés egy funkció hatókörén
0.7.0 kulcsfrissítések
a legtöbb ilyen javítás a Google Summer of Code 2018 projektből származik
- javítások a PWM kimeneten az analogWrite frissítések során
- hozzáadott funkció a Robotvezérlő könyvtár támogatásához a BEAGLEBONE Blue vagy a Robotics Cape készüléken
- hozzáadott támogatás a csomópont stílusú visszahívásokhoz hibával és adatokkal elválasztva (opcionális)
tervek
- SPI támogatás
- Pru támogatás
- kezelése tömb csapok pinMode és Getpinmode
- megtakarítás ki létrehozott dtbo és írásban konfiguráció Cape EEPROM