ネットワーク対応小型LED警告灯「Crystal Signal PI」を動かしてみた

Crystal Signal PIが届いたので、早速組み立てて（↓完成形）動かしてみました。
<img width="40%" alt="image" src="https://qiita-image-store.s3.amazonaws.com/0/54952/3d6ac848-d286-8fad-dd30-46a1086150e4.jpeg">


# Crystal Signal PIとは？
> 小型コンピュータRaspberry PiにLED警告灯機能を追加する拡張モジュールです。Raspberry Piに> ソフトウェアを追加することで、さまざまな通知・監視に利用できます。既存の警告灯に比べ、低コストでプログラマーフレンドリー。光で監視するこの仕組みは、さまざまな活用方法が考えられます。
・[プロジェクトページより引用](http://actnow.jp/project/crystal-signal/detail)

よく使われているパトライト(PATLITE)社のネットワーク対応の製品だと、安くても4~5万円はするので個人ではちょっと手が出ません。→こんなの：[PATLITE LAN接続表示灯タイプ](https://www.patlitestore.jp/index.php?main_page=index&cPath=64_65)

Crystal Signal PIは一番安いプリント基板キットであれば、５千円の支援で手に入るためRaspberryPiと合わせても１万円程度で導入できます。またAPIが用意されているので簡単に発光パターンを制御できます。

***
- [Crystal Signal PI 公式ホームページ](http://crystal-signal.com)
- [クラウドファンディング ACT NOW プロジェクトページ](http://actnow.jp/project/crystal-signal/detail)

クラウドファンディングとして募集されていましたが、残念ながら初回ロットは終了しています(2016/12/19現在)。公式ホームページにある登録フォームからメールアドレスを登録しておくと次回ロットの生産が決まった時に知らせてくれるようです。

***
Crystal Signal PIを使った取り組みについて販売元のブログに纏まっています。

- [あらゆるイベントを可視化する! RaspberryPiで作るLED警告灯ソリューション](http://www.slideshare.net/infinite_loop/raspberrypiled)
- [CIの見える化でここまで効率が変わった ～Raspberry Piを使ったLEDソリューション製作記～](http://www.slideshare.net/infinite_loop/ci-raspberry-piled)
- [クリスタルシグナルPiとZabbixでネットワークトラフィックを可視化する方法](https://www.infiniteloop.co.jp/blog/2016/11/monitoring-network-traffic/)
- [さくらのIoT PlatformとクリスタルシグナルPiで作るお手軽監視ソリューション](https://www.infiniteloop.co.jp/blog/2016/11/sakura-iot-with-crystal-signal/)
- [クリスタルシグナルPiで作るゴミ出しリマインダーシステム](https://www.infiniteloop.co.jp/blog/2016/12/gomi-reminder/)

# 組み立て
今回申し込んだ「プリント基板キット」は自分でハンダ付けと組み立てが必要です。（ハンダ付けが終わっている半完成品もあります）
ハンダ付けしたことある人であれば、難しいところは無いと思います。ただ[マニュアル](http://crystal-signal.com/other/Crystal_Signal_Pi_construction.pdf)にも記載されていますが、部品の向きと種類に注意が必要です。
**炭素被膜抵抗の中に２つだけ他と違うカラーコードのものが含まれています。特にその内の一つは他のとカラーコードが非常に似ている（茶黒赤金と茶黒橙金）ので注意！！**
あやうく間違えて取り付けるとこでした　ｱﾌﾞﾈ━━━━Σ(ﾟдﾟ；)━━━━!!


<img width="60%" alt="image" src="https://qiita-image-store.s3.amazonaws.com/0/54952/dad2d059-3c63-2a4f-d607-113168a48d3f.jpeg">

# ソフトウェアインストール
組み立て終わったら[マニュアル](http://crystal-signal.com/other/Crystal_Signal_Pi_software.pdf)の通りソフトウェアをインストールします。

```bash:インストール
pi@raspberrypi:~ $ curl -O https://raw.githubusercontent.com/infiniteloop-inc/crystal-signal/master/install.sh
pi@raspberrypi:~ $ sudo bash install.sh
```

インストールが終わると、pythonのサーバが起動しています。

```bash:確認
pi@raspberrypi:~ $ systemctl list-units | grep LED
LEDController.service                                                                                   loaded active running   LED Controller

pi@raspberrypi:~ $ ps -ef | grep LED
root       479     1  2 Dec15 ?        00:15:41 /usr/bin/python /usr/local/bin/LEDController.py
```

# Webブラウザから操作

ソフトウェアのインストールが終わったら、Webブラウザで **http://(Raspberry PiのIPアドレス)/** にアクセスするとWebUIが表示され、ここでLEDの操作ができます。
<img width="80%" alt="image" src="https://qiita-image-store.s3.amazonaws.com/0/54952/7a594998-b9c8-a743-14ca-bc3caf0d3374.png">

# APIによる制御
詳しい内容は[マニュアル](http://crystal-signal.com/other/Crystal_Signal_Pi_software.pdf)に丁寧に記載されているため省きますが、curlなどでAPIを叩くことでLEDをプログラムから簡単に制御することができます。


```bash:curlからLEDを点滅させる例
$ curl 'http://192.168.0.19/ctrl/?color=10,200,30&mode=1&repeat=0&period=500'
```

試しにシェルスクリプトでLEDの色を変化させてみました。

![タイトルなし２.gif](https://qiita-image-store.s3.amazonaws.com/0/54952/bd51c679-490c-3dbf-ef73-fd1777735ed3.gif)

```bash:color_change.sh
#!/bin/bash

IPADDR=127.0.0.1

color_change() {
   curl -s "http://$IPADDR/ctrl/?color=$1&mode=0&json=1"
}

asc="0 63 127 191 255"
desc="255 191 127 63 0"

while :
do
  for i in ${desc}; do
    color_change 0,$i,255
  done
  for i in ${asc}; do
    color_change $i,0,255
  done
  for i in ${desc}; do
    color_change 255,0,$i
  done
  for i in ${asc}; do
    color_change 255,$i,0
  done
  for i in ${desc}; do
    color_change $i,255,0
  done
  for i in ${asc}; do
    color_change 0,255,$i
  done
done
```

# さいごに

ネットワーク越しに簡単に制御が行えるので、さまざまな通知フローの中に組み込みやすいと思います。