bonescript

gå med i chatten påByggstatusTäckningsstatus

BoneScript är en nod.JS-bibliotek för fysisk databehandling på inbäddad Linux, börjar med stöd för BeagleBone.

Information om språket finns på https://nodejs.org.

för att kontrollera versionen och se om BoneScript finns i din sökväg, försök att köra:

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

ytterligare dokumentation finns på https://beagleboard.org/bonescript.

konceptet är att använda Arduino-liknande funktioner skrivna i JavaScript tosimplify lära sig att göra fysiska datoruppgifter under embedded Linuxand att ytterligare ge stöd för att snabbt skapa GUI för dina embeddedapplications genom användning av HTML5 / JavaScript webbsidor.

Global Installation

BoneScript installeras på din BeagleBone. För att uppdatera till den senaste versionen, använd ’ npm ’på en nyligen BeagleBoard.org Debianavbildning från 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

testning på andra distributioner är begränsad.

det finns några ytterligare installationssteg som kan utföras, men är typisktinstalleras av andra mekanismer på BeagleBoard.org Debianavbilder. Dessa setupbackground tjänster (bone101 webbserver med bonescript RPC och bonescript autorunservice) samt konfigurera miljövariabler för dessa tjänster och otherglobally köra 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

starta applikationer ständigt

för att starta dina applikationer vid start, släpp dem helt enkelt i mappen/var/lib/cloud9/autorun. Att flytta dem ur den mappen kommer att dödaprocesserna. Du förväntas bara släppa in redan bugfria appar iden här mappen eftersom det inte finns ett bra sätt att utföra felsökning på dem.

anmärkning om kodtillstånd

det finns fortfarande mycket utveckling på gång, så var noga med att kolla tillbaka på enfrekvent basis. Många av de snyggare kringutrustning är ännu inte supportedexcept genom att utföra filen I / O.

Directory layout

  • index.js: Huvud BoneScript källkod
  • autorun.JS: nod.JS app för att köra appar tappade i autorun-mappen
  • paket.json: NPM.JS paket deskriptor
  • server.js: BoneScript webbserver för att tjäna upp remote procedure calls
  • dts: Devicetree mallar
  • etc: konfigurationsfiler som ska placeras i target distro
  • src: Bibliotek källkod
  • systemd: konfigurationsfiler för systemd att starta tjänster
  • test: att vara automatiserad testkod

Mall

för en BoneScript-applikation måste du för närvarande manuellt ’Kräv’ thebonescript bibliotek. Funktioner refereras sedan genom objectprovided tillbaka från kräver.

jag började försöka tillhandahålla Arduino-liknande setup / loop-funktioner, men theidea är verkligen inte en bra match för JavaScript. Att använda JavaScript nativeflow fungerar bäst, men de välbekanta funktionerna är tillräckliga för att ge dig en boost i din fysiska datorproduktivitet.

Här är ett exempel:

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’ och ’P8_13’ är pin-namn på tavlan och ovanstående exempelskulle kopiera ingångsvärdet vid P8_12 till utgången P8_13 var 100: E ms.

API

När en återuppringning tillhandahålls kommer funktionerna att fungera som asynkront.Utan en återuppringning tillhandahålls synkroniseras och slutförs funktionernainnan du återvänder.

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(, ) -> tillstånd
  • rcLED(led,)- > värde
  • RCON(händelse,)
  • rcMotor(motor, värde,)
  • rcservo(alternativ, värde )
  • rcbmp (,)- > värde
  • rcimu (,)- > värde
  • rcencoder(kodare,,)- > värde

bitar/byte, matematik, trigonometri och slumptal

  • lowbyte(värde)
  • highbyte(värde)
  • bitread(värde, bitnum)
  • bitWrite(värde, bitnum, bitdata)
  • bitSet(värde, bitnum)
  • bitClear(värde, bitnum)
  • bit(bitnum)
  • min(x, y)
  • max(x, y)
  • abs(x)
  • begränsa(x, a, b)
  • karta(värde, fromLow, fromhigh, tolow, tohigh)
  • Pow(x, y)
  • sqrt(x)
  • sin(radianer)
  • cos(radianer)
  • tan(radianer)
  • randomseed(x)
  • random(, Max)

anmärkning om prestanda

denna kod är helt ooptimerad. Listan över möjliga optimeringar som löper genom mitt huvud är svindlande. Den goda nyheten är att jag tror att det kan alla bedone utan att påverka API, främst tack vare introspectioncapabilities av JavaScript.

så småningom planeras detta för att möjliggöra realtidsanvändning, direkt frånjavascript. Planen är att attact förmågan att använda denna programmeringsmiljö i realtid på flera fronter:

  • aktivera flera slingor och analysera dem för att avgöra om de kan laddas ur till en PRU. Detta kommer att vara den primära mekanismen för att tillhandahålla realtidservicing av IOs.
  • tillhandahålla högre ordertjänster som använder standard kringutrustning förderas avsedda användning:
    • seriella drivrutiner för I2C, SPI, UARTs, etc.
    • analogWrite för PWMs med hårdvara PWMs, timers, kernel GPIO drivrutiner, etc.
  • lägga till realtids patchar till kärnan

JavaScript-språket ger några funktioner som jag tycker är riktigt coolfor gör inbäddad programmering och nod.js gör några saker för att hjälpa enablethat. Den primära är att I / O-funktionerna är alla asynkrona. Förbeddade system, Detta är särskilt användbart för att utföra uppgifter med låg latens som svarar på händelser i systemet. Det som gör JavaScript så mycket lättare än andra språk för att göra detta är att det håller hela sammanhanget runthanteraren, så du behöver inte oroa dig för det.

0.7.4 viktiga uppdateringar

  • aktiverade BeagleBone AI GPIO funktioner (digitalRead/digitalWrite/getPinMode)

0.7.3 viktiga uppdateringar

Big speed-up på lastning av lazy-loading sällan använda moduler

0.7.2 viktiga uppdateringar

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

0.7.1 viktiga uppdateringar

mycket liten uppdatering på en funktion omfattning

0.7.0 nyckeluppdateringar

de flesta av dessa korrigeringar kom från ett Google Summer of Code 2018-projekt

  • korrigeringar i PWM-utgång under analogWrite-uppdateringar
  • tillagda funktionsanrop för stöd för Robotstyrbibliotek på BeagleBone Blue eller Robotics Cape
  • Tillagt stöd för node-style callbacks med fel och data separerade (tillval)

planer

  • SPI-stöd
  • pru stöd
  • hantering array av stift i pinMode och Getpinmode
  • spara bort skapade dtbo och skriva konfiguration till Cape eeprom

Lämna ett svar

Din e-postadress kommer inte publiceras.