LoginSignup
6
6

More than 5 years have passed since last update.

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

Last updated at Posted at 2013-12-16

ネタどうしよう...

IMG_2248.jpg

ネタどうしよう、と考えてて、
今はまってる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)を書かないといけないから、だるい。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6