Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
IoT made easy @ SITCON x HK
Search
Jeremy Yen
October 22, 2016
Technology
0
110
IoT made easy @ SITCON x HK
IoT made easy: RPi, Sensortag, Websocket with Node.js
Jeremy Yen
October 22, 2016
Tweet
Share
More Decks by Jeremy Yen
See All by Jeremy Yen
dEXonation
jeremy5189
0
120
A day of full stack developer @ NFU
jeremy5189
0
210
Club Mate and Hacker - 34C3 @ SITCON
jeremy5189
2
710
SITCON 2017 論壇系統開發分享 @ SITCON 2017 Summer
jeremy5189
0
230
poManeuver: Poland into space
jeremy5189
0
450
How we hacked a forum
jeremy5189
0
490
Bdecisive - Booking.com Taipei Hack 2nd Prize
jeremy5189
0
570
Social Intelligence Smart-device project
jeremy5189
0
64
遺失的學校 - SITCON 2014 Lightning Talk
jeremy5189
0
560
Other Decks in Technology
See All in Technology
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
9
73k
Agile PBL at New Grads Trainings
kawaguti
PRO
1
440
DevIO2025_継続的なサービス開発のための技術的意思決定のポイント / how-to-tech-decision-makaing-devio2025
nologyance
1
400
【初心者向け】ローカルLLMの色々な動かし方まとめ
aratako
7
3.5k
職種の壁を溶かして開発サイクルを高速に回す~情報透明性と職種越境から考えるAIフレンドリーな職種間連携~
daitasu
0
170
下手な強制、ダメ!絶対! 「ガードレール」を「檻」にさせない"ガバナンス"の取り方とは?
tsukaman
2
450
ブロックテーマ時代における、テーマの CSS について考える Toro_Unit / 2025.09.13 @ Shinshu WordPress Meetup
torounit
0
130
初めてAWSを使うときのセキュリティ覚書〜初心者支部編〜
cmusudakeisuke
1
260
roppongirb_20250911
igaiga
1
240
AIのグローバルトレンド2025 #scrummikawa / global ai trend
kyonmm
PRO
1
290
dbt開発 with Claude Codeのためのガードレール設計
10xinc
2
1.2k
Generative AI Japan 第一回生成AI実践研究会「AI駆動開発の現在地──ブレイクスルーの鍵を握るのはデータ領域」
shisyu_gaku
0
280
Featured
See All Featured
Designing for Performance
lara
610
69k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Faster Mobile Websites
deanohume
309
31k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.6k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
188
55k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Embracing the Ebb and Flow
colly
87
4.8k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
920
Thoughts on Productivity
jonyablonski
70
4.8k
Producing Creativity
orderedlist
PRO
347
40k
Rails Girls Zürich Keynote
gr2m
95
14k
Side Projects
sachag
455
43k
Transcript
*P5NBEFFBTZVTJOH 3BTQCFSSZ1JBOE4FOTPSUBH +FSFNZ!4*5$0/Y),
QBUSJDLTUXTMJEFT "CPVU+FSFNZ ˙ #BDLFOE%FWFMPQFS ˙ 4*5$0/UX%FQVUZ%JSFDUPSPG"HFOEB$PNNJUUFF ˙ ,1.(5BJXBO*5"EWJTPSZ*OUFSO ˙ 5BJXBO5FDI
/5645 ˙ IUUQQBUSJDLTUX 2
QBUSJDLTUXTMJEFT 0VUMJOF ˙ $PNNVOJDBUJPOXJUI#-&EFWJDF ˙ 8SBQQJOHVQXJUI/PEFKT ˙ 'FFEJUUP8FCTPDLFU ˙ $POOFDUJOHUP.VMUJQMF%FWJDF
˙ 5SPVCMFTIPPUJOH ˙ "EEJUJPOBM*OTUBMMJOHPO.BD049 ˙ "EEJUJPOBM3FBEJOH23$PEFXJUI[CBS 3
QBUSJDLTUXTMJEFT 8IZ#-& ˙ *UJUDVSSFOUMZUSFOEJOHJO5BJXBO ˙ :PVSQSPGFTTPSMJLFTJU 4
QBUSJDLTUXTMJEFT 8IZ#-& ˙ *UJUDVSSFOUMZUSFOEJOHJO5BJXBO ˙ :PVSQSPGFTTPSMJLFTJU ˙ )FMJLFTCJHEBUBNPSF 5
QBUSJDLTUXTMJEFT 0CKFDUJWFT ˙ 6OEFSTUBOEJOH#-&QSPUPDPMGBTUFS ˙ #VJMEZPVSQSPKFDURVJDLMZ ˙ 6TF/PEFKTOPUKBWB 3FDPNNFOETCZZPVS QSPGFTTPS
6
7
Introduction
QBUSJDLTUXTMJEFT 3FRVJSFNFOU ˙ 3BTQCFSSZ1J #VJMUJOCMVFUPPUI ˙ CMVF[ESJWFS ˙ 5*4FOTPSUBH$$PS$$
9
QBUSJDLTUXTMJEFT 5*4FOTPSUBH $$ ˙ *35FNQFSBUVSF ˙ "DDFMFSPNFUFS ˙ )VNJEJUZ ˙
4JNQMF,FZ ˙ .BHOFUPNFUFS ˙ #BSPNFUSJD1SFTTVSF ˙ (ZSPTDPQF ˙ -VYPNFUFS ˙ *0 $$ ˙ *35FNQFSBUVSF ˙ "DDFMFSPNFUFS ˙ )VNJEJUZ ˙ 4JNQMF,FZ ˙ .BHOFUPNFUFS ˙ #BSPNFUSJD1SFTTVSF ˙ (ZSPTDPQF 10
QBUSJDLTUXTMJEFT 4JNQMF,FZ ˙ 5XPCVUUPOTPOUIFUBH ˙ 3FDFJWFTTJHOBMXIJMFQSFTTFE *ODMVEJOHCPUI QSFTTFE 11
QBUSJDLTUXTMJEFT $$*0 ˙ %JFSFOU$PMPS-&% ˙ #V[[FS 12
QBUSJDLTUXTMJEFT *OTUBMM#MVF[%SJWFS ˙ %FQFOEFODZ ˙ TVEPBQUHFUJOTUBMMMJCVTCEFWMJCECVTEFWMJCHMJC EFWMJCVEFWEFWMJCJDBMEFWMJCSFBEMJOFEFWMJCCMVFUPPUI EFW ˙ *OTUBMM
˙ XHFUXXXLFSOFMPSHQVCMJOVYCMVFUPPUI CMVF[UBSY[ ˙ DPOHVSFEJTBCMFTZTUFNE ˙ NBLF ˙ TVEPNBLFJOTUBMM 13
QBUSJDLTUXTMJEFT 5VSOPOCMVFUPPUIJOUFSGBDF hciconfig hciconfig hci0 up 14
QBUSJDLTUXTMJEFT 5FTU$POOFDUJPO sudo hcitool lescan gatttool -b [Address] -I 15
Communication with BLE device
QBUSJDLTUXTMJEFT ("551SPUPDPM [78:A5:04:19:59:B9][LE]> connect Attempting to connect to 78:A5:04:19:59:B9 Connection
successful 17
QBUSJDLTUXTMJEFT ("551SPUPDPM # Enable Humidity Sensor Service [78:A5:04:19:59:B9][LE]> char-write-cmd 0x3f
01 # Enable Notification [78:A5:04:19:59:B9][LE]> char-write-cmd 0x3c 01:00 Notification handle = 0x003b value: 38 6c be 84 Notification handle = 0x003b value: 38 6c be 84 ... http://processors.wiki.ti.com/images/a/a8/BLE_SensorTag_GATT_Server.pdf 18
QBUSJDLTUXTMJEFT 1SPDFTTJOH7BMVF var buffer = new Buffer([0x38, 0x6c, 0xbe, 0x84]);
var temperature = -46.85 + 175.72 / 65536.0 * buffer.readUInt16LE(0); var humidity = -6.0 + 125.0 / 65536.0 * (buffer.readUInt16LE(2) & ~0x0003); 19
QBUSJDLTUXTMJEFT 1SPDFTTJOH7BMVF ˙ 4BNQMF+4$PEF ˙ IUUQTHJUIVCDPNTBOEFFQNJTUSZOPEF TFOTPSUBHCMPCNBTUFSMJCDDKT ˙ 4QFDTBOE%PDVNFOUBUJPO ˙
IUUQQSPDFTTPSTXJLJUJDPNJOEFYQIQ 4FOTPS5BH@6TFS@(VJEF 20
Wrapping up with Node.js
QBUSJDLTUXTMJEFT *OTUBMM1BDLBHF sudo apt-get install nodejs npm sudo npm -g
install npm node-gyp npm install sensortag IUUQTHJUIVCDPNTBOEFFQNJTUSZOPEFTFOTPSUBH 22
QBUSJDLTUXTMJEFT OPEFTFOTPSUBH ˙ %FQFOETPOOPCMF /PEFKT#-& ˙ 8SBQVQBMMGFBUVSFTGPSBNPSFDMFBSDPEF 23
QBUSJDLTUXTMJEFT 3VO5FTU node test.js node test-cc2650-io.js 24
QBUSJDLTUXTMJEFT 1SPDFEVSF sensortag.discover(function(tag) { tag.connectAndSetUp(function(error) { tag.enableHumidity(function() { tag.notifyHumidity(); });
}); }); 4BZOPUPDBMMCBDLIFMM IUUQTHJUIVCDPNTBOEFFQNJTUSZOPEFTFOTPSUBH 25
QBUSJDLTUXTMJEFT 3FDFJWJOH%BUB tag.on('humidityChange', function (temperature, humidity) { }); 26
Feed it to Websocket
QBUSJDLTUXTMJEFT .BQUBHUPHMPCBM var _tag = {}; function enableService(error) { _tag[tag.uuid]
= tag; 28
QBUSJDLTUXTMJEFT XTGVODUJPO router.ws('/humidity/:uuid', function(ws, req) { _tag[uuid].on('humidityChange', function (temperature, humidity)
{ var obj = {}; obj[uuid] = { temperature: temperature, humidity: humidity }; ws.send(JSON.stringify(obj));; 29
QBUSJDLTUXTMJEFT OPUJGZEFWJDFTUBUVT function tagDiscovery(tag) { tag.on('disconnect', function() { // Remove
Property delete device_info[tag.uuid]; // Emit Disconnected Event events.emit('device_disconnect'); 30
QBUSJDLTUXTMJEFT OPUJGZEFWJDFTUBUVT var EventEmitter = require('events').EventEmitter, events = new EventEmitter();
router.ws('/connected', function(ws, req) { events.on('device_disconnect', function() { ws.send(JSON.stringify(device_info)); 31
Connecting to Multiple Device
QBUSJDLTUXTMJEFT 3VOUIFFYBNQMFDPEF 33
QBUSJDLTUXTMJEFT "OEJUXJMMOPUXPSL 34
QBUSJDLTUXTMJEFT 5SJDL ˙ %JTDPWFSUBH ˙ 4UPQEJTDPWFSXIJMFDPOOFDUJOH ˙ 3FTVNFEJTDPWFSZPODPOOFDUFEBOE EJTDPOOFDUFE 35
QBUSJDLTUXTMJEFT 4BNQMF$PEF ˙ IUUQTHJUIVCDPNKFSFNZ4FOTPSUBH 8FCTPDLFU 36
QBUSJDLTUXTMJEFT -JWF%FNP 37
Troubleshooting
QBUSJDLTUXTMJEFT 5SPVCMF*OEFY ˙ 31*EJTDPOOFDUFWFOUDBVTFTIBOH ˙ OPCMFXBSOJOHEVSJOHDPOOFDUJPOQSPDFTT ˙ $BOOPUFOBCMFEFWJDFTFSWJDF ˙ #-&"EESFTTVOLOPXOPO049
˙ .BYJNVNEFWJDF 39
QBUSJDLTUXTMJEFT 31*EJTDPOOFDUFWFOUDBVTFTIBOH ˙ ,OPXOJTTVF VOTPMWFE ˙ IUUQTHJUIVCDPNTBOEFFQNJTUSZOPCMFJTTVFT ˙ %JTDPOOFDUFELFZXBTQSFTTFEEVSJOHDPOOFDUJPO NBZ
DBVTFIBOHBOESFGVTFUPDPOOFDUBHBJO ˙ 8PSLBSPVOE ˙ .BOVBM3FTUBSU/PEFKTQSPDFTT 40
QBUSJDLTUXTMJEFT OPCMFXBSOJOHEVSJOHDPOOFDUJPO QSPDFTT ˙ )BQQFOT SBOEPNMZ CFGPSF DPOOFDU"OE4FU6Q.F ˙
8PSLBSPVOE ˙ DBUDIDPOTPMFXBSOGVODUJPO NTH JGOPCMF XBSOJOHBQQFBSTUIFOSFTUBSUOPEFKTQSPDFTT 41
QBUSJDLTUXTMJEFT $BOOPUFOBCMFEFWJDFTFSWJDF ˙ 4PNFUJNFT "GUFSDPOOFDU"OE4FU6Q.F UIF EFWJDFTFSWJDFXPOUFOBCMF ˙ 8PSLBSPVOE ˙
4FUVQBTFU5JNFPVU XBUDIEPHBOEXBJU TFDPOET*GTFSWJDFOPUFOBCMFECZUIBUUJNF UBHEJTDPOOFDU 42
QBUSJDLTUXTMJEFT #-&BEESFTTVOLOPXOPO049 ˙ $BVTFCZSTUUJNFDPOOFDU 43
Additional: Installing on Mac OSX
QBUSJDLTUXTMJEFT ,FZQPJOU ˙ CMVFUPPUIIDJTPDLFUEPOPUTVQQPSUEBSXJO ˙ JOTUBMM9DPEF ˙ OQNJOTUBMMYMDDPOOFDUJPOCQMJTUQBSTFS ˙ /PCMVFUPPUILUFYUNPEJDBUJPO
45
QBUSJDLTUXTMJEFT 4FOTPSUBH0493FNPUF ˙ 6TJOH4FOTPSUBHBTBLFZOPUFSFNPUF ˙ *BNDVSSFOUMZVTJOH ˙ IUUQTHJUIVCDPNKFSFNZ4FOTPSUBH 0493FNPUF 46
QBUSJDLTUXTMJEFT "EEJEJPOUBM## ˙ $POUSPMMJOH4UBSXBST##VTJOH/PEFKT 47
48
Additional: Reading QR Code with zbar
QBUSJDLTUXTMJEFT $IPPTFUIFSJHIUDBNFSB ˙ 31J$BNFSBXJMMOPUXPSL ˙ 6TF64#XFCDBNJOTUFBE -PHJUFDI$ ˙ 31*NVTUBVUPMPHJOUPEFTLUPQ
[CBSCVH 50
QBUSJDLTUXTMJEFT *OTUBMMBOE5FTU ˙ TVEPBQUHFUJOTUBMM[CBSUPPMTQZUIPO[CBS ˙ [CBSDBNEFWWJEFP 51
Thank you
Q & A