bonescript

Deltag i chatten påByg StatusDækningsstatus

BoneScript er en node.js-bibliotek til fysisk databehandling på indlejrede linjer,startende med understøttelse af BeagleBone.

oplysninger om sproget findes påhttps://nodejs.org.

for at kontrollere versionen og for at se, om BoneScript er i din vej, prøv at køre:

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

yderligere dokumentation er tilgængelig på https://beagleboard.org/bonescript.

konceptet er at bruge Arduino-lignende funktioner skrevet i JavaScript for at forenkle at lære at udføre fysiske computeropgaver under indlejret Linieog for yderligere at yde support til hurtigt at oprette GUI ‘ er til dine indlejrede applikationer ved hjælp af HTML5 / JavaScript-sider.

Global Installation

BoneScript kommer installeret på din BeagleBone. For at opdatere til den seneste revision skal du bruge ‘ npm ‘på en nylig BeagleBoard.org Debian image from https://beagleboard.org/latest-imagesand udfør:

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

test på andre distributioner er begrænset.

der er nogle yderligere installationstrin, der kan udføres, men er typiskinstalleret af andre mekanismer på BeagleBoard.org Debian-billeder. Disse setupbackground-tjenester (bone101 internetserver med bonescript RPC og bonescript autorunservice) samt konfigurere miljøvariabler for disse tjenester og andre globalt kørende 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

lancering af applikationer vedvarende

for at få dine applikationer til at starte ved opstart skal du blot slippe dem i mappen/var/lib/cloud9/autorun. At flytte dem ud af den mappe vil dræbeprocesserne. Du forventes kun at falde i allerede bug-fri apps intothis mappe, da der ikke er en god måde at udføre debug på dem.

Bemærk om kode tilstand

der er stadig meget udvikling i gang, så sørg for at tjekke tilbage på enhyppig basis. Mange af de mere avancerede perifere enheder understøttes endnu ikkebortset fra at udføre fil I/O.

Mappelayout

  • indeks.js: vigtigste BoneScript kildekode
  • autorun.JS: Node.JS app til at køre apps faldt i mappen autorun
  • pakke.NPM.JS pakke descriptor
  • server.js: DTS: Devicetree templates
  • etc: konfigurationsfiler, der skal placeres i target distro
  • src: bibliotekets kildekode
  • systemd: konfigurationsfiler til systemd for at starte tjenester
  • test: to-be-automated test code

skabelon

for en BoneScript-applikation skal du i øjeblikket manuelt’ Kræv ‘ thebonescript bibliotek. Funktioner refereres derefter gennem objectprovided tilbage fra kræve.

Jeg begyndte at forsøge at levere Arduino-lignende setup/loop-funktioner, men theidea er virkelig ikke et godt match for JavaScript. Brug af JavaScript ‘ s nativstrøm fungerer bedst, men de velkendte funktioner er nok til at give dig et boosti din fysiske computerproduktivitet.

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-navne på tavlen og ovenstående eksempelville kopiere inputværdien ved P8_12 til output P8_13 hver 100 ms.

API

når der gives en tilbagekald, vil funktionerne opføre sig som p8_12.

API

asynkront.Uden en tilbagekald, vil funktionerne synkronisere og fuldførefør du vender tilbage.

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

  • rcinitialiser()
  • rcState(, ) -> tilstand
  • rcLED(led, , ) -> værdi
  • rcOn(begivenhed, )
  • rcMotor(motor), værdi,)
  • rcservo(option, value)
  • rcbmp (,)- > value
  • rcimu (,)- > value
  • rcencoder(encoder,,)- > værdi

bits/bytes, matematik, trigonometri og tilfældige tal

  • lavbyte(værdi)
  • højbyte(værdi)
  • bitread(værdi, bitnum)
  • bitWrite(værdi, bitnum, bitdata)
  • bitSet(værdi, bitnum)
  • bitClear(værdi, bitnum)
  • bit(bitnum)
  • min(x, y)
  • max(x, y)
  • abs(x)
  • begrænse(x, a, b)
  • kort(værdi, fromLow, fromHigh, toLow, toHigh)
  • pow(x, y)
  • sqrt(x)
  • sin(radianer)
  • cos(radianer)
  • tan(radianer)
  • randomSeed(x)
  • tilfældig (antal)

Note på præstationer

Denne kode er helt unoptimized. Listen over mulige optimeringer, der løber gennem mit hoved, er svimlende. Den gode nyhed er, at jeg tror, det kan alle bedone uden at påvirke API, primært takket være introspektioncapacities af JavaScript.

til sidst er dette planlagt til at aktivere brug i realtid, direkte frajavascript. Planen er at tilpasse evnen til at bruge dette programmeringsmiljø i realtid på flere fronter:

  • aktivering af flere sløjfer og analyse af dem for at afgøre, om de kan aflæses til en PRU. Dette vil være den primære mekanisme til levering af realtidservering af IOs.
  • levering af tjenester med højere ordre, der bruger standardudstyr til deres tilsigtede anvendelse:
    • serielle drivere til I2C, SPI, UARTs osv.
    • analogskriv til PC ‘er ved hjælp af pc’ er, timere, kernel GPIO-drivere osv.
  • tilføjelse af realtidspatcher til kernen

JavaScript-sproget giver nogle funktioner, som jeg synes er virkelig coolfor at gøre indlejret programmering og node.js gør nogle ting for at hjælpe enablethat. Den primære er, at I / O-funktionerne alle er asynkrone. Foremedded systemer, dette er især nyttigt til at udføre opgaver med lav latenstidder reagerer på begivenheder i systemet. Hvad der gør JavaScript så meget lettereend andre sprog til at gøre dette er, at det holder den fulde kontekst omkring handleren, så du behøver ikke bekymre dig om det.

0.7.4 nøgleopdateringer

  • aktiverede BEAGLEBONE AI GPIO-funktioner (digitalRead/digitalskriv/getPinMode)

0.7.3 nøgleopdateringer

stor hastighed ved indlæsning ved doven indlæsning sjældent anvendte moduler

0.7.2 nøgleopdateringer

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

0.7.1 nøgleopdateringer

meget mindre opdatering på en funktionsomfang

0.7.0 nøgleopdateringer

de fleste af disse rettelser kom fra et Google Summer of Code 2018-projekt

  • rettelser i PM-output under analogskriv opdateringer
  • Tilføjet funktion kræver Robotkontrolbiblioteksstøtte på BeagleBone Blue eller Robotics Cape
  • Tilføjet support til Node-stil tilbagekald med fejl og data adskilt (valgfrit)

planer

  • SPI support
  • /li>

  • Pru support
  • håndtering af række stifter i pinMode og getpinmode
  • lagring af Oprettet dtbo og skrivekonfiguration til Cape EEPROM

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.