PATLITE PHU-3をRaspberryPiのNode-REDで制御する


2017.03.09

###1. 概要

PATLITE PHU-3はUSB I/Fを持った３色（RED, YELLOW, GREEN）LED表示灯である。これをラズパイのUSBに接続し、Node-REDからLEDの点灯を制御する。

###2. 準備  

- PATLITEをラズパイのUSBに接続する
- ラズパイを起動する
- Mac/PCからラズパイにSSHで接続する

###3. 現状確認

lsusbコマンドを実行する。下記の場合Device 006がPATLITEに相当し、vendor ID = 191a, Product Id = 8002 であることがわかる。

```
$ lsusb
Bus 001 Device 006: ID 191a:8002  
Bus 001 Device 005: ID 0566:3029 Monterey International Corp. 
Bus 001 Device 004: ID 15d9:0a4f Trust International B.V. 
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
```


次に以下のコマンドを実行する。何もみつからないのでttyUSB deviceとは認識されていないことがわかる。

```
$ ls /dev/ttyUSB*
```

次に以下のコマンドを実行する。

```
$ dmesg | grep USB  
```

最後の数行に以下の表示があり、ラズパイがどのようにPATLITEを認識しているかがわかる。  

```
[ 6012.586434] usb 1-1.4: new full-speed USB device number 6 using dwc_otg  
[ 6012.741414] usb 1-1.4: New USB device found, idVendor=191a, idProduct=8002  
[ 6012.741429] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0  
[ 6012.741438] usb 1-1.4: Product: USB/FTDI PATLITE  
```

###4 ドライバーのインストール
ドライバーのインストールは以下のコマンドを実行する。

```
$ sudo su  
modprobe ftdi-sio  
echo 191a 8002 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id  
exit  
```

ドライバーがインストールされたことを確認するには以下のコマンドを実行し、

```
$ dmesg | grep USB  
```

表示に以下のメッセージが含まれることでわかる。

```
FTDI USB Serial Device converter now attached to ttyUSB0
```

さらに、ttyUSBデバイスが作成されていることを確認する。

```
$  ls /dev/ttyUSB*
/dev/ttyUSB0
```

###5 Node-REDを使った動作確認
####5.1 Flowの実行

ラズパイへのNode-REDのインストールはここでは説明しない。ただし、Node-RED(v0.16.2)にはserial nodeが無かったので、下記を参照してインストールした。

> https://www.npmjs.com/package/node-red-node-serialport

Node-REDのテストFLOWはこのとおり。  
![image_01.png](https://qiita-image-store.s3.amazonaws.com/0/73141/5e94821d-55c1-1ee8-53c8-0158d527954c.png "image_01.png")


```
[{"id":"8a8aa705.6f2d38","type":"inject","z":"67a4aa13.675414","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":138.5,"y":181,"wires":[["e150861.bb54278"]]},{"id":"4990ddcd.0a29d4","type":"serial out","z":"67a4aa13.675414","name":"","serial":"fe45a1c8.bbbb4","x":601.5,"y":181,"wires":[]},{"id":"e150861.bb54278","type":"function","z":"67a4aa13.675414","name":"msg.payload = 1","func":"msg.payload = 1;\nreturn msg;\n\n// 0: 消灯\n// 1: RED\n// 2: YELLOW\n// 3: RED, YELLOW\n// 4: GREEN\n// 5: RED, GREEN\n// 6: YELLOW, GREEN\n// 7: RED, YELLOW, GREEN","outputs":1,"noerr":0,"x":372.5,"y":181,"wires":[["4990ddcd.0a29d4"]]},{"id":"8a641bbb.bb83a8","type":"comment","z":"67a4aa13.675414","name":"Test Flow: PATLITE","info":"","x":142.5,"y":136,"wires":[]},{"id":"fe45a1c8.bbbb4","type":"serial-port","z":"","serialport":"/dev/ttyUSB0","serialbaud":"19200","databits":"8","parity":"none","stopbits":"1","newline":"\\n","bin":"false","out":"char","addchar":false}]
```

このFLOWをimportし、Deployし、timestamp nodeの左側をクリックすると、PATLITEのREDが点灯する。  
function node内のJavaScriptでmsg.payloadに代入する値を1~7に変更すると、点灯するLEDのパターンが変更できる。  
1:RED, 2:YELLOW, 4:GREENとbitmapで実装されている。


####5.2 Flowの解説
timesamp nodeはトリガーだけである。function nodeには、以下のJavaScriptが記述されている。

```JavaScript
msg.payload = 1;
return msg;
```

serial nodeは以下のように設定されている。  

![image_02.png](https://qiita-image-store.s3.amazonaws.com/0/73141/b00f7a2c-037a-5382-d96a-76b05e3eda59.png "image_02.png")


Serial Portの右側の鉛筆のアイコンをクリックすると、以下のようにシリアル通信の設定画面が現れる。

![image_03.png](https://qiita-image-store.s3.amazonaws.com/0/73141/faf5a17f-ef62-7e89-a0aa-b4082418457b.png "image_03.png")



###6. NOTE
このままだと再起動等すると接続できなくなるので
/etc/rc.localに追記する。

```
$ cd /etc
$ sudo nano rc.local
```

```
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

# add device driver for PATLITE
modprobe ftdi-sio
echo 191a 8002 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id

exit 0
```