コンテンツにスキップ

Node.js

Node.jsとは

Node.jsはJavaScriptをブラウザの外で実行するための実行環境である。

元々JavaScriptはWebブラウザ上で動作する言語だったが、Node.jsの登場によってサーバーやデスクトップアプリケーション、組み込み機器などでも利用できるようになった。

Asterでは主にAC(操作パネル)の開発やWebサーバーの構築に利用する。


特徴

JavaScriptでサーバー開発ができる

通常のWebサイトではJavaScriptはブラウザ上で実行されるが、Node.jsを利用することでサーバー側の処理もJavaScriptで実装できる。

これにより、フロントエンドとバックエンドを同じ言語で開発できる。


非同期処理が得意

Node.jsはイベント駆動型アーキテクチャを採用している。

そのため、

  • 通信処理

  • ファイル読み込み

  • データベースアクセス

などの待ち時間が発生する処理を効率良く実行できる。

特にWebサーバーや通信ゲートウェイとして高い性能を発揮する。


軽量で高速

Node.jsは比較的メモリ消費が少なく、Raspberry Piのような小型コンピュータでも快適に動作する。

AsterのACで採用しているRaspberry Piとの相性も良い。


NPMについて

Node.jsにはNPM(Node Package Manager)が付属している。

NPMはライブラリ管理システムであり、必要な機能を簡単に追加できる。

npm install express

このコマンドを実行すると、ExpressというWebサーバーフレームワークをインストールできる。

余談だがいつもnpmで使っているのでNPMって大文字で書かれると理解するまでに時間がかかる。


よく利用されるライブラリ

Express

Webサーバーを簡単に構築できるフレームワーク。

Socket.IO

ブラウザとサーバー間でリアルタイム通信を行うためのライブラリ。

SerialPort

UARTやUSBシリアル通信を扱うライブラリ。

STM32との通信などで利用できる。

ws

軽量なWebSocketライブラリ。

リアルタイム通信を実装する際に利用される。


package.json

Node.jsプロジェクトの設定ファイル。

使用するライブラリやプロジェクト情報が記録される。

また、開発環境を他のPCへ移行する際にも利用される重要なファイルである。


Raspberry Piでの利用

Node.jsはRaspberry Pi上でも動作する。

Asterでは以下の用途で利用する予定である。

  • WebUIの配信

  • ALEOとのUART通信

  • 状態監視

  • ログ保存

  • APIサーバー

構成例

操作者
   ↓
WebUI
   ↓
Node.js
   ↓ UART
ALEO(STM32)

メリット

  • JavaScriptのみで開発可能

  • Webとの親和性が高い

  • Raspberry Piで動作する

  • ライブラリが豊富

  • 開発速度が速い


デメリット

  • リアルタイム制御には向かない

  • 高負荷な数値計算は苦手

  • ハードウェア制御はマイコンの方が適している


Asterでの役割

AsterではNode.jsをAC(操作パネル)の中核として利用する。

Node.jsはWebUIとALEOの仲介役として動作し、

  • Webページの配信

  • UART通信

  • 状態管理

  • API提供

を担当する。

一方で、

  • モータ制御

  • センサ取得

  • 安全制御

などのリアルタイム性が求められる処理はALEO(STM32)が担当する。

そのため、AsterにおけるNode.jsは「制御装置」ではなく「通信・管理サーバー」としての役割を持つ。