BoneScriptはノードです。beagleboneのサポートから始まる、組み込みLinux上の物理コンピューティング用のjsライブラリ。
言語に関する情報はhttps://nodejs.orgで入手できます。バージョンを確認し、BoneScriptがパスにあるかどうかを確認するには、次を実行してください。
node -pe "require('bonescript').getPlatform().bonescript"
追加のドキュメントはhttps://beagleboard.org/bonescript。
コンセプトは、JavaScriptで書かれたArduinoのような関数を使用して、embedded Linuxandの下で物理計算タスクを行う方法を簡単に学習し、HTML5/JavaScript webページを使用してembeddedapplicationsのGuiを迅速に作成するためのサポートを提供することです。
グローバルインストール
BoneScriptがBeagleBoneにインストールされます。 最新のリビジョンに更新するには、最近のリビジョンで’npm’を使用しますBeagleBoard.org https://beagleboard.org/latest-imagesandからのDebianイメージperform:
TERM=none sudo npm cache clearTERM=none sudo npm install -g --prefix /usr/local --unsafe-perm bonescriptsudo shutdown -r now
他のディストリビューションでのテストは限られています。
実行できる追加のインストール手順がいくつかありますが、通常は他のメカニズムによってインストールされます。BeagleBoard.org Debianイメージ。 これらのsetupbackgroundサービス(bonescript RPCとbonescript autorunserviceを備えたbone101webサーバー)だけでなく、これらのサービスの環境変数を設定し、他のスクリプトをグローバルに実行します。p>
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
永続的にアプリケーションを起動する
起動時にアプリケーションを起動するには、単に/var/lib/cloud9/autorunフォルダにドロップします。 それらをそのフォルダから移動すると、プロセスが強制終了されます。 デバッグを実行する良い方法がないので、すでにバグのないアプリをこのフォルダにドロップするだけでよいことが期待されています。
コード状態に関する注意
まだ多くの開発が行われているので、頻繁に確認してください。
ディレクトリレイアウト
- インデックスを実行することによって、より精巧な周辺機器の多くはまだサポートされていません。js:メインBoneScriptのソースコード
- 自動実行。js:ノード。自動実行フォルダ
- パッケージにドロップされたアプリを実行するJSアプリ。———–JSパッケージ記述子
- サーバー。js: リモートプロシージャコールを提供するためのBoneScript webサーバー
- dts:Devicetreeテンプレート
- etc:ターゲットディストリビューションに配置する設定ファイル
- src:ライブラリソースコード
- systemd:systemdがサービスを開始するための設定ファイル
- test:to-be-automated test code
Template
BoneScriptアプリケーションの場合、現在手動で’require’を実行する必要があります。thebonescriptライブラリ。 関数は、requireから返されたobjectprovidedを介して参照されます。私はArduinoのようなsetup/loop関数を提供しようとし始めましたが、theideaは実際にはJavaScriptには適していません。 JavaScriptのnativeflowを使用するのが最善ですが、使い慣れた関数で物理コンピューティングの生産性を向上させるのに十分です。
例は次のとおりです。
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’と’P8_13’はボード上のピン名であり、上記の例では、P8_12の入力値を100ミリ秒ごとに出力P8_13にコピーします。
API
コールバックが提供されると、関数は非同期に動作します。コールバックが提供されていない場合、関数は同期してcompletebefore戻ります。
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.li>
値値値値値値値値値値値値値値値
ビット/バイト、数学、三角法および乱数
- lowbyte(value)
- highbyte(value)
- bitread(value,bitnum)
- bitwrite(value,bitnum,bitdata)
- bitSet(value,bitnum)
- bitClear(value,bitnum)
- bit(bitnum)
- min(x,y)
- max(x,y)
- abs(x)
- constrain(x,a,b)
- map(value,bitnum)
- map(value,bitnum)
- map(value,bitnum)
- map(value,bitnum)
- map(value,bitnum)
- map(value,bitnum)
- map(value,bitnum)
- map(value,bitnum)
- map(value,bitnum)/li>
- pow(x,y)
- sqrt(x)
- sin(ラジアン)
- cos(ラジアン)
- tan(ラジアン)
- randomseed(x)
- random(,max)
パフォーマンス上の注意
このコードは完全に最適化されていない。 私の頭を通して実行される可能性のある最適化のリストは驚異的です。 良いニュースは、主にJavaScriptのintrospectioncapabilitiesのおかげで、APIに影響を与えずにすべてを処理できると思うことです。
最終的には、これはjavascriptから直接リアルタイムの使用を可能にする予定です。 計画は、複数のループを有効にし、それらを分析してPRUにオフロードできるかどうかを判断することです。
- 複数のループを有効にし、それらを分析して、PRUにオフロードできるかどうかを判断することです。
- 複数のループを有効にして、それらを分析して、PRUにオフロードできるかどうかを判断することです。 これは、IOsのリアルタイムサービスを提供するための主要なメカニズムになります。
- i2C、SPI、UARTsなどのシリアルドライバ。
- I2C、SPI、UARTsなどのシリアルドライバ。
- i2C、SPI、UARTsなどのシリアルドライバ。
- i2C、SPI、UARTSなどのシリアルドライバ。
- ハードウェアPwm、タイマ、カーネルGPIOドライバなどを使用したPwm用のanalogWrite。
- カーネルにリアルタイムパッチを追加する
JavaScript言語は、組み込みプログラミングとノードを行うために本当にクールだと思ういくつかの機能jsは、それを有効にするためにいくつかのことを行います。 主なものは、I/O関数がすべて非同期であることです。 組み込みシステムの場合、これはシステム内のイベントに応答する低レイテンシtasksthatを実行するために特に便利です。 これを行うためのJavaScriptを他の言語よりもはるかに簡単にするのは、ハンドラの周りに完全なコンテキストを保持するため、心配する必要がないとい
0.7.4キー更新
- 有効BeagleBone AI GPIO関数(digitalRead/digitalWrite/getPinMode)
0.7.3キー更新
あまり使用されないモジュールを遅延ロードすることにより、ロードの大幅な高速化
0.7。2つのキーの更新
- https://github.com/beagleboard/bonescript/issues/52
- https://github.com/beagleboard/bonescript/issues/53
0.7.1キーの更新
関数スコープの非常にマイナーな更新
0.7。0キーの更新
これらの修正のほとんどは、Google Summer of Code2018プロジェクトからのものです
- ANALOGWRITEの更新中のPWM出力の修正
- BeagleBone BlueまたはRobotics Capeのロボットコントロールライブラリサポートの関数呼び出しが追加されました
- エラーとデータが分離されたノードスタイルのコールバックのサポートが追加されました(オプション)
プラン
- SPIサポート
- pruサポート
- pinmodeおよびGetpinmodeのピン配列の処理
- 作成されたdtboを保存し、cape EEPROMに設定を書き込む