BoneScript é um nó.js library for physical computing on embedded Linux, starting with support for BeagleBone.
a informação sobre a língua está disponível em https://nodejs.org.
Para verificar a versão e ver se BoneScript está em seu caminho, tente executar:
node -pe "require('bonescript').getPlatform().bonescript"
documentação Adicional disponível em: https://beagleboard.org/bonescript.
O conceito é usar funções parecidas com Arduino escritas em JavaScript para simplificar a aprendizagem de como fazer tarefas de computação física sob Linux embedded e ainda fornecer suporte para a criação rápida de GUIs para suas aplicações incorporadas através do uso de páginas web HTML5/JavaScript.
instalação global
BoneScript vem instalado no seu BeagleBone. Para actualizar para a última revisão, use o ‘ npm ‘num recente BeagleBoard.org Debian image from https://beagleboard.org/latest-imagesand perform:
TERM=none sudo npm cache clearTERM=none sudo npm install -g --prefix /usr/local --unsafe-perm bonescriptsudo shutdown -r now
Testing on other distributions is limited.
Existem alguns passos adicionais de instalação que podem ser realizados, mas são dactilografados por outros mecanismos na BeagleBoard.org imagens Debian. Estes setupbackground serviços (bone101 webserver com bonescript RPC e bonescript autorunservice), bem como configurar as variáveis de ambiente para estes serviços e otherglobally executar 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
aplicações de lançamento persistentemente
para ter as suas aplicações lançadas no arranque, basta largá-las na pasta/var/lib/cloud9/autorun. Tirá-los dessa pasta vai acabar com os processos. Espera-se que só caia em apps já livres de erros nesta pasta, uma vez que não há uma boa maneira de realizar a depuração neles.
nota sobre o estado de código
ainda há um monte de desenvolvimento acontecendo, por isso certifique-se de verificar de volta em uma base frequente. Muitos dos periféricos fancier ainda não são supportedex excepto através da realização do ficheiro I/O.
disposição de directório
- índice.js: Main BoneScript source code
- autorun.js: Node.Aplicação JS para executar aplicações largadas na pasta autorun
- pacote.MPN.Js package descriptor
- server.js: BoneScript servidor web para servir de chamadas de procedimento remoto
- dts: Devicetree modelos
- , etc: arquivos de Configuração para ser colocado no destino distro
- src: Biblioteca de código fonte
- systemd: arquivos de Configuração para o systemd para iniciar serviços
- teste: Para-ser-teste automatizado de código
Modelo
Para uma BoneScript aplicativo, você deve atualmente manualmente “exigir” thebonescript biblioteca. As funções são então referenciadas através do objeto fornecido de volta de require.
comecei a tentar fornecer funções de configuração/loop Tipo Arduino, mas o theidea realmente não é uma boa combinação para o JavaScript. Usar o nativeflow do JavaScript funciona melhor, mas as funções familiares são suficientes para lhe dar um impulso na sua produtividade de computação física.
Aqui está um exemplo:
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); }}
O ‘P8_12’ e ‘P8_13’ são pin nomes no quadro e acima examplewould copiar o valor de entrada no P8_12 para a saída P8_13 a cada 100 ms.
API
Quando uma chamada de retorno é fornecido, as funções irão se comportar de forma assíncrona.Sem um callback fornecido, as funções irão sincronizar e completar antes de retornar.
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 Robótica Cabo
- rcInitialize()
- rcState(, ) -> estado
- rcLED(diodo emissor de luz, , ) -> valor
- rcOn(evento )
- rcMotor(motor, valor )
- rcServo(opcional, valor )
- rcBMP(, ) -> valor
- rcIMU(, ) -> valor
- rcEncoder(codificador, , ) -> valor
Bits/Bytes, Matemática, Trigonometria e Números Aleatórios
- lowByte(valor)
- highByte(valor)
- bitRead(valor, bitnum)
- bitWrite(valor, bitnum, bitdata)
- bitSet(valor, bitnum)
- bitClear(valor, bitnum)
- bit(bitnum)
- min(x, y)
- max(x, y)
- abs(x)
- restringir(x, a, b)
- (mapa de valor, fromLow, fromHigh, toLow, toHigh)
- pow(x, y)
- sqrt(x)
- sin(radianos)
- cos(radianos)
- tan(radianos)
- randomSeed(x)
- aleatório(, max.)
Nota sobre o desempenho
Este código é totalmente unoptimized. A lista de possíveis optimizações que passam pela minha cabeça é impressionante. A boa notícia é que eu acho que tudo pode bedone sem impactar a API, principalmente graças à introspectioncapabilities de JavaScript.
eventualmente, isto está planeado para permitir a utilização em tempo real, directamente do JavaScript. O plano é atestar a capacidade de usar este ambiente de programação em tempo real em várias frentes:
- permitindo vários loops e analisando – os para determinar se eles podem ser off-loaded para um PRU. Este será o principal mecanismo de prestação de Serviços em tempo real dos oi.
- fornecendo serviços de ordem superior que utilizam os periféricos padrão para o seu uso pretendido:
- serial drivers para I2C, SPI, UARTs, etc.
- analogWrite for PWMs using hardware pwms, timers, kernel GPIO drivers, etc.
- adicionando patches em tempo real ao kernel
a linguagem JavaScript fornece algumas funcionalidades que eu acho que são realmente fixes para fazer programação incorporada e nó.o js faz algumas coisas para ajudar a tornar isso possível. O principal é que as funções I / O são todas assíncronas. Sistemas com chave dianteira, isto é especialmente útil para executar tarefas de baixa latência que respondem a eventos no sistema. O que torna o JavaScript muito mais fácil do que outros idiomas para fazer isso é que ele mantém o contexto completo em torno do handler, para que você não tenha que se preocupar com isso.
0.7.4-chave actualizações
- Habilitado BeagleBone AI GPIO funções (digitalRead/digitalWrite/getPinMode)
0.7.3 atualizações de chave
Grande velocidade no carregamento carregamento lento raramente utilizados módulos
0.7.2 as principais atualizações
- https://github.com/beagleboard/bonescript/issues/52
- https://github.com/beagleboard/bonescript/issues/53
0.7.1 atualizações de chave
Muito pequena atualização em um escopo de função
0.7.0 atualizações de chave
a Maioria dessas correções veio do Google Summer of Code 2018 projeto
- Correções na saída PWM durante analogWrite actualizações
- Adicionado chamadas de função para Controle do Robô biblioteca de suporte em BeagleBone Azul ou Robótica Cabo
- Adicionado suporte para o nó-estilo de retornos de chamada com o erro e de dados separadas (opcional)
Planos
- SPI suporte
- PRU suporte
- Manipulação de matriz de pinos em pinMode e getPinMode
- Economia de fora criada dtbo e escrita de configuração para o cabo da EEPROM