bonescript

Join the chat atBuild Statusdekkingsstatus

BoneScript is een knooppunt.js bibliotheek voor fysieke computing op embedded Linux, te beginnen met ondersteuning voor BeagleBone.

informatie over de taal is beschikbaar op https://nodejs.org.

om de versie te controleren en te zien of BoneScript zich in uw pad bevindt, kunt u het volgende uitvoeren:

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

aanvullende documentatie is beschikbaar op https://beagleboard.org/bonescript.

het concept is om Arduino-achtige functies geschreven in JavaScript te gebruiken om het leren hoe fysieke computertaken uit te voeren onder ingebedde Linuxeen om verder ondersteuning te bieden voor het snel maken van GUI ’s voor uw embeddedapplicaties door het gebruik van HTML5/JavaScript webpagina’ s.

globale installatie

BoneScript wordt geïnstalleerd op uw BeagleBone. Om bij te werken naar de laatste revisie, gebruik je ‘ npm ‘op een recente BeagleBoard.org Debian image van https://beagleboard.org/latest-imagesand uitvoeren:

testen op andere distributies is beperkt.

Er zijn een aantal extra installatie stappen die kunnen worden uitgevoerd, maar worden meestal geà nstalleerd door andere mechanismen op de BeagleBoard.org Debian images. Deze setupbackground services (bone101 webserver met bonescript RPC en bonescript autorunservice) evenals configureren omgevingsvariabelen voor deze services en otherglobally draaien 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

programma ’s voortdurend opstarten

om uw programma’ s te laten starten bij het opstarten, plaatst u ze gewoon in de map/var/lib/cloud9/autorun. Het verplaatsen van hen uit die map zal de processen te doden. U wordt verwacht dat alleen vallen in al bug-gratis apps in deze map als er geen goede manier om debug op hen uit te voeren.

Note on code state

Er is nog steeds veel ontwikkeling gaande, dus zorg ervoor dat u op een frequente basis terugkomt. Veel van de liefhebbers randapparatuur worden nog niet ondersteund, behalve door het uitvoeren van bestand I/O.

Directory lay-out

  • index.js: belangrijkste BoneScript broncode
  • autorun.js: Node.JS-app om apps uit te voeren die in de autorun-map
  • zijn geplaatst.NPM.Js pakketdescriptor
  • server.js: BoneScript web server om te dienen op de remote procedure calls
  • dts: Devicetree sjablonen
  • enz: Configuratie bestanden worden geplaatst in het doel distro
  • src: Bibliotheek source code
  • systemd: Configuratie bestanden voor systemd om services te starten
  • test: Om geautomatiseerde test code

Template

Voor een BoneScript toepassing, moet u momenteel handmatig ‘vereisen’ thebonescript bibliotheek. Functies worden dan verwezen door het objectprovided terug van require.

Ik begon te proberen Arduino-achtige setup/loop functies te bieden, maar theidea is echt geen goede match voor JavaScript. Het gebruik van JavaScript ‘ s nativeflow werkt het beste, maar de vertrouwde functies zijn genoeg om u een boostin uw fysieke computing productiviteit.

Hier is een voorbeeld:

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); }}

De ‘P8_12’ en ‘P8_13’ zijn pin-namen op het bord en het bovenstaande voorbeeld zou de invoerwaarde op P8_12 elke 100 ms naar de uitvoer p8_13 kopiëren.

API

wanneer een callback wordt gegeven, zullen de functies zich asynchroon gedragen.Zonder een callback voorzien, zullen de functies synchroniseren en voltooien alvorens terug te keren.

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 Robotica Cape

  • rcInitialize()
  • rcState(, ) -> staat
  • rcLED(leiden, , ) -> waarde
  • rcOn(evenement )
  • rcMotor(motor, waarde )
  • rcServo(optie, waarde )
  • rcBMP(, ) -> waarde
  • rcIMU(, ) -> waarde
  • rcEncoder(encoder, , ) -> waarde

Bits/Bytes, Wiskunde en Trigonometrie en Willekeurige Getallen

  • low-bytes(waarde)
  • bytes(waarde)
  • bitRead(waarde, bitnum)
  • bitWrite(waarde, bitnum, bitdata)
  • bitSet(waarde, bitnum)
  • bitClear(waarde, bitnum)
  • bit(bitnum)
  • min(x, y)
  • max(x, y)
  • abs(x)
  • beperken(x, a, b)
  • kaart(waarde, fromLow, fromHigh, toLow, toHigh)
  • pow(x, y)
  • sqrt(x)
  • sin(radialen).
  • cos(radialen).
  • tan(radialen).
  • randomSeed(x)
  • random (max)

Opmerking over de prestaties

Deze code is helemaal unoptimized. De lijst met mogelijke optimalisaties die door mijn hoofd lopen is onthutsend. Het goede nieuws is dat ik denk dat het kan allemaal bedone zonder invloed op de API, vooral dankzij de introspectioncapaciteiten van JavaScript.

Uiteindelijk is dit gepland om real-time gebruik mogelijk te maken, rechtstreeks vanuit Javascript. Het plan is om de mogelijkheid aan te grijpen om deze programmeeromgeving in real-time op verschillende fronten te gebruiken:

  • waardoor meerdere lussen mogelijk worden en deze geanalyseerd worden om te bepalen of ze in een PRU kunnen worden gelost. Dit zal het primaire mechanisme voor het verstrekken van real-timeservicing van de IOs.
  • het leveren van diensten van hogere orde die gebruik maken van de standaard randapparatuur voor het beoogde gebruik:
    • seriële drivers voor I2C, SPI, UARTs, enz.
    • analogWrite voor PWMs met behulp van hardware PWMs, timers, kernel GPIO drivers, enz.
  • real-time patches toevoegen aan de kernel

De JavaScript-taal biedt een aantal functies die ik echt cool vind voor het uitvoeren van ingebedde programmering en node.js doet wat dingen om dat mogelijk te maken. De primaire is dat de I/O-functies allemaal asynchroon zijn. Forembedded systemen, Dit is vooral handig voor het uitvoeren van lage latency taken die reageren op gebeurtenissen in het systeem. Wat JavaScript zoveel makkelijker maakt dan andere talen om dit te doen, is dat het de volledige context rondom de handler houdt, zodat je je er geen zorgen over hoeft te maken.

0.7.4 key updates

  • ingeschakeld BeagleBone AI GPIO functies (digitalRead/digitalWrite/getPinMode)

0.7.3 key updates

grote snelheid bij het laden door lazy-loading niet vaak gebruikte modules

0.7.2 key updates

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

0.7.1 key updates

zeer kleine update op een functie scope

0,7.Toets 0 updates

de Meeste van deze correcties is afkomstig van een Google Summer of Code project 2018

  • Correcties in PWM-uitgang tijdens analogWrite updates
  • extra functie oproepen voor Robot Control voor bibliotheek-ondersteuning op BeagleBone Blauw of Robotics Cape
  • ondersteuning Toegevoegd voor node-stijl callbacks met fout en data gescheiden (optioneel)

Plannen

  • SPI-ondersteuning
  • PRU ondersteuning
  • Omgaan array pinnen in pinMode en getPinMode
  • het Opslaan van uit gemaakt dtbo en schrijven configuratie naar cape EEPROM

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.