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