Slide 1

Slide 1 text

京急ガジェットを作っている エンジニアから見たNode-RED ポキオ

Slide 2

Slide 2 text

ポキオ ● Android園児にゃー ● Twitter : @pokiiio ● Blog : Androidのメモとか (http://relativelayout.hatenablog.com/)

Slide 3

Slide 3 text

tl;dr ● 京急は神 ● IFTTTでは痒いところに手が届かない ● ゴリゴリ書くより簡単 ● そう、Node-REDならね ● Nodeが豊富 ● NodeがなければJSで書けばいい ● JSが無理ならShellScriptを実行すればいい

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

京急は神 *個人の感想です

Slide 6

Slide 6 text

agenda ● ポキオとマイコン ● サービス連携ってだるい ● そこでNode-RED ● Node-REDのよさみ ● Node-RED ✕ 京急 ○ 種別幕の表示 ○ 運行情報の表示 ● サマリ 2000形 今はなき往年の名車

Slide 7

Slide 7 text

ポキオとマイコン

Slide 8

Slide 8 text

何者なの? ● 本業はAndroid園児にゃー ● 数年前にArduinoに出会い、ハマる ● ハードウェアを簡単に学べる良い仕組み ● ArduinoだけでなくESP8266やRaspberry Piなど、ボード沼にもハマる ● 元々京急が好きだったので、京急ガジェットを作ろうと決意

Slide 9

Slide 9 text

ガチャガチャで ゲットした小さい プラレール ESP8266*搭載の マイコンボード *Wi-Fi機能が使えるチップ。 遅延を検知すると LEDが光る

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

マイコン内蔵RGB LED ESPr® Developer Bトレインショーティー 様々な色で光ることが可能 遅延理由によって色を変える

Slide 12

Slide 12 text

(白い点滅) (黄色い点滅) (赤い点滅) (ランダム色点滅・パリピモード)

Slide 13

Slide 13 text

クソコードで最大のアウトプットを ● びっくりするほどのクソコード ○ 情報取得:京急運行ページを HTTP-GET ○ 遅延判断:特定の文字列をパース ○ 状況通知:LEDをチカチカ

Slide 14

Slide 14 text

サービス連携ってだるい (個人の感想です)

Slide 15

Slide 15 text

マイコンのPros./Cons. ● Pros. ○ 色んな言語で開発できる(そして、それなりに動く) ○ ハードウェア連携が簡単(ボタンをつけたり、 LEDを光らせたり)

Slide 16

Slide 16 text

マイコンのPros./Cons. ● Cons. ○ マイコンによっては非力 ○ サービス連携がだるい

Slide 17

Slide 17 text

だるい ● Androidアプリ開発とは全く違う ○ Androidはサービス連携はIntentで済ませてしまう ○ マイコンにはIntentのような処理と処理を簡単に繋げられるインターフェースがない? ○ 自分のアプリでほかのサービスの実装をどっぷりするようなことがない(なかった) ○ あるサービスを監視するような実装をしたことがない

Slide 18

Slide 18 text

だるい ● ソフトウェアだしやろうと思えばなんでもできる(震え声) ○ mBaaSとかを使えばもっと凝ったことはできるんだろうな(ただし有料) ○ IFTTTとか使うといろんなサービスと連携できるんだろうな(ただし自由度が低い)

Slide 19

Slide 19 text

IFTTTがあるじゃん? ● マイコンがトリガーになる場合 ○ 結構簡単 ○ JSONをHTTP POSTするだけでOK ● マイコンがアクションになる場合 ○ すっごいだるい(個人の感想です) ○ IFTTTから外部サーバーを経由してマイコンに通知する ○ IFTTT -(webhook)-> 外部サーバー -(MQTT)-> マイコン ○ 外部サーバーっていう時点でテンションが下がる

Slide 20

Slide 20 text

そこでNode-RED

Slide 21

Slide 21 text

Node-REDを触ってみたらすごかった ● IBM Cloudがライトアカウントを始めた ○ クレカ登録不要、無料 ○ Node-REDも使える ● うわなにこれすごい ○ Nodeを繋ぐだけ ○ Nodeも豊富 ○ Watsonなどの連携も楽 ● そういえばRaspberry Piにも入ってたな ○ うわすごい ○ GPIOの制御も簡単

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

Node-REDって? 恐れ多くも簡単に説明すると・・・

Slide 24

Slide 24 text

Node-REDって? ● Nodeとは? ○ 処理のブロック ● Nodeが豊富 ○ SNS連携 ○ IBM Cloud ■ Watson ■ DB ■ MQTT ○ Raspberry Pi ■ GPIO ■ コマンドの実行 ● Nodeは作れる ○ JSで書ける! IBM Cloud上のNode-REDにあるNodeの例

Slide 25

Slide 25 text

Node-REDのすごみ ● いろんなサービスのNodeがある ● Nodeがあればつなぐだけ ● あれ、簡単じゃん MQTTの送受信Nodeもあるので簡単 外部サービスをトリガーにするのも簡単

Slide 26

Slide 26 text

必殺技 ● 困ったら「Function Node」「Exec Node」を使ってゴリゴリ書ける

Slide 27

Slide 27 text

Node-RED ✕ 京急

Slide 28

Slide 28 text

電子ペーパー ● Lチカに飽きた ● 電子ペーパーならリッチなことできるかな ● 電子ペーパー制御はRaspberry Piで ● 言語はPythonがメイン ○ 電子ペーパーモジュールのメーカーから Pythonライブラリが提供 ○ そのPythonライブラリを使って画像を貼り付ける ○ 文字を表示させたいときは、 Pythonの画像系ライブラリで文字を画像化させてそれを貼る

Slide 29

Slide 29 text

PaPiRus (Pi Supply・2.7inch・白黒) ¥6450 2.7inch e-Paper HAT (B) (Waveshare・2.7inch・三色) $20.99

Slide 30

Slide 30 text

種別幕の表示

Slide 31

Slide 31 text

種別幕って? これ

Slide 32

Slide 32 text

つくったのはこれ 4つのボタンに 「普通」「急行」「特急」「快特」をアサイン 選択された種別画像を表示

Slide 33

Slide 33 text

フローはこんな感じ GPIO Nodeで ボタン押下を監視 Exec Nodeで 画像表示コマンドを コール papirus-draw ~/Pictures/Keikyu/tokkyu.jpg

Slide 34

Slide 34 text

http://relativelayout.hatenablog.com/entry/2018/01/16/002847

Slide 35

Slide 35 text

運行情報の表示

Slide 36

Slide 36 text

遅延っていやですよね ● 京急の運行情報を表示 ○ ただしAPIは存在しない ■ 京急運行ページをパース ○ ポーリングではなく、変化があったときだけ更新したい ■ 京急のサーバーに負担をかけたくない ■ 電子ペーパーの更新に時間がかかる ○ 今回は京急公式Twitterに投稿があったら、運行情報に更新があったとみなす

Slide 37

Slide 37 text

フローはこんな感じ Raspberry Pi 起動をトリガーに するのも簡単 Twitterトリガーも 秒で実装可能 面倒なことは すべてPythonに やらせる python ~/GitHub/KeikyuInfoOnEPaper/show_keikyu_unko.py https://github.com/pokiiio/KeikyuInfoOnEPaper で公開中

Slide 38

Slide 38 text

pythonの中身 平常通り・・・ 京急運行ページを HTTP-GET 運行情報文字列を 抜き出す PILで 文字列を画像化 電子ペーパーに 描画 https://github.com/pokiiio/KeikyuInfoOnEPaper で公開中

Slide 39

Slide 39 text

実物はこちら 電子ペーパー Raspberry Pi みんな大好き レゴ

Slide 40

Slide 40 text

遅れるとこんな感じに

Slide 41

Slide 41 text

順調とは

Slide 42

Slide 42 text

サマリ

Slide 43

Slide 43 text

summary ● ごめんなさい、やっぱりクソコードでした ● Node-REDを使えばサービス連携が容易 ● Nodeがなくても、JSでかけなくても、コマンド実行すればなんでもできる ● これが無料で使えるだなんて!

Slide 44

Slide 44 text

links ● ダァ1号 ○ http://relativelayout.hatenablog.com/entry/2016/08/26/125650 ● ダァ2号 ○ http://relativelayout.hatenablog.com/entry/2017/03/25/003251 ● ダァ3号 ○ http://relativelayout.hatenablog.com/entry/2018/03/23/143138 ● 種別幕 ○ http://relativelayout.hatenablog.com/entry/2018/01/16/002847

Slide 45

Slide 45 text

ありがとうございました