ネタどうしよう...
ネタどうしよう、と考えてて、
今はまってるArduinoとfluentdを組み合わせると
いいのかな〜と思ったのでどぶろく飲みながら書いてみた。
動けばいいやという感じで実装した感じで...
機能が貧弱で、LEDをチカチカさせることしかできない。
使うためには
以下の部品が必要。
- Arduino UNO
- [LEDいくつか](http://akizukidenshi.com/catalog
/goods/search.aspx?search=x&keyword=LED&image=%8C%9F%8D%F5) - ブレッドボード
- ジャンパーコード
使ってみる
使ってみた動画がこちら。
インストールのためには
以下はわかってる人向け... (説明省いてる...)
Arduino
Arduino IDEを利用し、Arduino側にシリアル通信の受け口となるプログラムをビルドし、転送しないといけない。
転送するためのプログラムはここにある。
#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)を書かないといけないから、だるい。