BoneScript er en node.js-bibliotek til fysisk databehandling på indlejrede linjer,startende med understøttelse af BeagleBone.
oplysninger om sproget findes påhttps://nodejs.org.
for at kontrollere versionen og for at se, om BoneScript er i din vej, prøv at køre:
node -pe "require('bonescript').getPlatform().bonescript"
yderligere dokumentation er tilgængelig på https://beagleboard.org/bonescript.
konceptet er at bruge Arduino-lignende funktioner skrevet i JavaScript for at forenkle at lære at udføre fysiske computeropgaver under indlejret Linieog for yderligere at yde support til hurtigt at oprette GUI ‘ er til dine indlejrede applikationer ved hjælp af HTML5 / JavaScript-sider.
Global Installation
BoneScript kommer installeret på din BeagleBone. For at opdatere til den seneste revision skal du bruge ‘ npm ‘på en nylig BeagleBoard.org Debian image from https://beagleboard.org/latest-imagesand udfør:
TERM=none sudo npm cache clearTERM=none sudo npm install -g --prefix /usr/local --unsafe-perm bonescriptsudo shutdown -r now
test på andre distributioner er begrænset.
der er nogle yderligere installationstrin, der kan udføres, men er typiskinstalleret af andre mekanismer på BeagleBoard.org Debian-billeder. Disse setupbackground-tjenester (bone101 internetserver med bonescript RPC og bonescript autorunservice) samt konfigurere miljøvariabler for disse tjenester og andre globalt kørende scripts.
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
lancering af applikationer vedvarende
for at få dine applikationer til at starte ved opstart skal du blot slippe dem i mappen/var/lib/cloud9/autorun. At flytte dem ud af den mappe vil dræbeprocesserne. Du forventes kun at falde i allerede bug-fri apps intothis mappe, da der ikke er en god måde at udføre debug på dem.
Bemærk om kode tilstand
der er stadig meget udvikling i gang, så sørg for at tjekke tilbage på enhyppig basis. Mange af de mere avancerede perifere enheder understøttes endnu ikkebortset fra at udføre fil I/O.
Mappelayout
- indeks.js: vigtigste BoneScript kildekode
- autorun.JS: Node.JS app til at køre apps faldt i mappen autorun
- pakke.NPM.JS pakke descriptor
- server.js: DTS: Devicetree templates
- etc: konfigurationsfiler, der skal placeres i target distro
- src: bibliotekets kildekode
- systemd: konfigurationsfiler til systemd for at starte tjenester
- test: to-be-automated test code
skabelon
for en BoneScript-applikation skal du i øjeblikket manuelt’ Kræv ‘ thebonescript bibliotek. Funktioner refereres derefter gennem objectprovided tilbage fra kræve.
Jeg begyndte at forsøge at levere Arduino-lignende setup/loop-funktioner, men theidea er virkelig ikke et godt match for JavaScript. Brug af JavaScript ‘ s nativstrøm fungerer bedst, men de velkendte funktioner er nok til at give dig et boosti din fysiske computerproduktivitet.
Her er et eksempel:
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’ og ‘P8_13’ er pin-navne på tavlen og ovenstående eksempelville kopiere inputværdien ved P8_12 til output P8_13 hver 100 ms.
API
når der gives en tilbagekald, vil funktionerne opføre sig som p8_12.
API
asynkront.Uden en tilbagekald, vil funktionerne synkronisere og fuldførefør du vender tilbage.
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
- rcinitialiser()
- rcState(, ) -> tilstand
- rcLED(led, , ) -> værdi
- rcOn(begivenhed, )
- rcMotor(motor), værdi,)
- rcservo(option, value)
- rcbmp (,)- > value
- rcimu (,)- > value
- rcencoder(encoder,,)- > værdi
bits/bytes, matematik, trigonometri og tilfældige tal
- lavbyte(værdi)
- højbyte(værdi)
- bitread(værdi, bitnum)
- bitWrite(værdi, bitnum, bitdata)
- bitSet(værdi, bitnum)
- bitClear(værdi, bitnum)
- bit(bitnum)
- min(x, y)
- max(x, y)
- abs(x)
- begrænse(x, a, b)
- kort(værdi, fromLow, fromHigh, toLow, toHigh)
- pow(x, y)
- sqrt(x)
- sin(radianer)
- cos(radianer)
- tan(radianer)
- randomSeed(x)
- tilfældig (antal)
Note på præstationer
Denne kode er helt unoptimized. Listen over mulige optimeringer, der løber gennem mit hoved, er svimlende. Den gode nyhed er, at jeg tror, det kan alle bedone uden at påvirke API, primært takket være introspektioncapacities af JavaScript.
til sidst er dette planlagt til at aktivere brug i realtid, direkte frajavascript. Planen er at tilpasse evnen til at bruge dette programmeringsmiljø i realtid på flere fronter:
- aktivering af flere sløjfer og analyse af dem for at afgøre, om de kan aflæses til en PRU. Dette vil være den primære mekanisme til levering af realtidservering af IOs.
- levering af tjenester med højere ordre, der bruger standardudstyr til deres tilsigtede anvendelse:
- serielle drivere til I2C, SPI, UARTs osv.
- analogskriv til PC ‘er ved hjælp af pc’ er, timere, kernel GPIO-drivere osv.
- tilføjelse af realtidspatcher til kernen
JavaScript-sproget giver nogle funktioner, som jeg synes er virkelig coolfor at gøre indlejret programmering og node.js gør nogle ting for at hjælpe enablethat. Den primære er, at I / O-funktionerne alle er asynkrone. Foremedded systemer, dette er især nyttigt til at udføre opgaver med lav latenstidder reagerer på begivenheder i systemet. Hvad der gør JavaScript så meget lettereend andre sprog til at gøre dette er, at det holder den fulde kontekst omkring handleren, så du behøver ikke bekymre dig om det.
0.7.4 nøgleopdateringer
- aktiverede BEAGLEBONE AI GPIO-funktioner (digitalRead/digitalskriv/getPinMode)
0.7.3 nøgleopdateringer
stor hastighed ved indlæsning ved doven indlæsning sjældent anvendte moduler
0.7.2 nøgleopdateringer
- https://github.com/beagleboard/bonescript/issues/52
- https://github.com/beagleboard/bonescript/issues/53
0.7.1 nøgleopdateringer
meget mindre opdatering på en funktionsomfang
0.7.0 nøgleopdateringer
de fleste af disse rettelser kom fra et Google Summer of Code 2018-projekt
- rettelser i PM-output under analogskriv opdateringer
- Tilføjet funktion kræver Robotkontrolbiblioteksstøtte på BeagleBone Blue eller Robotics Cape
- Tilføjet support til Node-stil tilbagekald med fejl og data adskilt (valgfrit)
planer
- SPI support
- Pru support
- håndtering af række stifter i pinMode og getpinmode
- lagring af Oprettet dtbo og skrivekonfiguration til Cape EEPROM
/li>