SlideShare a Scribd company logo
@girlie_mac
Hardware Hacking
for JavaScript Devs
Tomomi Imura (@girlie_mac)
Hardware Hacking
for JavaScript Devs
https://flic.kr/p/8tuc1u by randomliteraturecouncil CC-BY 2.0
2015 東京 Node 学園祭
@girlie_mac
I am a:
● Front-End Engineer
● N00b Hardware Hacker
● Sr. Developer Evangelist at
PubNub
● San Francisco Dweller
@girlie_mac
Internet of Things の時代
Source: Cisco IBSG https://www.cisco.com/web/about/ac79/docs/innov/IoT_IBSG_0411FINAL.pdf
500億!
@girlie_mac
Withings: Smart Body Analyzer
GE Link
Cinder
Sensing Cooker
Nest: Learning
Thermostat
Whistle: Connected pet collar
Amazon
Dash Button
@girlie_mac
猫も杓子も
インターネット
キタ━━━(゚∀゚)━━━!!!
@girlie_mac
ニュータイプ
なのか…?
Srsly, where should I start?
@girlie_mac
Arduino (Genuino)
● MCU のキット
● オープンソースなハードウェア
とソフトウェア (IDE)
● ディベロッパ・フレンドリー
@girlie_mac
LittleBits
@girlie_mac
LittleBits & Arduino at Heart
9V BATTERY
USB PLUG TO COMPUTER
MODULES
@girlie_mac
Arduino-Compatible MCUs
BeagleBone
C.H.I.P
mCookie
Petduino
LinkIt One
@girlie_mac
Tessel
USB PLUGS TO
COMPUTER
ETHERNET
MODULES
GPIO DIGITAL PINS
EXTRA USB
PORTS
@girlie_mac
Programming Tessel in Node.js
var tessel = require('tessel');
var camera = require('camera-vc0706').use(tessel.port['A']);
camera.on('ready', function() {
camera.takePicture(function(err, image) {
if (err) { console.log(err); }
else {
var name = 'pic-' + Date.now() + '.jpg';
process.sendfile(name, image);
camera.disable();
}
});
});
カメラモジュールの
差し込まれたポート
ready
イベント
コールバック
@girlie_mac
Raspberry Pi
USB TO POWER
SOURCE
TO MONITOR
TO MOUSE
TO KEYBOARD
WI-FI ADAPTER
SD CARD
GPIO DIGITAL PINS
4 EXTRA USB
PORTS
ETHERNET
@girlie_mac
Raspbian OS
@girlie_mac
Programming Raspberry Pi
プリインストールされた言語
C / C++
@girlie_mac
LED: Hello World of Hardware
@girlie_mac
Circuit
電気回路
3.3V
(Raspberry Pi)
LED
@girlie_mac
オームの法則
R =
V - Vs f
I
電源電圧 (V) LED にかかる電圧 (V)
LED に流れる電流 (A)
抵抗 (Ω)
@girlie_mac
オームの法則と抵抗
R =
3.3 - 1.9
0.02
電源電圧 (V) LED にかかる電圧 (V)
LED に流れる電流 (A)
抵抗 (Ω)
= 70Ω
@girlie_mac
ラズベリーパイでの回路
3.3V
(Pin 1)
GND
アノード
(足の長い方)
カソード
@girlie_mac
LED をプログラムで操作
GPIO-4 (Pin 7)
@girlie_mac
Programming MCU with Node.js
@girlie_mac
Programming Pi with Node.js
node-arm を使って Node.js をインストール
$ wget
http://node-arm.herokuapp.com/node_latest_armhf.deb
$ sudo dpkg -i node_latest_armhf.deb
もしくは特定バージョンの
Node
@girlie_mac
Johnny-Five
● JS で書けるロボティクス・フレーム
ワーク
● Arduino 互換機で作動
● 他機種はIOプラグインで
● http://johnny-five.io/
Woot!
@girlie_mac
Johnny-Five & Raspi-io
$ npm install johnny-five
$ npm install raspi-io
@girlie_mac
Blinking LED
var five = require('johnny-five');
var raspi = require('raspi-io');
var board = new five.Board({io: new raspi()});
board.on('ready', function() {
var led = new five.Led(7); // インスタンスの作成
led.blink(500); // 500ms 間隔の on-off フェイズで "blink" (チカチカ)
させる
});
Pin 7 (GPIO-4)
ラズパイ用プラグイン。
Arduino を使う場合は必要
なし
@girlie_mac
スマートなんちゃらを
プロトタイプしてみよう
@girlie_mac
デバイス間データのストリーミング
PubNub を使って Publish/Subscribe
@girlie_mac
ブラウザからデータを送信
var pubnub = PUBNUB.init({
subscribe_key: 'sub-c-...',
publish_key: 'pub-c-...'
});
function lightOn() {
pubnub.publish({
channel: 'remote-led',
message: {light: true},
callback: function(m) {console.log(m);},
error: function(err) {console.log(err);}
});
}
document.querySelector('button')
.addEventListener('click', lightOn);
クリックイベントの
発生
<script src="http://cdn.pubnub.
com/pubnub-3.7.15.min.js"></script>
@girlie_mac
MCU でデータを受信
var pubnub = require('pubnub').init({
subscribe_key: 'sub-c-...',
publish_key: 'pub-c-...'
});
pubnub.subscribe({
channel: 'remote-led',
callback: function(m) {
if(m.light) {
// Johnny-Five でLチカ!
}
}
});
led.pulse();
@girlie_mac
RGB LED で Hue もどきを作る
カソードコモン4本足 LED
R
G
B
GNDアナログ
PWM pins
@girlie_mac
@girlie_mac
RGB LED で Hue もどきを作る
{'red':215,
'green':50,
'blue':255}
publish data
subscribe data
Software UI Physical Output
@girlie_mac
ブラウザからデータを送信
redInput.addEventListener('change', function(e){
publishUpdate({color: 'red', brightness: +this.value});
}, false);
function publishUpdate(data) {
pubnub.publish({
channel: 'hue',
message: data
});
}
その値を PubNub に送信し
て、MCU 側に伝える
UI で赤色の値が変
更
@girlie_mac
MCU でデータを受信
var led = new five.Led.RGB([7, 5, 3]);
pubnub.subscribe({
channel: 'hue',
callback: function(m) {
if(led) {
r = (m.color === 'red') ? m.brightness : r;
g = (m.color === 'green') ? m.brightness : g;
b = (m.color === 'blue') ? m.brightness : b;
led.color({red: r, blue: b, green: g});
}
}
});
GPIO ピンに接続
された LED ア
ノードに各色の
値を伝達
http://johnny-five.io/examples/led-rgb/
pin#s for R, G, B
@girlie_mac
KittyCam
@girlie_mac
@girlie_mac
KittyCam in Node.js
1. 動きを察知 (Johnny-Five IR.Motion obj)
2. 写真を撮影 (Raspistill, command line tool)
3. ネコ顔認識 (KittyDar)
4. クラウド (Cloudinary) に写真を保存
5. データを PubNub でパプリッシュ
6. web でストリーム (PubNub でデータをサブスク
ライブ)
@girlie_mac
PIR Sensor(焦電型赤外線センサ)
@girlie_mac
PIR Sensor > Run Camera
board.on('ready', function() {
// `motion` ハードウェア・インスタンスを生成
var motion = new five.Motion(7); //pin 7 (GPIO 4) にワイヤーが接続
// セッションが始まると 'calibrated' が発火
motion.on('calibrated', function() {console.log('calibrated');});
motion.on('motionstart', function() { // 動きが感知されたぞ!
// raspistill コマンドでカメラを動かす
var filename = 'photo/image_'+i+'.jpg';
var args = ['-w', '320', '-h', '240', '-o', filename, '-t', '1'];
var spawn = child_process.spawn('raspistill', args);
...
motion detected!
Take a photo!
@girlie_mac
Processing Photo
...
spawn.on('exit', function(code) {
if((/jpg$/).test(filename)) {
var imgPath = __dirname + '/' + filename;
// Child process: 画像ファイルを読み取り、別プロセスで KittyDar を使ってネコの顔を認識
var args = [imgPath];
var fork = child_process.fork(__dirname+'/detectCatsFromPhoto.js');
fork.send(args);
// the child process is completed
fork.on('message', function(base64) {
if(base64) {
// クラウドストレージへ送る
}
}); ...
var kittydar = require
('kittydar');
a cat detected!
@girlie_mac
github.com/girliemac/RPi-KittyCam
@girlie_mac
https://twit.tv/shows/new-screen-savers/episodes/19
@girlie_mac
I hacked hardware so you can too!
International
NodeBots Day!
@girlie_mac
Thank you!
@girlie_mac
github.com/girliemac
speakerdeck.com/girlie_mac
pubnub.com
github.com/pubnub

More Related Content

PDF
大規模Node.jsを支える ロードバランスとオートスケールの独自実装
PDF
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
PDF
AWSとGCPを使用したインフラ環境
PDF
ng-japan 2015 TypeScript+AngularJS 1.3
PDF
linq.js - Linq to Objects for JavaScript
PDF
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
PDF
Introduction to NotifyPropertyChangedGenerator
PDF
Reactive Extensionsで非同期処理を簡単に
大規模Node.jsを支える ロードバランスとオートスケールの独自実装
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
AWSとGCPを使用したインフラ環境
ng-japan 2015 TypeScript+AngularJS 1.3
linq.js - Linq to Objects for JavaScript
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Introduction to NotifyPropertyChangedGenerator
Reactive Extensionsで非同期処理を簡単に

What's hot (20)

PDF
Node.jsv0.8からv4.xへのバージョンアップ ~大規模Push通知基盤の運用事例~
PDF
LINQ in Unity
PDF
An Internal of LINQ to Objects
PPTX
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
PDF
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
PDF
The Usage and Patterns of MagicOnion
PDF
How to Make Own Framework built on OWIN
PPTX
Javaで簡単にgpgpu aparapi
PDF
Nuxt.js + microCMS + netlify
PDF
Openresty
PDF
Grailsのススメ(仮)
PDF
asm.jsとWebAssemblyって実際なんなの?
PPTX
Rancher と GitLab を使う3つの理由
PDF
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
PDF
会社でClojure使ってみて分かったこと
PPTX
node-gypを使ったネイティブモジュールの作成
PDF
コンパイラ指向ReVIEW
PPTX
shinken monitoringについて真剣に調べてみた結果
PDF
静的サイトどこにする?
PDF
Rx java x retrofit
Node.jsv0.8からv4.xへのバージョンアップ ~大規模Push通知基盤の運用事例~
LINQ in Unity
An Internal of LINQ to Objects
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
The Usage and Patterns of MagicOnion
How to Make Own Framework built on OWIN
Javaで簡単にgpgpu aparapi
Nuxt.js + microCMS + netlify
Openresty
Grailsのススメ(仮)
asm.jsとWebAssemblyって実際なんなの?
Rancher と GitLab を使う3つの理由
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
会社でClojure使ってみて分かったこと
node-gypを使ったネイティブモジュールの作成
コンパイラ指向ReVIEW
shinken monitoringについて真剣に調べてみた結果
静的サイトどこにする?
Rx java x retrofit

Viewers also liked (20)

PPTX
The State of JavaScript (2015)
PDF
unassert - encourage reliable programming by writing assertions in production
PDF
PDF
スマホアプリにおけるマルチプレイアクションゲーム開発の実例紹介
PDF
Va tutorial
PPTX
ES6 is Nigh
PDF
Free Hardware and Open Processes | フリー・ハードウェアとオープン・プロセス
PPTX
Aws 2014 lt
PDF
OSC2010 TOKYO/Spring Asterisk Seminar
PDF
Layer 4 Load Balancer (NAT, IP Tunnelling, DR)
PDF
Wakamonog6 “ISPのネットワーク”って どんなネットワーク?
PPTX
冗長構成で定価100万以下バラクーダ ロードバランサー
PDF
創造的人材のための知財LT
PDF
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
PDF
Sfd2013dttkeynotespeech openinnovation-130925123405-phpapp01
PDF
ロードバランスへの長い道
PPTX
The jsdom
PDF
実践アニメーション
PDF
Node.js を選ぶとき 選ばないとき
PDF
【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法
The State of JavaScript (2015)
unassert - encourage reliable programming by writing assertions in production
スマホアプリにおけるマルチプレイアクションゲーム開発の実例紹介
Va tutorial
ES6 is Nigh
Free Hardware and Open Processes | フリー・ハードウェアとオープン・プロセス
Aws 2014 lt
OSC2010 TOKYO/Spring Asterisk Seminar
Layer 4 Load Balancer (NAT, IP Tunnelling, DR)
Wakamonog6 “ISPのネットワーク”って どんなネットワーク?
冗長構成で定価100万以下バラクーダ ロードバランサー
創造的人材のための知財LT
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
Sfd2013dttkeynotespeech openinnovation-130925123405-phpapp01
ロードバランスへの長い道
The jsdom
実践アニメーション
Node.js を選ぶとき 選ばないとき
【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法

Similar to [Tokyo NodeFest 2015] Hardware Hacking for Javascript Developers (20)

PPTX
AITCオープンラボ第4回IoT勉強会 センサーデータの取得・送信編
PDF
2016年11月19日 AITCシニア技術者勉強会 第1回「Arduinoを使ってみる」
PDF
Node.jsとXBeeで電気回路を無線制御
PDF
Ruby × Arduinoで フィジカルコンピューティング やってみた
PPTX
2015/05/23 シニア技術者プログラム第3弾 「第二回IoT勉強会&交流会」 15:00~15:20 Arduinoで簡単回路作成実演
PDF
機械学習 (AI/ML) 勉強会 #2 IoT編
PDF
KOGEI & KAIT Funnel WS
PDF
Python, RaspberryPi, Arduinoで作る消費電力モニタリングシステム
PDF
IoTデバイス センサデータ分析システム
PPTX
Webエンジニアのためのスマートホームハック ~ Node.js で家電とArduinoを操作 ~
PDF
Mecha-Mozilla
PPTX
クラウド―Arduino接続について
PDF
ハードウェアのすゝめ
PDF
配布用Raspberry pi+arduino+scratchでフィジカルコンピューティング体験!
ODP
Start physical computing with Ruby + Arduino
PDF
IoTLT発表資料 - なんでもIoTデバイス
PPTX
ラズパイでネット対応 学習リモコンをつくろう!
PPT
00 maker
PDF
フィジカルコンピューティング入門 USB-MIDIベースのPepper-Monakaを使う
PPTX
20100910 Arduino・Pachube・Sketchupを連携したローコストモニタリングの実践
AITCオープンラボ第4回IoT勉強会 センサーデータの取得・送信編
2016年11月19日 AITCシニア技術者勉強会 第1回「Arduinoを使ってみる」
Node.jsとXBeeで電気回路を無線制御
Ruby × Arduinoで フィジカルコンピューティング やってみた
2015/05/23 シニア技術者プログラム第3弾 「第二回IoT勉強会&交流会」 15:00~15:20 Arduinoで簡単回路作成実演
機械学習 (AI/ML) 勉強会 #2 IoT編
KOGEI & KAIT Funnel WS
Python, RaspberryPi, Arduinoで作る消費電力モニタリングシステム
IoTデバイス センサデータ分析システム
Webエンジニアのためのスマートホームハック ~ Node.js で家電とArduinoを操作 ~
Mecha-Mozilla
クラウド―Arduino接続について
ハードウェアのすゝめ
配布用Raspberry pi+arduino+scratchでフィジカルコンピューティング体験!
Start physical computing with Ruby + Arduino
IoTLT発表資料 - なんでもIoTデバイス
ラズパイでネット対応 学習リモコンをつくろう!
00 maker
フィジカルコンピューティング入門 USB-MIDIベースのPepper-Monakaを使う
20100910 Arduino・Pachube・Sketchupを連携したローコストモニタリングの実践

More from Tomomi Imura (20)

PDF
ECMeowScript - What's New in JavaScript Explained with Cats (August 14th, 2020)
PDF
[POST.Dev Japan] VS Code で試みる開発体験の向上
PDF
[Japan M365 Dev UG] Teams Toolkit v4 を使ってみよう!
PDF
[#DevRelAsia Keynote 2020] Developer Centric Design for Better Experience
PDF
Engineering career is not a single ladder! - Alternative pathway to develope...
PDF
Being a Tech Speaker with Global Mindset
PDF
#TinySpec2019 Slack Dev Meetup in Osaka & Tokyo (in Japanese)
PDF
Slack × Twilio - Uniquely Powering Communication
PDF
[2019 Serverless Summit] Building Serverless Slack Chatbot on IBM Cloud Func...
PDF
[2019 south bay meetup] Building more contextual message with Block Kit
PDF
[TechWorldSummit Stockholm 2019] Building Bots for Human with Conversational ...
PDF
Building a Bot with Slack Platform and IBM Watson
PDF
[日本語] Slack Bot Workshop + Intro Block Kit
PDF
[DevRelCon Tokyo 2019] Developer Experience Matters
PDF
[DevRel Summit 2018] Because we all learn things differently
PDF
[DevRelCon July 2018] Because we all learn things differently
PDF
[Japanese] Developing a bot for your workspace 翻訳ボットを作る!
PDF
[Forward4 Webinar 2016] Building IoT Prototypes w/ Raspberry Pi
PDF
Future of the Web with Conversational Interface
PDF
[DevRelCon Tokyo 2017] Creative Technical Content for Better Developer Experi...
ECMeowScript - What's New in JavaScript Explained with Cats (August 14th, 2020)
[POST.Dev Japan] VS Code で試みる開発体験の向上
[Japan M365 Dev UG] Teams Toolkit v4 を使ってみよう!
[#DevRelAsia Keynote 2020] Developer Centric Design for Better Experience
Engineering career is not a single ladder! - Alternative pathway to develope...
Being a Tech Speaker with Global Mindset
#TinySpec2019 Slack Dev Meetup in Osaka & Tokyo (in Japanese)
Slack × Twilio - Uniquely Powering Communication
[2019 Serverless Summit] Building Serverless Slack Chatbot on IBM Cloud Func...
[2019 south bay meetup] Building more contextual message with Block Kit
[TechWorldSummit Stockholm 2019] Building Bots for Human with Conversational ...
Building a Bot with Slack Platform and IBM Watson
[日本語] Slack Bot Workshop + Intro Block Kit
[DevRelCon Tokyo 2019] Developer Experience Matters
[DevRel Summit 2018] Because we all learn things differently
[DevRelCon July 2018] Because we all learn things differently
[Japanese] Developing a bot for your workspace 翻訳ボットを作る!
[Forward4 Webinar 2016] Building IoT Prototypes w/ Raspberry Pi
Future of the Web with Conversational Interface
[DevRelCon Tokyo 2017] Creative Technical Content for Better Developer Experi...

[Tokyo NodeFest 2015] Hardware Hacking for Javascript Developers