気の向くままに辿るIT/ICT/IoT
IoT・電子工作

JavaScriptとArduinoでLチカ

ホーム前へ次へ
Arduinoって?

JavaScriptとArduinoでLチカ

JavaScriptとArduinoでLチカ

2018/02/26

 JavaScriptとArduinoでLチカを実行してみるページ。

 Arduino IDEは、C/C++ベースですが、このIDEには、ArduinoとPCやRaspberry Piなどとの間をシリアル通信で接続して操作できるFirmataプロトコルを使ったサンプルスケッチ群があり、例えば、これをArduinoボードに書き込んでおけば、Processingだけでなく、PythonRubyPerl、JavaScript...などのスクリプトやC/C#などのプログラミング言語からでもArduinoを操作・制御することができるようになる模様。

 ここでは、この中からJavaScriptを使ってArduino界のHello World!であるLチカ(blink)を実行するまでの手順を書きます。

 Arduinoの操作にJavaScriptを使うための方法は、他にもあるのかもしれませんが、ここでは、Robotics & IoT Platformと銘打つJohnny-Fiveと、これをインストールするにあたって必要となるnpmコマンドをパッケージマネージャとする非同期型イベント駆動のJavaScript環境であり、サーバサイドスクリプト実装であるNode.jsを使うものとします。

ArduinoボードにStandardFirmataをアップロード

 もちろん、後でもよいですが、今回は、まず、ArduinoボードにArduino IDEのサンプルスケッチStandardFirmataをアップロードしておくものとします。

 サンプルスケッチStandardFirmataは、Arduino IDEの[ファイル/File] => [スケッチ例/Examples] => [Firmata]にあります。

Node.jsのインストール

 公式サイト上にある各OSにおけるパッケージマネージャを利用した Node.js のインストールを参考にNode.jsをインストールします。

 各OSのリポジトリなどにある可能性もありますが、複数のパッケージが必要だったり、パッケージが古かったり、情報が古くて正解が見えづらかったりと何かと手間がかかることがあるため、リンク先を参照するのが最も手軽で簡単、確実、賢明と思われます。

 ちなみに自身は、Debian(Linux)を使っています。

Johnny-Fiveのインストール

$ npm install johnny-five

 Node.jsをインストールするとnodeコマンドやnpmコマンドもインストールされ、どこからでもユーザー権限で実行できるようになっているはずなので端末(ターミナル)からnpmコマンドを使ってJohnny-Fiveをインストールします。

スクリプトを書く

// example.js
'use strict';
const five = require('johnny-five');
 
const board = new five.Board();
board.on('ready', () => {
 const led = new five.Led(13);
 led.blink(500);
});

 ライブラリの準備が整ったところでLチカ用のスクリプトを書きます。

 ここでは、ファイル名を仮にexample.jsとしました。

スクリプトの実行と終了

$ node example.js
1519700795999 Available /dev/ttyUSB0
1519700796010 Connected /dev/ttyUSB0
1519700799850 Repl Initialized
>> .exit
1519700809406 Board Closing.
$

 実行前までにStandardFirmataをアップロードしたArduinoボードをPCに接続しておきます。

 nodeコマンドの引数としてスクリプトのあるディレクトリ・フォルダに移動していれば、ファイル名を、そうでない場合には、パス付きのファイル名を指定し、スクリプトを実行します。

 検証には、Uno互換機を使用したが、少なくともNano、Pro MiniなどUno系なら、この時点でArduinoボード上のLEDが点滅(Lチカ)しているはず。

 プロンプト[>>]が表示されたところで[.exit]+[Enter]とすると終了することができる(exitに前置のドットは必要、[Ctrl+C]でも良いみたいだが2度手間になる)。

 尚、出力されている何らかの数値は都度異なるでしょうし、シリアルポートは、使用しているOSやArduinoボードが搭載するUSBドライバ、シリアルポートを使うUSB接続数やUSB挿抜の状況などによります。

 ちなみに終了させるタイミングによるのか、たまたまなのか、何度か終了させてみたところ、毎度、信号がHIGHの状態で終わるようで以後、LEDが点灯したままとなりました...(ArduinoボードをPCに接続し直すとリセットされるため消えますが)。

