bonescript

Unirse al chat enEstado de compilaciónEstado de cobertura

BoneScript es un nodo.biblioteca js para computación física en Linux embebido, comenzando con soporte para BeagleBone.

la Información sobre el idioma está disponible en https://nodejs.org.

comprobar la versión y a ver si BoneScript en su camino, trate de funcionamiento:

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

documentación Adicional está disponible en https://beagleboard.org/bonescript.

El concepto es usar funciones similares a Arduino escritas en JavaScript para simplificar el aprendizaje de cómo realizar tareas de computación física bajo Linux incrustado y proporcionar soporte para crear rápidamente interfaces gráficas de usuario (GUI) para sus aplicaciones incrustadas a través del uso de páginas web HTML5/JavaScript.

Instalación global

BoneScript viene instalado en su BeagleBone. Para actualizar a la última revisión, utilice ‘ npm ‘en una versión reciente BeagleBoard.org Imagen de Debian de https://beagleboard.org/latest-imagesand realizar:

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

Las pruebas en otras distribuciones son limitadas.

Hay algunos pasos de instalación adicionales que se pueden realizar, pero que normalmente se instalan mediante otros mecanismos en el BeagleBoard.org Imágenes de Debian. Estos servicios setupbackground (servidor web bone101 con RPC de bonescript y servicio automático de bonescript), así como configurar variables de entorno para estos servicios y otros scripts de ejecución móvil.

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

Iniciar aplicaciones de forma persistente

Para que sus aplicaciones se inicien al iniciar, simplemente colóquelas en la carpeta/var/lib/cloud9 / autorun. Sacarlos de esa carpeta matará los procesos. Se espera que solo ingrese aplicaciones que ya están libres de errores en esta carpeta, ya que no hay una buena manera de realizar la depuración en ellas.

Nota sobre el estado del código

Todavía hay mucho desarrollo en curso, así que asegúrese de volver a comprobarlo con frecuencia. Muchos de los periféricos más sofisticados aún no son compatibles, excepto a través de la realización de E/S de archivos.

Diseño de directorio

  • index.js: Código fuente principal de BoneScript
  • autorun.js: Nodo.Aplicación JS para ejecutar aplicaciones caídas en la carpeta de ejecución automática paquete
  • .json: NPM.Descriptor de paquete JS
  • servidor.js: Servidor web BoneScript para servir llamadas a procedimientos remotos
  • dts: Plantillas de árbol de dispositivos
  • etc: Archivos de configuración que se colocarán en la distribución de destino
  • src: Código fuente de la biblioteca
  • systemd: Archivos de configuración para que systemd inicie servicios
  • test: Código de prueba que se automatizará

Template

Para una aplicación BoneScript, la biblioteca de guiones. A continuación, se hace referencia a las funciones a través del objeto proporcionado desde require.

Comencé tratando de proporcionar funciones de configuración / bucle similares a Arduino, pero theidea realmente no es una buena combinación para JavaScript. El uso de nativeflow de JavaScript funciona mejor, pero las funciones familiares son suficientes para aumentar la productividad de su computación física.

Aquí hay un ejemplo:

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); }}

Los ‘P8_12’ y ‘P8_13’ son nombres de pin en la placa y el ejemplo anterior copiaría el valor de entrada en P8_12 a la salida P8_13 cada 100 ms.

API

Cuando se proporciona una devolución de llamada, las funciones se comportarán asincrónicamente.Sin una devolución de llamada proporcionada, las funciones se sincronizarán y completarán antes de regresar.

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(led ) -> valor
  • rcOn(evento )
  • rcMotor(motor, valor )
  • rcServo(opción, valor )
  • rcBMP(, ) -> valor
  • rcIMU(, ) -> valor
  • rcEncoder(encoder , ) -> valor

Bits/Bytes, Matemáticas, Trigonometría y Números al Azar

  • 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)
  • map(valor, fromLow, fromHigh, toLow, y alta)
  • pow(x, y)
  • sqrt(x)
  • el pecado(radianes)
  • cos(radianes)
  • tan(radianes)
  • randomSeed(x)
  • random (max)

Nota en el rendimiento

Este código es totalmente unoptimized. La lista de posibles optimizaciones que recorren mi cabeza es asombrosa. La buena noticia es que creo que todo se puede hacer sin afectar la API, principalmente gracias a las capacidades de introspección de JavaScript.

Eventualmente, esto está planeado para habilitar el uso en tiempo real, directamente desde JavaScript. El plan es aprovechar la capacidad de usar este entorno de programación en tiempo real en varios frentes:

  • Habilitar múltiples bucles y analizarlos para determinar si se pueden descargar a una PRU. Este será el mecanismo principal para proporcionar servicios en tiempo real de iOS.
  • Proporcionar servicios de orden superior que utilizan los periféricos estándar para su uso previsto: Controladores serie
    • para I2C, SPI,UARTs, etc.
    • Escritura analógica para PWM utilizando PWM de hardware, temporizadores, controladores GPIO del núcleo, etc.
  • Agregar parches en tiempo real al núcleo

El lenguaje JavaScript proporciona algunas características que creo que son realmente geniales para hacer programación incrustada y nodo.js hace algunas cosas para ayudar a habilitarlo. La principal es que las funciones de E/S son todas asíncronas. Para sistemas embebidos, esto es especialmente útil para realizar tareas de baja latencia que responden a eventos en el sistema. Lo que hace que JavaScript sea mucho más fácil que otros lenguajes para hacer esto es que mantiene el contexto completo alrededor del controlador, para que no tenga que preocuparse por ello.

0.7.4 actualizaciones de teclas

  • Funciones BeagleBone AI GPIO habilitadas (digitalRead/digitalWrite/getPinMode)

0.7.3 actualizaciones de teclas

Gran velocidad de carga mediante la carga lenta de módulos utilizados con poca frecuencia

0.7.2 actualizaciones de clave

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

0.7.1 actualizaciones de clave

Muy pequeña actualización en el ámbito de la función

0.7.0 actualizaciones de teclas

La mayoría de estas correcciones provienen de un proyecto de Google Summer of Code 2018

  • Correcciones en la salida PWM durante las actualizaciones de escritura analógica
  • Llamadas a funciones agregadas para soporte de biblioteca de control de robots en BeagleBone Blue o Robotics Cape
  • Soporte agregado para devoluciones de llamada de estilo nodo con errores y datos separados (opcional)

Planes

  • Soporte SPI
  • Soporte de PRU
  • Manejo de matriz de pines en modo pin y modo getPinMode
  • Guardar el dtbo creado y escribir la configuración en cape EEPROM

Deja una respuesta

Tu dirección de correo electrónico no será publicada.