bonescript

Join the chat atBuild StatusCoverage Status

BoneScript on solmu.JS library for physical computing on embedded Linux, alkaen tuki BeagleBone.

tietoa kielestä löytyy osoitteesta https://nodejs.org.

tarkistaaksesi version ja nähdäksesi, onko BoneScript polullasi, kokeile runningia:

node -pe "require('bonescript').getPlatform().bonescript"

lisäohjeita löytyy osoitteesta https://beagleboard.org/bonescript.

konseptina on käyttää Javascriptillä kirjoitettuja Arduino-tyyppisiä funktioita yksinkertaistamaan fyysistä tietojenkäsittelyä koskevia tehtäviä sulautettujen Linuxien alla ja tarjoamaan edelleen tukea upotettujen sovellusten nopeaan luomiseen HTML5 / JavaScript-verkkosivujen avulla.

Global Installation

BoneScript tulee asennettuna beagleboneen. Jos haluat päivittää uusimpaan versioon, käytä ”npm” äskettäin BeagleBoard.org Debian image from https://beagleboard.org/latest-imagesand perform:

TERM=none sudo npm cache clearTERM=none sudo npm install -g --prefix /usr/local --unsafe-perm bonescriptsudo shutdown -r now

muiden jakeluiden testaus on vähäistä.

on olemassa joitakin lisäasennusvaiheita, jotka voidaan suorittaa, mutta jotka on tyypillisesti asennettu muilla mekanismeilla BeagleBoard.org Debian-kuvia. Nämä setupbackground-palvelut (bone101-verkkopalvelin bonescript RPC: llä ja bonescript autorunservice: llä) sekä määritä ympäristömuuttujat näille palveluille ja muille ryhmäajettaville skripteille.

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

sovellusten jatkuva käynnistäminen

saadaksesi sovelluksesi käynnistymään käynnistettäessä, pudota ne yksinkertaisesti/var/lib/cloud9 / autorun-kansioon. Niiden siirtäminen pois kansiosta tappaa prosessit. Sinun odotetaan vain pudota jo bugittomia sovelluksia tähän kansioon, koska ei ole hyvä tapa suorittaa debug niitä.

Huomautus kooditilasta

kehitystä on vielä paljon meneillään, joten muista tarkistaa tilanne uudelleen usein. Monet mielikuvituksellisemmista oheislaitteista eivät vielä tue file I/O: ta.

hakemiston asettelu

  • Hakemisto.js: pääasiallinen BoneScript-lähdekoodi
  • autorun.JS: Node.Autorun-kansioon
  • – pakettiin pudotettu JS-sovellus sovellusten ajamiseen.NPM.JS – paketin asiasana
  • palvelin.js: BoneScript web server to server up remote procedure calls
  • DTS: Devicetree templates
  • etc: asetustiedostot sijoitetaan target distro
  • src: Library source code
  • systemd: asetustiedostot systemd: lle palveluiden käynnistämiseksi

Template

Bonescript-sovellukselle on tällä hetkellä manuaalisesti ”vaadittava” thebonescript library. Toiminnot on sitten viitattu kautta objectprovided takaisin vaatia.

yritin aluksi tarjota Arduino-tyyppisiä setup / loop-toimintoja, mutta Theidea ei todellakaan sovi JavaScriptille. Käyttämällä JavaScriptin nativeflow toimii parhaiten, mutta tutut toiminnot ovat tarpeeksi antaa sinulle boostin fyysisen computing tuottavuutta.

tässä on esimerkki:

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” ja ”P8_13” ovat pin-nimiä taululla ja yllä oleva esimerkki kopioisi tuloarvon p8_12 tulosteelle P8_13 100 ms: n välein.

API

kun takaisinsoitto annetaan, funktiot käyttäytyvät asynkronisesti.Ilman takaisinsoittoa toiminnot synkronoituvat ja valmistuvat ennen paluuta.

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(, ) -> state
  • rcled(led, , ) -> value
  • rcon(event,)

  • rcmotor(motor, arvo,)
  • rcservo(optio, arvo)
  • rcbmp (,)- >arvo
  • rcencoder (encoder,,)- >arvo