IoTへの架け橋

 Arduinoボード周辺には、その後、イーサネットシールドやWifiシールド、XBeeなどのWifiモジュール、ESP8266のようにWifiモジュールとしてもプチArduinoとしても使えるデバイスなどの登場により、電子工作に加えてIoT(Internet of Things/モノ・事のインターネット)への扉が開きました。

 これらを使うからには、少なからず、POST/GETメソッドを含むHTTP(/HTTPS/FTP/FTPS...)といったプロトコルの他、HTML(HTML4/HTML5)/CSS(CSS1/CSS2/CSS2.1/CSS3)を避けて通ることはできず、スケッチにも、これらの書式での記述を求められることになります。

 これらに加え、割と身近なWeb技術にJavaScriptがありますが、これは、当初、クライアント(ブラウザ)側のスクリプトでしたが、HTML5/CSS3、スマホ普及の過渡期にNode.jsをはじめとするサーバーサイドスクリプトとしてのJavaScriptが生まれました。

 たとえ、誕生当時のJavaScriptの知識であっても、Perl/Python/Rubyなどを使えるサーバ管理ではなく、Web系の人々であれば、少なからず、HTTPやHTML/CSSの知識を前提として持っているのが普通であり、Arduinoを始める、使うにあたって抵抗なく、自然に取り組むことができるでしょう。

 また、C/C++はピンと来ないけど、JavaScriptなら、Perl/Python/Rubyなら、という人々にとっても、Arduinoへの敷居がグッと下がるでしょう。

 一方、Web系ではないArduino愛好家にとっては、IoTに取り組むなら、HTTPやHTML5/CSS3を知っていれば、タグを書くなど何をするにも作業を早く進めることができるし、これに加え、JavaScriptを使えれば、更には、Perl/Python/Rubyなどを使えれば、Webアプリを素早く書けるようになるなど、圧倒的にできることの幅が広がるものと思われるため、ArduinoをIoTに使いたい人々にとっては、多少敷居が高いと思っても学ぶ価値は十分にあるでしょう。

 なぜなら、HTML5/CSS3は、PC+ブラウザだけでなく、PC用ブラウザOSや既に各種センサを搭載済みのiPhone/iPad/Androidなどスマホ・タブレットでも主要な技術として使われており、これらをIoTデバイスの1つとして使うこともできるから。

備考

 ちなみに当サイトは、ソフトウェア系の入口的内容を発信すべく、その入口にHTML/CSSを据え、続いてJavaScript、そしてPerl/Python/Rubyなどのスクリプト、(VBA/VB、)C/C++/Java...などのプログラミング言語...と進めるのが無理がないのではないかというコンセプトで発信を始めました。(あくまで入口案内に過ぎず、どれをとっても精通しているわけではありません。)

 そんな自身もHTML5/CSS3の流れに乗ったJavaScriptの発展(jQueryなどのライブラリ化やNode.jsのようなサーバサイドスクリプト化)の過程を横目には見つつも追従していなかったこともあり、Webサーバとしてのラズパイ運用約2年、Arduino歴約1年、既にイーサネットシールドもESP8266もnRF24L01なども試用済みですが、そんな今になって初めて、なんとなくArduino+JavaScriptにも取り組んでみようかなという気になった次第。

 ただ、そもそもJavaScriptは単体で見るとブラウザ間による独自路線を含めた実装状況の違いがあって外部に公開する場合、それを追う面倒さから距離を置いた過去があり、Arduinoを個人で使う分には、良いですが、結果(に至った経緯)について公開しようと思うとブラウザを意識する必要が出てきそうなので今後もこれを使うかどうかは微妙...。

 スクリプトの中では、Perlが身近ですが、PythonやRubyの方が、シンプルに書くことができそうに見える...から、PythonかRuby覚えようかな...RailsとかピンとこないからPythonかな...。

ホーム前へ次へ