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
110
0
Share
IoT made easy @ SITCON x HK
IoT made easy: RPi, Sensortag, Websocket with Node.js
Jeremy Yen
October 22, 2016
More Decks by Jeremy Yen
See All by Jeremy Yen
dEXonation
jeremy5189
0
120
A day of full stack developer @ NFU
jeremy5189
0
220
Club Mate and Hacker - 34C3 @ SITCON
jeremy5189
2
730
SITCON 2017 論壇系統開發分享 @ SITCON 2017 Summer
jeremy5189
0
240
poManeuver: Poland into space
jeremy5189
0
470
How we hacked a forum
jeremy5189
0
520
Bdecisive - Booking.com Taipei Hack 2nd Prize
jeremy5189
0
580
Social Intelligence Smart-device project
jeremy5189
0
67
遺失的學校 - SITCON 2014 Lightning Talk
jeremy5189
0
570
Other Decks in Technology
See All in Technology
Cortex Codeのコスト見積ヒントご紹介
yokatsuki
0
130
基盤を育てる 外部SaaS連携の運用
gamonges_dresscode
1
130
AgentCore×VPCでの設計パターンn選と勘所
har1101
4
360
世界の中心でApp Runnerを叫ぶ FINAL
tsukuboshi
0
140
プラットフォームエンジニアリングの実践 - AWS コンテナサービスで構築する社内プラットフォーム / AWS Containers Platform Meetup #1
literalice
1
230
『生成AI時代のクレデンシャルとパーミッション設計 — Claude Code を起点に』の執筆企画
takuros
2
1.8k
AIと乗り切った1,500ページ超のヘルプサイト基盤刷新とさらにその先の話
mugi_uno
0
130
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
7.9k
音声言語モデル手法に関する発表の紹介
kzinmr
0
150
AIが自律的に働く時代へ Amazon Quick で実現するAIエージェント紹介
koheiyoshikawa
0
160
【技術書典20】OpenFOAM(自宅で深める流体解析)流れと熱移動(2)
kamakiri1225
0
350
データ定義の混乱と戦う 〜 管理会計と財務会計 〜
wonohe
0
170
Featured
See All Featured
First, design no harm
axbom
PRO
2
1.2k
The Pragmatic Product Professional
lauravandoore
37
7.2k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
350
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
140
The World Runs on Bad Software
bkeepers
PRO
72
12k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.2k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
230
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
RailsConf 2023
tenderlove
30
1.4k
Six Lessons from altMBA
skipperchong
29
4.2k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
WCS-LA-2024
lcolladotor
0
560
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