BoneScript je uzel.knihovna js pro fyzické výpočty na embedded Linuxu, počínaje podporou BeagleBone.
informace o jazyce jsou k dispozici na https://nodejs.org.
zkontrolovat verzi a uvidíme, jestli BoneScript je v cestě, zkuste spustit:
node -pe "require('bonescript').getPlatform().bonescript"
Další dokumentace je k dispozici na https://beagleboard.org/bonescript.
pojem je použít Arduino jako funkce napsané v Javascriptu tosimplify učení, jak to udělat, fyzické výpočetní úkoly podle vložené Linuxand dále poskytovat podporu pro rychlé vytvoření Gui pro vaše embeddedapplications pomocí HTML5/JavaScript webových stránek.
Globální instalace
BoneScript je nainstalován na vašem BeagleBone. Aktualizovat na nejnovější revizi, použijte ‚npm na nedávné BeagleBoard.org Debian obrázek z https://beagleboard.org/latest-imagesand provedení:
TERM=none sudo npm cache clearTERM=none sudo npm install -g --prefix /usr/local --unsafe-perm bonescriptsudo shutdown -r now
Testování na jiné distribuce je omezena.
existuje několik dalších instalačních kroků, které lze provést, ale jsou obvykle instalovány jinými mechanismy na BeagleBoard.org Debian obrázky. Tyto setupbackground služby (bone101 webserver s bonescript RPC a bonescript autorunservice), stejně jako nastavit proměnné prostředí pro tyto služby a otherglobally spouštět skripty.
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
Spouštění aplikací vytrvale
, Aby vaše aplikace spuštění při startu, jednoduše přetáhněte je do/var/lib/cloud9/autorun složky. Přesunutí z této složky zabijeprocesů. Očekává se, že do této složky vložíte pouze aplikace bez chyb, protože na nich není dobrý způsob ladění.
poznámka ke stavu kódu
stále se děje hodně vývoje,takže se nezapomeňte občas zkontrolovat. Mnoho periferií fancier ještě není podporovános výjimkou provedení souboru I / o.
rozložení adresáře
- index.js: Hlavní zdrojový kód BoneScript
- autorun.JS: uzel.Aplikace JS pro spouštění aplikací klesla ve složce autorun
- balíček.npm.Deskriptor balíčku js
- server.js: BoneScript webový server sloužit až remote procedure volání
- dts: Devicetree šablony
- atd: Konfigurační soubory mají být umístěny v cílové distro
- src: zdrojový kód Knihovny
- systemd: soubory Konfigurace pro systemd začít služby
- test: K-být-automatizované testovací kód
Šablony
Pro BoneScript aplikaci, musíte současné době ručně „vyžadovat“ thebonescript knihovna. Funkce jsou pak odkazovány prostřednictvím objectprovided zpět z require.
začal jsem se snažit poskytnout Arduino-jako nastavení / smyčky funkce, ale theidea opravdu není dobrý zápas pro JavaScript. Používání Nativeflow JavaScriptu funguje nejlépe, ale známé funkce jsou dost, aby vám zvýšily vaši fyzickou výpočetní produktivitu.
Zde je příklad:
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); }}
‚P8_12″ a “ P8_13 jsou špendlík na nástěnku jména a výše examplewould kopírovat vstupní hodnotu na P8_12 na výstup P8_13 každých 100 ms.
API
Při zpětné volání je za předpokladu, že funkce se bude chovat asynchronně.Bez zpětného volání budou funkce synchronizovány a dokončenypřed návratem.
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 Robotiky Cape
- rcInitialize()
- rcState(, ) -> stav
- rcLED(led, , ) -> hodnota
- rcOn(akce )
- rcMotor(motor, hodnota )
- rcServo(opce, hodnota )
- rcBMP(, ) -> hodnota
- rcIMU(, ) -> hodnota
- rcEncoder(encoder, , ) -> hodnota
Bitů/Bajtů, Matematika, Trigonometrie a Náhodná Čísla
- lowByte(hodnota)
- highByte(hodnota)
- bitRead(hodnota, bitnum)
- bitWrite(hodnota, bitnum, bitdata)
- bitSet(hodnota, bitnum)
- bitClear(hodnota, bitnum)
- bit(bitnum)
- min(x, y)
- max(x, y)
- abs(x)
- omezit(x, a, b)
- map(hodnota, fromLow, fromHigh, toLow, toHigh)
- pow(x, y)
- sqrt(x)
- sin(radians)
- cos(radians)
- tan(radians)
- randomSeed(x)
- random (max)
Poznámka na výkon
Tento kód je zcela neoptimalizovaných. Seznam možných optimalizací, které běží přes mou hlavu, je ohromující. Dobrou zprávou je, že si myslím, že to všechno může být bez ovlivnění API, především díky introspectioncapabilities JavaScriptu.
nakonec se plánuje povolit použití v reálném čase přímo z JavaScriptu. V plánu je attact schopnost používat tento programovací životní prostředí v reálném čase na několika frontách:
- Umožňuje více smyček a jejich analýzu k určení, pokud mohou být vyloženy k PRU. To bude primární mechanismus pro poskytování systému IOs v reálném časeservis systému IOs.
- poskytování služeb vyššího řádu, které využívají standardní periferie pro zamýšlené použití:
- sériové ovladače pro I2C, SPI, UARTs atd.
- analogWrite pro PWMs pomocí hardwarových pwms, časovačů, ovladačů GPIO jádra atd.
- Přidávání real-time patche do jádra
jazyk JavaScript poskytuje některé funkce, které myslím, že jsou opravdu coolfor dělá embedded programování a uzel.js dělá některé věci, aby pomohl enablethat. Primární je, že I/o funkce jsou všechny asynchronní. Pro vestavěné systémy je to zvláště užitečné pro provádění úloh s nízkou latencí, které reagují na události v systému. Co dělá JavaScript mnohem jednodušší než jiné jazyky, je to, že udržuje celý kontext kolem psovoda, takže se o to nemusíte starat.
0.7.4 klíčové informace
- Povoleno BeagleBone AI funkce GPIO (digitalRead/digitalWrite/getPinMode)
0.7.3 klíčové informace
Velká rychlost-až na načítání pomocí lazy-loading zřídka používané moduly
0.7.2 klíčové informace
- https://github.com/beagleboard/bonescript/issues/52
- https://github.com/beagleboard/bonescript/issues/53
0.7.1 klíčové informace
Velmi menší aktualizace na funkce rozsah
0.7.0 klíčové informace
Nejvíce z těchto chyb přišel z Google Summer of Code 2018 projekt
- Opravy v PWM výstup při analogWrite aktualizace
- Přidána funkce volání pro Řízení Robotů podporu knihovny na BeagleBone Modré nebo Robotiky Cape
- Přidána podpora pro uzel-styl zpětná volání s chybou a data odděleny (volitelné)
Plány
- SPI podpora
- PRU podpora
- Manipulační pole kolíky v pinMode a getPinMode
- Úspory z vytvořené dtbo a zápis konfigurace do kapského EEPROM