bitit/tavut, matematiikka, Trigonometria ja satunnaisluvut

  • lowbyte(arvo)
  • highbyte(arvo)
  • bitread(arvo, bitnum)
  • bitWrite(arvo, bitnum, bitdata)
  • bitSet(arvo, bitnum)
  • bitclear(arvo, bitnum)
  • bitti(arvo, bitnum)
  • min(x, y)
  • max(x, y)
  • ABS(x)
  • constrain(x, a, b)
  • kartta(value, fromlow, fromhigh, tolow, tohigh)
  • pow(x, y)
  • sqrt(x)
  • sin(radiaanit)
  • tan(radiaanit)
  • Random(x)

Note on performance

tämä koodi on täysin optimoimaton. Luettelo mahdollisista optimointeja, että Runn Through pääni on huikea. Hyvä uutinen on, että mielestäni se voi kaikki bedone vaikuttamatta API, pääasiassa kiitos introspectioncapabilities JavaScript.

lopulta tämä on suunniteltu mahdollistamaan reaaliaikaisen käytön suoraan JavaScriptistä. Suunnitelma on toteuttaa kyky käyttää tätä ohjelmointiympäristöä reaaliaikaisesti useilla rintamilla:

  • mahdollistaa useiden silmukoiden käytön ja analysoi niitä määrittääkseen, voidaanko ne purkaa PRU: lle. Tämä on ensisijainen mekanismi reaaliaikaisen palvelun IOs.
  • tarjoaa korkeamman tilauksen palveluita, jotka käyttävät vakio-oheislaitteita aiottuun käyttöönsä:
    • Sarjajurit I2C: lle, SPI: lle, Uartsille jne.
    • analogWrite PWMs: lle käyttäen laitteiston PWMs: ää, ajastimia, ytimen GPIO-ajureita jne.
  • reaaliaikaisten paikkausten lisääminen ytimeen

JavaScript-kieli tarjoaa joitain ominaisuuksia, jotka ovat mielestäni todella cooleja sulautetun ohjelmoinnin ja solmun tekemiseen.js tekee joitakin asioita auttaakseen enable that. Ensisijainen on, että I / O-toiminnot ovat kaikki asynkronisia. Forembedded systems, tämä on erityisen hyödyllistä suorittaa matalan latenssin tehtäviä, jotka vastaavat tapahtumia järjestelmässä. Mikä tekee JavaScript niin paljon helpompaa kuin muut kielet tehdä tämä on, että se pitää koko asiayhteyden aroundkäsittelijä, joten sinun ei tarvitse huolehtia siitä.

0.7.4 näppäinpäivitykset

  • käytössä olevat BeagleBone AI GPIO-toiminnot (digitalRead/digitalWrite/getPinMode)

0.7.3 näppäinpäivitykset

suuri nopeus latauksessa laiskasti ladatuilla harvoin käytetyillä moduuleilla

0.7.2 avainpäivitystä

    https://github.com/beagleboard/bonescript/issues/52https://github.com/beagleboard/bonescript/issues/53

0.7.1 avainpäivitystä

hyvin vähäinen päivitys funktion laajuudesta

0.7.0 key updates

useimmat näistä korjauksista tulivat Google Summer of Code 2018-projektista

  • korjaukset PWM-ulostulossa analogWrite-päivitysten aikana
  • Lisätty funktiokutsuja Robot Control library-tukeen BEAGLEBONE Blue-tai Robotics Cape-järjestelmässä
  • Lisätty tuki solmutyyppisille kutsuille, joissa on virhe ja data erotettuna (valinnainen)

suunnitelmat

  • SPI-tuki
  • Pru-tuki
  • käsitteli pinsien joukkoa Pinmodessa ja getpinmodessa
  • säästäen luotua dtboa ja kirjoittaen kokoonpanoa Cape eepromille

Vastaa

Sähköpostiosoitettasi ei julkaista.