Edited at
FluentdDay 17

fluent-plugin-arduinoを書いてみた。

More than 5 years have passed since last update.


ネタどうしよう...

ネタどうしよう、と考えてて、

今はまってるArduinofluentdを組み合わせると

いいのかな〜と思ったのでどぶろく飲みながら書いてみた。

fluent-plugin-arduino

動けばいいやという感じで実装した感じで...

機能が貧弱で、LEDをチカチカさせることしかできない。


使うためには

以下の部品が必要。


使ってみる

使ってみた動画がこちら。

gif


インストールのためには

以下はわかってる人向け... (説明省いてる...)


Arduino

Arduino IDEを利用し、Arduino側にシリアル通信の受け口となるプログラムをビルドし、転送しないといけない。

転送するためのプログラムはここにある。


led.ino

#define UPPER_CASE 65

#define LOWER_CASE 97

void setup() {
for(int i = 0; i <= 13; i++) {
pinMode(i, OUTPUT);
}
Serial.begin(9600);
Serial.print("\nSetup...");
}

void loop() {
if (Serial.available()) {
char c = Serial.read();
// LOW
if (int(c) < 97){
digitalWrite((int(c) - UPPER_CASE), LOW);
}
// HIGH
else {
digitalWrite((int(c) - LOWER_CASE), HIGH);
}
}
}



PC

PC側ではfluentdを起動しておく必要がある。

んで、Arduinoを接続しているポート(というかデバイスか)

を指定しておく必要がある。

サンプルとなる設定ファイルをここに置いておいた。

<source>

type forward
port 24224
</source>

<match arduino.test1.**>
type arduino
key name
value kaiki
pin 13
port /dev/cu.usbmodem1431
</match>

<match arduino.test2.**>
type arduino
key name
value senjogahara
pin 12
port /dev/cu.usbmodem1431
</match>

<match arduino.test3.**>
type arduino
key name
value araragi
pin 11
port /dev/cu.usbmodem1431
</match>

<match arduino.test4.**>
type arduino
key name
value sengoku
pin 10
port /dev/cu.usbmodem1431
</match>

<match arduino.test5.**>
type arduino
key name
value hanekawa
pin 9
port /dev/cu.usbmodem1431
</match>

'

ここの例では/dev/cu.usbmodem1431 だが、これは環境によってことなるので

設定方法はがんばってググって欲しい。


どうやって通信しているの?

Arduinoのシリアル通信機能を利用してる。

シリアル通信だと、同期とか考えずに何かやりとりしようとすると255バイトまでの情報しか送れない。

自分でプロトコル考えておけばいいのだろうけど、だるい...

どうやって制御しよーかな、と思った結果、ASCII コードを送り付けることで動作するようにしてる。

※ 2013/12/17追記 Serial.readBytes()を使うことで読み込む分を制御できるようだ。

Hashのキーになっている数字がpin番号を表す。

Aとかaとか、PCからArduinoに送り付けるとArduino側が

ASCIIコードを数字に置き換えて、適当に引き算して

特定のpinに対して電流を流したり流さないように制御する(ようにled.inoに書いてる)

PIN_NUMBER = {

"0" => "A",
"1" => "B",
"2" => "C",
"3" => "D",
"4" => "E",
"5" => "F",
"6" => "G",
"7" => "H",
"8" => "I",
"9" => "J",
"10" => "K",
"11" => "L",
"12" => "M",
"13" => "N"
}

fluent-catでfluentdに対してデータを送りつけ、マッチするtagであれば

LEDを点滅させる。


今後

サーボとか使って何か動かすとか、

シリアル通信使って文字列をやりとりするライブラリを書いて

LCDモジュールに何か表示するとかそんなことやってみたい。

ただ、やりたいことがあるとその分だけArduino向けのコード(Sketch)を書かないといけないから、だるい。