bonescript

Bli med i chatten påByggestatusDekningsstatus

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 ()

  • rcState (,)- > tilstand
  • rcLED(led,,)- > verdi
  • rcon(hendelse,)
  • rcMotor(motor, rcservo(tilvalg, verdi)
  • rcbmp (,)- > verdi
  • rcimu (,)- >verdi
  • rcencoder(encoder,,)- >verdi
  • 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

    Legg igjen en kommentar

    Din e-postadresse vil ikke bli publisert.