BoneScript er en node.js bibliotek for fysisk databehandling på innebygd Linux, starter med støtte For BeagleBone.
Informasjon om språket er tilgjengelig på https://nodejs.org.
for å sjekke versjonen og for å se Om BoneScript er i banen din, prøv å kjøre:
node -pe "require('bonescript').getPlatform().bonescript"
Ytterligere dokumentasjon er tilgjengelig påhttps://beagleboard.org/bonescript.konseptet er å bruke Arduino-lignende funksjoner skrevet I JavaScript tilforenkle å lære å gjøre fysiske databehandlingsoppgaver under innebygd Linuxog for ytterligere å gi støtte for raskt å lage Gui for dine innebygde applikasjoner gjennom BRUK AV HTML5 / JavaScript nettsider.
Global Installasjon
BoneScript kommer installert På BeagleBone. For å oppdatere til den siste revisjonen, bruk ‘ npm ‘ på en nylig BeagleBoard.org Debian-bilde fra https://beagleboard.org/latest-imagesand utfør:
TERM=none sudo npm cache clearTERM=none sudo npm install -g --prefix /usr/local --unsafe-perm bonescriptsudo shutdown -r now
Testing på andre distribusjoner er begrenset.
Det er noen ekstra installasjonstrinn som kan utføres, men er typisk installert av andre mekanismer på BeagleBoard.org Debian images (Engelsk). Disse setupbackground tjenester (bone101 webserver med bonescript rpc og bonescript autorunservice) samt konfigurere miljøvariabler for disse tjenestene og otherglobally kjøre skript.
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
Starte programmer vedvarende
for å få programmene dine til å starte ved oppstart, bare slipp dem inn i/var/lib/cloud9/autorun-mappen. Flytte dem ut av den mappen vil drepeprosessene. Du forventes å bare slippe inn allerede feilfrie apper i denne mappen, da det ikke er en god måte å utføre feilsøking på dem.
Merk på kodestatus
det er fortsatt mye utvikling som skjer, så husk å sjekke tilbake på afrequent basis. Mange av de mer avanserte eksterne enhetene støttes ennå ikke unntatt gjennom å utføre fil I / O.
Katalogoppsett
- index.js: Hoved bonescript kildekode
- autorun.Js: Node.JS app for å kjøre apps falt i autorun mappen
- pakke.JSON: NPM.JS pakkebeskrivelse
- server.js: Dts: Devicetree maler
- etc: Konfigurasjonsfiler som skal plasseres i target distro
- src: bibliotek kildekode
- systemd: Konfigurasjonsfiler for systemd å starte tjenester
- test: å være-automatisert testkode
Mal
For Et BoneScript-program må du for øyeblikket manuelt ‘kreve’ thebonescript bibliotek. Funksjoner blir deretter referert gjennom objectprovid tilbake fra require.jeg begynte å prøve Å gi Arduino-lignende oppsett / loop-funksjoner, men theidea er egentlig ikke en god kamp for JavaScript. Bruke JavaScript er nativeflow fungerer best, men de kjente funksjonene er nok til å gi deg en boostin din fysiske databehandling produktivitet.
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-navn på tavlen og eksemplet ovenfor ville kopiere inngangsverdien Ved P8_12 Til utgangen P8_13 hver 100 ms.
API
når en tilbakeringing er gitt, vil funksjonene oppføre seg asynkront.Uten tilbakeringing vil funksjonene synkronisere og fullfør du returnerer.
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.rcinitialize ()
biter/byte, matematikk, trigonometri og tilfeldige tall
- lowbyte(verdi)
- highbyte(verdi)
- bitread(verdi, bitnum)
- bitclear(verdi, bitnum)
- bitclear(verdi, bitnum)
- min(x, y)
- maks(x, y)
- abs(x)
- begrense(x, a, b)
- kart(verdi, fralav, x, y)
- sqrt(x)
- sin(radianer)
- cos(radianer)
- tan(radianer)
- randomseed(x)
- tilfeldig (, maks)
merknad om ytelse
denne koden er helt uoptimalisert. Listen over mulige optimaliseringer som går gjennom hodet mitt er svimlende. Den gode nyheten er at jeg tror det kan alle bedone uten å påvirke API, først og fremst takket være Introspectioncapabilities Av JavaScript.
Til Slutt er dette planlagt å aktivere sanntidsbruk, direkte frajavascript. Planen er å attact evnen til å bruke dette programmeringsmiljøet i sanntid på flere fronter:
- Aktivere flere løkker og analysere dem for å avgjøre om de kan lastes av TIL EN PRU. Dette vil være den primære mekanismen for å gi sanntidtjenester Av IOs.
- Leverer tjenester med høyere orden som bruker standard periferiutstyr til deres tiltenkte bruk:
- Serielle drivere for I2C, SPI, UARTs, etc.analogWrite for PWMs bruker maskinvare pwms, timere, kernel gpio drivere, etc.
- Legge til real-time patcher til kjernen
JavaScript-språket gir noen funksjoner som jeg synes er veldig kultfor å gjøre innebygd programmering og node.js gjør noen ting for å hjelpe enablethat. Den primære er at I / O-funksjonene er alle asynkrone. Forembedded systemer, dette er spesielt nyttig for å utføre oppgaver med lav latenssom svarer på hendelser i systemet. Hva gjør JavaScript så mye enklere enn andre språk for å gjøre dette er at det holder hele konteksten aroundthe handler, så du trenger ikke å bekymre deg for det.
0.7.4 nøkkeloppdateringer
- Aktivert BeagleBone AI GPIO funksjoner (digitalRead / digitalWrite / getPinMode)
0.7.3 nøkkeloppdateringer
Big speed-up på lasting av lat-lasting sjelden brukte moduler
0.7.2 viktige oppdateringer
- https://github.com/beagleboard/bonescript/issues/52
https://github.com/beagleboard/bonescript/issues/53
0.7.1 viktige oppdateringer
svært liten oppdatering på en funksjon omfang
0.7.0 viktige oppdateringer
De fleste av disse reparasjonene kom fra En Google Summer Of Code 2018 prosjekt
- Fikser I pwm utgang under analogWrite oppdateringer
- Lagt funksjon samtaler For Robot Kontroll bibliotek støtte På BeagleBone Blå Eller Robotics Cape
- Lagt til støtte for node-stil tilbakeringinger med feil og data separert (valgfritt)
Planer
- SPI støtte
- pru støtte
- håndtering rekke pinner I Pinmode og getpinmode
- lagre av opprettet Dtbo og skrive konfigurasjon til cape eeprom