bonescript

Alăturați-vă chat-ul laconstrui stareacoperire stare

BoneScript este un nod.biblioteca js pentru calculul fizic pe Linux încorporat, începând cu suport pentru BeagleBone.

informații despre limbă sunt disponibile lahttps://nodejs.org.

pentru a verifica versiunea și pentru a vedea dacă BoneScript este în calea dvs., încercați să rulați:

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

documentație suplimentară este disponibilă la https://beagleboard.org/bonescript.

conceptul este de a utiliza funcții Arduino-like scrise în JavaScript pentru a simplifica învățarea modului de a face sarcini fizice de calcul în linuxul încorporat și pentru a oferi în continuare suport pentru crearea rapidă a GUI-urilor pentru aplicațiile dvs. încorporate prin utilizarea paginilor web HTML5 / JavaScript.

instalare globală

BoneScript vine instalat pe BeagleBone dumneavoastră. Pentru a actualiza la cea mai recentă revizuire, utilizați ‘npm’ pe un recent BeagleBoard.org imagine Debian de lahttps://beagleboard.org/latest-imagesand efectuați:

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

testarea pe alte distribuții este limitată.

există câțiva pași suplimentari de instalare care pot fi efectuați, dar sunt tipic instalați de alte mecanisme pe BeagleBoard.org imagini Debian. Aceste servicii setupbackground (bone101 webserver cu BONESCRIPT RPC și bonescript autorunservice), precum și configurarea variabilelor de mediu pentru aceste servicii și script-uri otherglobally rula.

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

lansarea aplicațiilor persistent

pentru a avea aplicațiile lansa la pornire, pur și simplu fixați-le în folderul/var/lib/cloud9 / autorun. Mutarea lor din acel dosar va ucide procesele. Se așteaptă să renunțați doar la aplicațiile deja fără bug-uri în acest dosar, deoarece nu există o modalitate bună de a efectua depanarea acestora.

notă privind starea codului

există încă o mulțime de dezvoltare întâmplă, astfel încât să fie sigur de a verifica din nou pe baza afrecvent. Multe dintre periferice crescator nu sunt încă supportedexcept prin efectuarea fișier I/O.

layout Director

  • index.js: codul sursă principal BoneScript
  • autorun.js: nod.JS app pentru a rula aplicații a scăzut în folderul autorun
  • pachet.NPM.JS descriptor pachet
  • server.js: Server web BoneScript pentru a servi apeluri de procedură la distanță
  • dts: șabloane Devicetree
  • etc: fișiere de configurare pentru a fi plasate în distribuția țintă
  • src: cod sursă bibliotecă
  • systemd: fișiere de configurare pentru systemd pentru a porni servicii
  • test: to-be-automated test cod

șablon

pentru o aplicație biblioteca BoneScript. Funcțiile sunt apoi referite prin obiectcu condiția înapoi de la require.

am început să încerc să ofer funcții de configurare / buclă asemănătoare Arduino, dar theidea nu este într-adevăr o potrivire bună pentru JavaScript. Utilizarea JavaScript nativeflow funcționează cel mai bine, dar funcțiile familiare sunt suficiente pentru a vă oferi un boostin productivitatea fizică de calcul.

Iată un exemplu:

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 ‘ și’ P8_13 ‘ sunt nume pin pe bord și exemplul de mai susar copia valoarea de intrare la p8_12 la ieșirea P8_13 la fiecare 100 ms.

API

când este furnizat un apel invers, funcțiile se vor comporta asincron.Fără un apel invers furnizat, funcțiile se vor sincroniza și se vor finalizaînainte de a reveni.

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 robotică Cape

  • rcInitialize()
  • rcState(, ) -> stat
  • rcLED(led, , ) -> valoare
  • rcOn(eveniment, )
  • rcMotor(motor, valoare, )
  • rcservo(opțiune, valoare )
  • rcbmp(, ) -> valoare
  • rcimu(, ) -> valoare
  • rcencoder(encoder, , ) -> valoare

biți/octeți, matematică, trigonometrie și numere aleatoare

  • lowbyte(valoare)
  • highbyte(valoare)
  • bitread(valoare, bitnum)
  • bitWrite(valoare, bitnum, bitdata)
  • bitSet(valoare, bitnum)
  • bitClear(valoare, bitnum)
  • bit(bitnum)
  • min(X, y)
  • max(X, y)
  • abs(x)
  • constrânge(x, A, B)
  • , fromhigh, tolow, tohigh)

  • pow(x, y)
  • sqrt(x)
  • păcat(radiani)
  • cos(radiani)
  • tan(radiani)
  • randomseed(x)
  • aleatoare (, max)

notă privind performanța

acest cod este total neoptimizat. Lista posibilelor optimizări care ruleazăprin capul meu este uimitor. Vestea bună este că eu cred că poate bedone toate fără a afecta API, în primul rând datorită introspectioncapabilities de JavaScript.

în cele din urmă, acest lucru este planificat pentru a permite utilizarea în timp real, direct de la javascript. Planul este de a atașa capacitatea de a utiliza acest mediu de programare în timp real pe mai multe fronturi:

  • permițând mai multe bucle și analizându-le pentru a determina dacă pot fi descărcate într-un PRU. Acesta va fi mecanismul principal pentru furnizarea în timp realservicierea IOs.
  • furnizarea de servicii de ordin superior care utilizează perifericele standard pentru utilizarea prevăzută:
    • drivere seriale pentru I2C, SPI, UARTs etc.
    • analogWrite pentru PWMs folosind pwms hardware, cronometre, drivere GPIO kernel, etc.
  • adăugarea de patch-uri în timp real la kernel

limbajul JavaScript oferă câteva caracteristici care cred că sunt foarte coolfor a face programare încorporat și nod.js face unele lucruri pentru a ajuta enablethat. Principala este că funcțiile I / O sunt toate asincrone. Acest lucru este util în special pentru efectuarea sarcinilor cu latență scăzută care răspund la evenimentele din sistem. Ceea ce face JavaScript mult mai ușor decât alte limbi pentru a face acest lucru este că păstrează contextul complet în jurul gestionarului, deci nu trebuie să vă faceți griji.

0.7.4 actualizări cheie

  • activat BeagleBone ai GPIO funcții (digitalRead/digitalWrite/getPinMode)

0.7.3 actualizări cheie

mare viteză-up la încărcare de leneș-încărcare module utilizate rar

0.7.2 actualizări cheie

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

0.7.1 actualizări cheie

actualizare foarte minoră pe un domeniu de aplicare funcție

0.7.0 actualizări cheie

majoritatea acestor corecții provin dintr-un proiect Google Summer of Code 2018

  • corecții în ieșirea PWM în timpul actualizărilor analogWrite
  • funcția adăugată solicită suport pentru biblioteca de Control Robot pe Beaglebone Blue sau ROBOTICĂ Cape
  • Adăugat suport pentru callback-uri în stil nod cu erori și date separate (opțional)

planuri

  • li> suport pru
  • manipularea matrice de pini în pinMode și Getpinmode
  • salvarea off creat dtbo și scris de configurare pentru Cape eeprom

Lasă un răspuns

Adresa ta de email nu va fi publicată.