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

ProcessingとArduinoでLチカ

ウェブ造ホーム前へ次へ
サイト内検索
カスタム検索
Arduinoって?

ProcessingとArduinoでLチカ

ProcessingとArduinoでLチカ

2018/02/26

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

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

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

 基本的には、Arduino and Processingに書いてある通りだが、そこにあるProcessing用のFirmataライブラリは、古いであろうこともあり、このインストールをProcessing上で行なったり、Linux上で作業したらスケッチ上のシリアルポートを固定値にする必要があったりと多少異なる部分もあった。

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

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

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

Processingのインストール

 公式サイトのDownload Processingから使用中のOS用のProcessingをインストールする。

 ちなみに自身は、Debian(Linux)を使っているが、macOSの他、Windows/Linuxについては32bit/64bit、Linuxはこれに加えてARMv6hf版もある。

Arduino(Firmata)ライブラリのインストール

 Processingを起動、[ファイル] => [サンプル]をクリック、[サンプルを追加...]ボタンをクリック、[libraries]タブを選択、[Arduino(Firmata)]を選び、[↓Install]ボタンをクリックしてProcessingにArduino(Firmata)ライブラリをインストールする。

 当初、playground.arduino.ccのリンク先にあったライブラリを展開したのだが、いまいち展開先がわからず、いくつかの場所に置いて試してみたが、どうやっても実行時に"cc does not..."となってしまったのでProcessingのメニューを眺めていたら見つけた次第。

スクリプトを書く

// example.pde
import processing.serial.*;
import cc.arduino.*;
 
Arduino arduino;
int ledPin = 13;
 
void setup()
{
 //println(Arduino.list());
// arduino = new Arduino(this, Arduino.list()[0], 57600);
 arduino = new Arduino(this, "/dev/ttyUSB0", 57600);
 arduino.pinMode(ledPin, Arduino.OUTPUT);
}
 
void draw()
{
 arduino.digitalWrite(ledPin, Arduino.HIGH);
 delay(1000);
 arduino.digitalWrite(ledPin, Arduino.LOW);
 delay(1000);
}

 Arduino and Processingの下の方にある[Example]のスケッチをコピー&ペーストする。

 ただし、自身は、Debian(Linux)上で作業を行なったのだが、インスタンス[Arduino]生成時の引数に[Arduino.list()[0]]を使うと、なぜか正しいポート名が得られず、このように固定値に置き換える必要があった。

 ここでは、ファイル名を仮にexample.pdeとしたので任意のディレクトリ・フォルダにProcessingが想定する同名のexampleディレクトリ(フォルダ)を作成し、そこにexample.pdeを置く。

[2018/03/04:訂正・追記]

 Firmataではないし、このスケッチでは試していないものの、続編のシリアル通信Arduino側センサ値をProcessingでグラフ化デモで、たまたま、検出できることがわかったのだが、[Arduino.list()[0]]の配列要素を0ではなく、4にしたところ、/dev/ttyUSB0も検出された(というか一致した)。

 また、Processingのスケッチにprintln(Serial.list());と書けば、下部のウィンドウに配列要素に格納されているシリアルポートが列挙されることがわかった。

スクリプトの実行と終了

 Arduino IDEのサンプルスケッチStandardFirmataをアップロードしたArduinoボードをPCにUSB接続しておく。

 ファイルマネージャ上などでexample.pdeのあるフォルダを開き、ダブルクリックするか、右クリックするなりしてProcessingを起動。

 横三角の実行ボタンをクリックすると何も表示されていない小さなポップアップ画面が開き、少なくともUno/Nano/Pro MiniならArduinoボード上のLEDが点滅しているはず。

 終了するには、実行ボタン右横にある四角い停止ボタンをクリックする。

 マウスイベントも拾うことができるようなのでクリック時にLED点灯というのも容易にできる模様。

// example_1.pde
import processing.serial.*;
import cc.arduino.*;
 
Arduino arduino;
 
int led = 13;
boolean value = false;
PImage bg1, bg2;
 
void setup() {
 size(100 ,100);
 println(Arduino.list());
 arduino = new Arduino(this , Arduino.list()[4] , 57600);
 arduino.pinMode(led, Arduino.OUTPUT);
 bg1 = loadImage("/path/to/switch_on_image.jpg");
 bg2 = loadImage("/path/to/switch_off_image.jpg");
}
 
void draw() {
 if (value) {
   background(bg1);
 } else {
   background(bg2);
 }
}
 
void mousePressed() {
 value = !value;
 if (value) {
  arduino.digitalWrite(led , Arduino.HIGH);
 } else {
  arduino.digitalWrite(led , Arduino.LOW);
 }
 println(value);
}
[2018/03/20]

 マウス押下時のイベントを拾った一例がこれ。

 Arduino側は、やはり、StandardFirmataで、Processing側で、このようにON/OFFそれぞれのスイッチ画像ファイル(少なくとも.jpgは可)を使うとProcessing側のスイッチでArduino側のLEDをON/OFFできる。(後段リンクのJavaSriptを使ったブラウザからのLED ON/OFF参照。)

 ちなみにsize();で指定したピクセル値と画像ファイルのサイズは縦横ぴったり一致させる必要がある。

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

ArduinoとProcessingは旧知の仲

 ProcessingはJavaベース、Arduino IDEは、C/C++風であるものの、Arduinoのプログラミング言語は、電子アートとビジュアルデザインのためのプログラミング言語かつ統合開発環境(IDE)であるProcessingから派生したアーティストがマイクロコントローラをプログラムできるようにすることを目的としたプロジェクトであるWiringベースとなっている。(What is Arduino?)

 また、Processingでは、IDEをsketchbook、個々のプログラムファイルをスケッチと呼び、スケッチの基本形は、setup()関数とdraw()関数から成り、学生向けのロボット製造用コントロールデバイスの選択肢の1つとして、より安価なプロトタイピングデバイスを製造することを目的としたArduinoのIDEは、Processingを元に作られたもので、やはり、そのプログラムファイルをスケッチと呼び、スケッチの基本形は、setup()関数とloop()関数から成る。

 そんな関係にあるArduinoとProcessingは、主に前者を比較的容易にビジュアル化するべく、後者を使用するプロジェクトが既に多々存在する。

 そういった意味でProcessingとArduino間におけるFirmataライブラリの利用やシリアル通信プログラミングは、他のスクリプトなどとは違う目的において最も相性の良い組み合わせと言えるだろう。

 Processingは、元々は、PCを前提としたものだったが、後にWebベースやアプリとしてスマホ上でも利用できるような仕組みも登場している模様なので尚更。

ウェブ造ホーム前へ次へ