気の向くままに辿るIT/ICT
webzoit.netウェブサイトホームページ
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に接続し直すとリセットされるため消えるが)。

EasyWordMall Arduino UNO R3互換ボード(USBケーブル付属)

EasyWordMall Arduino Pro Mini互換ボード Atmega328 5V 16MHz

Rasbeeオリジナル FT232RL互換 3.3V/5V FTDI/USB/TTL変換アダプタ

KKHMF Arduino Nano Ver 3.0互換ボード ATmega328P CH340G 5V 16MHz

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かな...。